// 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); } }
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; }