0

如何正确识别计算机中的物理驱动器和分区?我尝试使用 GetVolumeInformation 中的 VOLUME 序列号,但很震惊地看到它返回的是 NUMBER 而不是字母数字值?

[DllImport("Kernel32.dll", SetLastError = true)]
extern static bool GetVolumeInformation(string vol, StringBuilder name, int nameSize, out uint serialNum, out uint maxNameLen, out uint flags, StringBuilder fileSysName, int fileSysNameSize);

我需要知道 USB 拇指驱动器、CD 或 DVD 或硬盘驱动器在连接到不同的计算机时是同一个物理设备。我还需要知道分区或卷即使在用户重命名或更改驱动器号后也是相同的。

4

2 回答 2

1

它还应该返回什么?它只是文件系统在格式化时分配的一个 32 位数字。

如果你想让它像dir返回的那样格式化,只需使用

serialNumber.ToString("X8");
于 2013-08-22T17:01:42.803 回答
1

你混淆了两个不同的东西。文档说:

lpVolumeSerialNumber [输出,可选]

该函数返回格式化硬盘时操作系统分配的卷序列号。

所以,这是操作系统分配的序列号。它分配了它,我确定它知道返回它的正确格式。

它接着说:

要以编程方式获取制造商分配的硬盘序列号,请使用 Windows Management Instrumentation (WMI) Win32_PhysicalMedia 属性 SerialNumber。

于 2013-08-22T17:02:39.310 回答