我想知道连接的驱动器是否通过 SATA、IDE、eSATA 或 Firewire 连接到 USB。有没有办法在不使用 WMI 的情况下找到它?我正在使用此代码来获取一些信息。
DriveInfo[] drives = DriveInfo.GetDrives();
foreach (DriveInfo drive in drives) {
// DriveType.Fixed && DriveType.Removable
}
不幸的是,所有通过 USB 连接的 HDD 都会返回DriveType.Fixed
,并且只有 USB 记忆棒才能使用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'");
但我宁愿避免它。