我想知道连接的驱动器是否是通过 SATA、IDE、eSATA 或 Firewire 连接的 USB。有没有办法不用 WMI 就能找到它?我正在使用此代码来获取一些信息。
DriveInfo[] drives = DriveInfo.GetDrives();
foreach (DriveInfo drive in drives) {
// DriveType.Fixed && DriveType.Removable
}
不幸的是,所有通过 USB DriveType.Fixed
连接的 HDD 都会返回,并且只有 USB Sticks 变为 DriveType.Removable
。
我想我正在寻找这样的东西...只是我不知道我到底在寻找什么。不幸的是 GetVolumeInformation
没有提供了解 InterfaceType
[DllImport("kernel32.dll")]
private static extern long GetVolumeInformation(
string PathName,
StringBuilder VolumeNameBuffer,
UInt32 VolumeNameSize,
ref UInt32 VolumeSerialNumber,
ref UInt32 MaximumComponentLength,
ref UInt32 FileSystemFlags,
StringBuilder FileSystemNameBuffer,
UInt32 FileSystemNameSize);
我想跳过 WMI。我知道我可以通过或多或少的代码找到它:
ManagementObjectSearch theSearcher = new ManagementObjectSearcher(
"SELECT * FROM Win32_DiskDrive WHERE InterfaceType='USB'");
但我宁愿避免它。
最佳答案
我不确定您为什么需要如此特别的变体;但你必须使用 WMI。不幸的是,虽然基于 USB 的硬盘驱动器是可移动的,但它仍然使用实际的磁盘而不是闪存。因此 DriveInfo
将更有可能认为它已修复。
唯一的选择是导入 System.Management
程序集。
您可以检索每个驱动器的总线信息。或者可能使用此工具检索 HID Descriptions
.或通常用于编写 custom drivers 的其他工具.
但这可能是您最好的套件;因为它包括一种简单地确定驱动器是外部还是不是的方法。 Which obviously won't address the fixed / removable but will assist in targeting the type of device .
希望对您有所帮助。
关于c# - 在没有 WMI 的情况下检测 HDD 是否通过 USB 或其他方式连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10421720/