//-------------- Rotinas public DVDRomReader(Char drive) { context = IOManager.CreateIOContext("DVD-ROM " + drive, @"\\.\" + drive + ':', FileAccess.Read, FileShare.Read, 0, FileMode.Open, EFileAttributes.NoBuffering); context.Lock(); DISK_GEOMETRY dg = context.GetDiskGeometry(); sectorSize = (int)dg.BytesPerSector; PARTITION_INFORMATION pi = context.GetPartitionInformation(); size = pi.PartitionLength; context.Unlock(); }
//--------------- Lê a Geometria do disco public DISK_GEOMETRY GetDiskGeometry() { DISK_GEOMETRY dg = new DISK_GEOMETRY(); int bytes = 0; if (!lockedByMe) { result = (int)IORet.RET_IO_UNLOCKED; Log.SendMessage(name, (int)IORet.RET_IO_UNLOCKED, null, LogMessageType.Error); return(dg); } //--------- Determina a geometria do disco if (DeviceIoControl(handle.handle, IOManager.IOCTL_DISK_GET_DRIVE_GEOMETRY, IntPtr.Zero, 0, ref dg, Marshal.SizeOf(dg), ref bytes, 0) == 0) { //Loga erro result = Marshal.GetLastWin32Error(); Log.SendMessage(name, (int)IORet.RET_IO_NATIVEERROR, result, LogMessageType.Error); } return(dg); }
private static extern int DeviceIoControl(int hDevice, uint dwIoControlCode, IntPtr InBuffer, int nInBufferSize, ref DISK_GEOMETRY OutBuffer, int nOutBufferSize, ref int pBytesReturned, int lpOverlapped);