为什么GetVolumeInformation为序列号返回一个int?

时间:2013-08-22 16:59:49

标签: winapi

如何正确识别计算机中的物理驱动器和分区?我尝试过使用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或硬盘驱动器在连接到其他计算机时是相同的物理设备。我还需要知道,即使用户重命名或更改驱动器号,分区或卷也是相同的。

2 个答案:

答案 0 :(得分:1)

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

如果您希望将其格式化为dir返回的格式,请使用

serialNumber.ToString("X8");

答案 1 :(得分:1)

你混淆了两件不同的事情。文档说:

  

lpVolumeSerialNumber [out,optional]

     

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

因此,这是 OS分配的序列号。它分配了它,我确信它知道返回它的正确格式。

接着说:

  

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