コード例 #1
0
ファイル: CDDrive.cs プロジェクト: svn2github/fourdo-SFNET
        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());
        }
コード例 #2
0
ファイル: CDDrive.cs プロジェクト: svn2github/fourdo-SFNET
 /// <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);
     }
 }
コード例 #3
0
ファイル: CDDrive.cs プロジェクト: svn2github/fourdo-SFNET
 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);
 }
コード例 #4
0
ファイル: CDDrive.cs プロジェクト: svn2github/fourdo-SFNET
 /// <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);
     }
 }
コード例 #5
0
ファイル: CDDrive.cs プロジェクト: svn2github/fourdo-SFNET
        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);
            }
        }
コード例 #6
0
ファイル: CDDrive.cs プロジェクト: svn2github/fourdo-SFNET
 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;
 }
コード例 #7
0
ファイル: CDDrive.cs プロジェクト: svn2github/fourdo-SFNET
 /// <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);
     }
 }
コード例 #8
0
ファイル: CDDrive.cs プロジェクト: svn2github/fourdo-SFNET
 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);
     }
 }
コード例 #9
0
ファイル: CDDrive.cs プロジェクト: svn2github/fourdo-SFNET
        /// <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);
            }
        }
コード例 #10
0
ファイル: CDDrive.cs プロジェクト: svn2github/fourdo-SFNET
        public uint GetCDSizeInBytes()
        {
            uint cdSize = Win32Functions.GetFileSize(cdHandle, 0);

            return(cdSize);
        }