私はC#に変換する必要があるIOCTL_VOLUME_GET_VOLUME_DISK_EXTENTSでDeviceIoControlを呼び出すC++コードを使用しました。
多くのDeviceIoControl p \ invokeサンプルが見つかりましたが、この特定のフラグはありませんでした。 私は次のようにextern使用して試してみた:常にあるDeviceIoControl with IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS - C#
int bytesReturned = 0;
DiskExtents diskExtents = new DiskExtents();
bool res = DeviceIoControl(hVol, 5636096, IntPtr.Zero, 0, ref diskExtents, Marshal.SizeOf(diskExtents), ref bytesReturned, IntPtr.Zero);
しかし、コール・リターン偽とデータ構造:
[DllImport("kernel32", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool DeviceIoControl(SafeFileHandle hVol, int controlCode, IntPtr inBuffer, int inBufferSize, ref DiskExtents outBuffer, int outBufferSize, ref int bytesReturned, IntPtr overlapped);
構造:
[StructLayout(LayoutKind.Sequential)]
public struct DiskExtent
{
public uint DiskNumber;
public long StartingOffset;
public long ExtentLength;
}
[StructLayout(LayoutKind.Sequential)]
public struct DiskExtents
{
public int numberOfExtents;
public DiskExtent[] first;
}
そして、次の呼び出しのコードを空の。 助けがあれば助かります!
これはいくつのディスクで動作する必要がありますか? 1つのDiskExtent構造体に書き込むために呼び出すことは*かなり簡単*でしょう。あなたは複数をサポートする必要がありますか? –