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#的签名.
| 归档时间: |
|
| 查看次数: |
3178 次 |
| 最近记录: |