public static char[] GetCDDriveLetters() { string res = ""; for (char c = 'C'; c <= 'Z'; c++) { if (Win32Functions.GetDriveType(c + ":") == Win32Functions.DriveTypes.DRIVE_CDROM) { res += c; } } return(res.ToCharArray()); }
/// <summary> /// Open the CD drive door /// </summary> /// <returns>True on success</returns> public bool EjectCD() { TocValid = false; if (((int)cdHandle != -1) && ((int)cdHandle != 0)) { uint Dummy = 0; return(Win32Functions.DeviceIoControl(cdHandle, Win32Functions.IOCTL_STORAGE_EJECT_MEDIA, IntPtr.Zero, 0, IntPtr.Zero, 0, ref Dummy, IntPtr.Zero) != 0); } else { return(false); } }
protected bool ReadTOC() { if (((int)cdHandle != -1) && ((int)cdHandle != 0)) { uint BytesRead = 0; TocValid = Win32Functions.DeviceIoControl(cdHandle, Win32Functions.IOCTL_CDROM_READ_TOC, IntPtr.Zero, 0, Toc, (uint)Marshal.SizeOf(Toc), ref BytesRead, IntPtr.Zero) != 0; } else { TocValid = false; } return(TocValid); }
/// <summary> /// Unlock CD drive /// </summary> /// <returns>True on success</returns> public bool UnLockCD() { if (((int)cdHandle != -1) && ((int)cdHandle != 0)) { uint Dummy = 0; Win32Functions.PREVENT_MEDIA_REMOVAL pmr = new Win32Functions.PREVENT_MEDIA_REMOVAL(); pmr.PreventMediaRemoval = 0; return(Win32Functions.DeviceIoControl(cdHandle, Win32Functions.IOCTL_STORAGE_MEDIA_REMOVAL, pmr, (uint)Marshal.SizeOf(pmr), IntPtr.Zero, 0, ref Dummy, IntPtr.Zero) != 0); } else { return(false); } }
public bool ReadSector(int sector, IntPtr Buffer) { uint BytesRead = 0; Win32Functions.SetFilePointer(cdHandle, 2048 * sector, 0, Win32Functions.EMoveMethod.Begin); if (Win32Functions.ReadFile(cdHandle, Buffer, 2048, out BytesRead, IntPtr.Zero) == true) { return(true); } 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; }
/// <summary> /// Check if there is CD in the drive /// </summary> /// <returns>True on success</returns> public bool IsCDReady() { if (((int)cdHandle != -1) && ((int)cdHandle != 0)) { uint Dummy = 0; if (Win32Functions.DeviceIoControl(cdHandle, Win32Functions.IOCTL_STORAGE_CHECK_VERIFY, IntPtr.Zero, 0, IntPtr.Zero, 0, ref Dummy, IntPtr.Zero) != 0) { return(true); } else { TocValid = false; return(false); } } else { TocValid = false; return(false); } }
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, IntPtr.Zero, Win32Functions.OPEN_EXISTING, 0, IntPtr.Zero); if (((int)cdHandle != -1) && ((int)cdHandle != 0)) { m_Drive = Drive; NotWnd = new DeviceChangeNotificationWindow(); NotWnd.DeviceChange += new DeviceChangeEventHandler(NotWnd_DeviceChange); return(true); } else { return(true); } } else { return(false); } }
/// <summary> /// Read Audio Sectors /// </summary> /// <param name="sector">The sector where to start to read</param> /// <param name="Buffer">The length must be at least CB_CDDASECTOR*Sectors bytes</param> /// <param name="NumSectors">Number of sectors to read</param> /// <returns>True on success</returns> protected bool ReadSector(int sector, byte[] Buffer, int NumSectors) { if (TocValid && ((sector + NumSectors) <= GetEndSector(Toc.LastTrack)) && (Buffer.Length >= CB_AUDIO * NumSectors)) { Win32Functions.RAW_READ_INFO rri = new Win32Functions.RAW_READ_INFO(); rri.TrackMode = Win32Functions.TRACK_MODE_TYPE.CDDA; rri.SectorCount = (uint)NumSectors; rri.DiskOffset = sector * CB_CDROMSECTOR; uint BytesRead = 0; if (Win32Functions.DeviceIoControl(cdHandle, Win32Functions.IOCTL_CDROM_RAW_READ, rri, (uint)Marshal.SizeOf(rri), Buffer, (uint)NumSectors * CB_AUDIO, ref BytesRead, IntPtr.Zero) != 0) { return(true); } else { return(false); } } else { return(false); } }
public uint GetCDSizeInBytes() { uint cdSize = Win32Functions.GetFileSize(cdHandle, 0); return(cdSize); }