如何知道两个分区是否在没有WMI的物理硬盘中?

Alo*_*kin 4 c# windows wmi disk-partitioning

我有这些分区(在Windows中),例如:

Hard Disk 1 - Partition C, Partition D
Hard Disk 2 - Partition E
Run Code Online (Sandbox Code Playgroud)

在程序语言中是否有任何方法可以知道例如分区C和分区D是否在没有WMI的物理硬盘中?

我不想使用WMI,因为它很慢 - 对于这个例子,它花了我0.5秒.我需要快速.

谢谢.

Chr*_*n V 10

我不知道有任何其他托管方式来获取磁盘分区信息.您可以使用C#中的P/Invoke使用Win32 API.但是,除非绝对必要,否则你不应该这样做.

您需要的Win32函数称为DeviceIoControl().API文档可以在http://msdn.microsoft.com/en-us/library/aa363216(VS.85).aspx找到.使用控制代码IOCTL_STORAGE_GET_DEVICE_NUMBER调用DeviceIoControl(),您将获得给定分区设备句柄的物理磁盘驱动器.可以使用CreateFile()API检索分区的设备句柄.

但是,使用DeviceIoControl()很麻烦,您很可能必须为32位和64位版本的Windows制作不同的版本.

要检索所有分区,您可以使用托管代码System.IO.DriveInfo,如下所示:

var x = from di in DriveInfo.GetDrives()
        where (di.DriveType == DriveType.Fixed)
        select di;

foreach (DriveInfo di in x)
{
    // Call DeviceIoControl() using the partition name from di.Name and the IOCTL_STORAGE_GET_DEVICE_NUMBER  control code to retrieve the physical disk
}
Run Code Online (Sandbox Code Playgroud)

似乎pinvoke.net有一些C#的签名.