例如,我有那些分区(在 Windows 中):
Hard Disk 1 - Partition C, Partition D
Hard Disk 2 - Partition E
程序语言中是否有任何方法可以知道分区 C 和分区 D 是否在一个物理硬盘中没有 WMI?
我不想使用 WMI,因为它很慢 - 对于这个例子,我花了 0.5 秒。我需要它快点。
谢谢。
最佳答案
我不知道有任何其他管理方式来获取磁盘分区信息。 您可以使用 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
}
pinvoke.net 似乎有一些 signatures for C#.
关于c# - 如何在没有 WMI 的情况下知道两个分区是否在一个物理硬盘中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2443554/