Ejemplo n.º 1
0
        internal static DiskGeometry GetGeometry(SafeFileHandle handle)
        {
            if (handle.IsInvalid)
            {
                throw new Win32Exception(6);
            }
            var bufPtr = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(DiskGeometry)));

            try {
                using (var deviceIoOverlapped = new DeviceIoOverlapped(new ManualResetEvent(false).SafeWaitHandle.DangerousGetHandle())) {
                    int retSize;
                    if (!DeviceIoControl(handle, (int)IOCTL.DiskGetGeometry, IntPtr.Zero, 0, bufPtr, Marshal.SizeOf(typeof(DiskGeometry)), out retSize, deviceIoOverlapped.GlobalOverlapped))
                    {
                        throw new Win32Exception(Marshal.GetLastWin32Error());
                    }
                    return((DiskGeometry)Marshal.PtrToStructure(bufPtr, typeof(DiskGeometry)));
                }
            }
            finally {
                Marshal.FreeHGlobal(bufPtr);
            }
        }
Ejemplo n.º 2
0
 public static extern bool GetOverlappedResult(
     SafeFileHandle hFile,                  // ファイル、パイプ、通信デバイスのハンドル
     DeviceIoOverlapped lpOverlapped,       // オーバーラップ構造体
     out ushort lpNumberOfBytesTransferred, // 転送されたバイト数
     bool bWait                             // 待機オプション
     );
Ejemplo n.º 3
0
 internal static DiskGeometry GetGeometry(SafeFileHandle handle)
 {
     if(handle.IsInvalid)
         throw new Win32Exception(6);
     var bufPtr = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(DiskGeometry)));
     try {
         using(var deviceIoOverlapped = new DeviceIoOverlapped(new ManualResetEvent(false).SafeWaitHandle.DangerousGetHandle())) {
             int retSize;
             if (!DeviceIoControl(handle, (int)IOCTL.DiskGetGeometry, IntPtr.Zero, 0, bufPtr, Marshal.SizeOf(typeof(DiskGeometry)), out retSize, deviceIoOverlapped.GlobalOverlapped))
                 throw new Win32Exception(Marshal.GetLastWin32Error());
             return (DiskGeometry) Marshal.PtrToStructure(bufPtr, typeof(DiskGeometry));
         }
     }
     finally {
         Marshal.FreeHGlobal(bufPtr);
     }
 }