Пример #1
0
        // Open CD Drive with Win32Functions
        public bool Open(char Drive)
        {
            Close();
            if (Win32Functions.GetDriveType(Drive + ":\\") == Win32Functions.DriveTypes.DRIVE_CDROM)
            {
                cdHandle = Win32Functions.CreateFile("\\\\.\\" + Drive + ':', Win32Functions.GENERIC_READ, Win32Functions.FILE_SHARE_READ | Win32Functions.FILE_SHARE_WRITE, IntPtr.Zero, Win32Functions.OPEN_EXISTING, 0, IntPtr.Zero);
                if ((int)cdHandle == -1)
                {
                    int errCode = Marshal.GetLastWin32Error();
                }
                if (((int)cdHandle != -1) && ((int)cdHandle != 0))
                {
                    /*Win32Functions.CDROM_SET_SPEED setSpeed = new Win32Functions.CDROM_SET_SPEED();
                     * setSpeed.RequestType = Win32Functions.CDROM_SPEED_REQUEST.CdromSetSpeed;
                     * setSpeed.RotationControl = Win32Functions.WRITE_ROTATION.CdromDefaultRotation;
                     * setSpeed.ReadSpeed = 0xffff;*/

                    Win32Functions.CDROM_SET_STREAMING setSpeed = new Win32Functions.CDROM_SET_STREAMING();
                    setSpeed.RequestType = Win32Functions.CDROM_SPEED_REQUEST.CdromSetStreaming;
                    if (Settings.Current.RecordSpeed == 0)
                    {
                        setSpeed.ReadSize = 0xffff;
                    }
                    else
                    {
                        setSpeed.ReadSize = (uint)((double)Settings.Current.RecordSpeed * 176400.0 / 1024.0);
                    }
                    setSpeed.ReadTime        = 1000; // in ms
                    setSpeed.WriteSize       = 0xffff;
                    setSpeed.WriteTime       = 1000;
                    setSpeed.StartLba        = 0xffffffff;
                    setSpeed.EndLba          = 0xffffffff;
                    setSpeed.RotationControl = Win32Functions.WRITE_ROTATION.CdromDefaultRotation;
                    setSpeed.RestoreDefaults = 0; //(byte)false;
                    setSpeed.SetExact        = 0; //false;
                    setSpeed.RandomAccess    = 0; //false;
                    setSpeed.Persistent      = 1; //true;

                    uint BytesRead = 0;
                    int  result    = Win32Functions.DeviceIoControl(cdHandle, Win32Functions.IOCTL_CDROM_SET_SPEED, setSpeed, (uint)Marshal.SizeOf(setSpeed), null, 0, ref BytesRead, IntPtr.Zero);

                    m_Drive              = Drive;
                    NotWnd               = new DeviceChangeNotificationWindow();
                    NotWnd.DeviceChange += new DeviceChangeEventHandler(NotWnd_DeviceChange);
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            else
            {
                return(false);
            }
        }
Пример #2
0
 public void Close()
 {
     UnLockCD();
     if (NotWnd != null)
     {
         NotWnd.DestroyHandle();
         NotWnd = null;
     }
     if (((int)cdHandle != -1) && ((int)cdHandle != 0))
     {
         Win32Functions.CloseHandle(cdHandle);
     }
     cdHandle = IntPtr.Zero;
     m_Drive  = '\0';
     TocValid = false;
 }