给定一个硬盘盘符,如何获取厂商序列号?
Given a hard disk letter, how can I get the manufacturer serial number?
我在尝试确定驱动器的制造商序列号时遇到了很多麻烦,而这可能是最快的方法(而不是调用 WMI)。
我可以用来查询制造商序列号的信息是驱动器号(例如C:\)或操作分配的数字序列号系统到驱动器(例如 4030771280),我通过指定驱动器号调用 GetVolumeInformation 函数来检索该信息。
Whosebug 中有很多关于如何使用 WMI 检索制造商序列号的示例和 Q/A,但是所有这些问题和答案都是针对 CURRENT 驱动器,而 Win32_PhysicalMedia and Win32_DiskDrive 类 似乎没有公开我可以使用的 属性 WHERE
根据盘符或其系统序列号查询特定驱动器的序列号
我愿意接受暗示中间步骤的解决方案,例如“首先您需要从驱动器号中获取设备 ID,然后您可以使用该值查询 WMI”(当然最好使用 WinAPI 函数来避免 WMI 调用的负面性能影响),问题是我不知道如何像引用那样进行所需的检索,因为 Volume Management Functions 似乎没有从驱动器号中检索磁盘信息的有用函数,只有 GetVolumeInformation
函数,我只能在该函数上检索系统的串行信息,即一个我不能用来对 WMI 和磁盘标题进行查询的值,我也不能使用它,因为多个磁盘可能具有相同的标题...
没有简单的方法可以根据卷号获取硬盘驱动器的序列号 - 例如如果是 RAID 5,则有多个物理驱动器构成卷。获取硬盘序列号会更容易:
// A little bit modified code from
public string identifier(string wmiClass, string wmiProperty)
{
string result = "";
System.Management.ManagementClass mc = new System.Management.ManagementClass(wmiClass);
System.Management.ManagementObjectCollection moc = mc.GetInstances();
foreach (System.Management.ManagementObject mo in moc)
{
//Only get the first one
if (result == "")
{
try
{
result = mo[wmiProperty].ToString();
break;
}
catch
{
}
}
}
return result;
}
并像这样使用它:
identifier("Win32_DiskDrive", "SerialNumber"));
此源代码不会满足您的需求,但可能会帮助您找到解决方案。
编辑:如果没有 WMI,就没有简单的方法来获取硬件信息 - 您很可能必须编写自己的库才能与硬件交互。
我在尝试确定驱动器的制造商序列号时遇到了很多麻烦,而这可能是最快的方法(而不是调用 WMI)。
我可以用来查询制造商序列号的信息是驱动器号(例如C:\)或操作分配的数字序列号系统到驱动器(例如 4030771280),我通过指定驱动器号调用 GetVolumeInformation 函数来检索该信息。
Whosebug 中有很多关于如何使用 WMI 检索制造商序列号的示例和 Q/A,但是所有这些问题和答案都是针对 CURRENT 驱动器,而 Win32_PhysicalMedia and Win32_DiskDrive 类 似乎没有公开我可以使用的 属性 WHERE
根据盘符或其系统序列号查询特定驱动器的序列号
我愿意接受暗示中间步骤的解决方案,例如“首先您需要从驱动器号中获取设备 ID,然后您可以使用该值查询 WMI”(当然最好使用 WinAPI 函数来避免 WMI 调用的负面性能影响),问题是我不知道如何像引用那样进行所需的检索,因为 Volume Management Functions 似乎没有从驱动器号中检索磁盘信息的有用函数,只有 GetVolumeInformation
函数,我只能在该函数上检索系统的串行信息,即一个我不能用来对 WMI 和磁盘标题进行查询的值,我也不能使用它,因为多个磁盘可能具有相同的标题...
没有简单的方法可以根据卷号获取硬盘驱动器的序列号 - 例如如果是 RAID 5,则有多个物理驱动器构成卷。获取硬盘序列号会更容易:
// A little bit modified code from
public string identifier(string wmiClass, string wmiProperty)
{
string result = "";
System.Management.ManagementClass mc = new System.Management.ManagementClass(wmiClass);
System.Management.ManagementObjectCollection moc = mc.GetInstances();
foreach (System.Management.ManagementObject mo in moc)
{
//Only get the first one
if (result == "")
{
try
{
result = mo[wmiProperty].ToString();
break;
}
catch
{
}
}
}
return result;
}
并像这样使用它:
identifier("Win32_DiskDrive", "SerialNumber"));
此源代码不会满足您的需求,但可能会帮助您找到解决方案。
编辑:如果没有 WMI,就没有简单的方法来获取硬件信息 - 您很可能必须编写自己的库才能与硬件交互。