首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在python中获取硬盘驱动的序列号

如何在python中获取硬盘驱动的序列号
EN

Stack Overflow用户
提问于 2012-03-13 19:41:18
回答 3查看 7.7K关注 0票数 3

我尝试使用wmi来获取硬盘的序列号。我做的是这样的:

启动ipython并使用以下方式获取序列号:

代码语言:javascript
复制
import wmi
c = wmi.WMI()
for x in c.Win32_PhysicalMedia():
    print x

结果如下所示:

代码语言:javascript
复制
instance of Win32_PhysicalMedia
{
    SerialNumber = "2020202020202020202020205635514d385a5856";
    Tag = "\\\\.\\PHYSICALDRIVE0";
};

但我的计算机是win7,我使用管理员权限启动ipython,然后再次执行相同的操作,但现在结果不同:

代码语言:javascript
复制
instance of Win32_PhysicalMedia
{
    SerialNumber = "            5VMQZ8VX";
    Tag = "\\\\.\\PHYSICALDRIVE0";
};

我猜第二个结果更像是一个正确的结果。那么谁能告诉我在windows上获取序列号的正确方法,包括XP,Vista,Win7,Win8?

我发现很多人使用CreateFileA和DeviceIoControl来获取序列号。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-13 20:12:41

如果你在谷歌上搜索"Win32_PhysicalMedia",第二个结果是一个错误报告,现在我仔细阅读了所有内容,它看起来准确地描述了你的问题(但从我看到的情况来看,它没有提供任何修复):http://connect.microsoft.com/VisualStudio/feedback/details/623282/win32-physicalmedia-returns-incorrect-serial-number-on-vista-or-higher-when-run-as-standard-user

因此,你可能不得不自己动手解决问题。这是我最初在这个答案中写的:

看看这两个字符串:

代码语言:javascript
复制
2020202020202020202020205635514d385a5856
 5VMQZ8VX (yes there's a space in front)

请注意,第一个显示为十六进制数。0x20是一个空格字符。因此,第一个序列号有许多空格,后面跟着几个字节的实际数据,这使得两个序列号在大小上具有可比性。

现在,使用十六进制到ASCII码的转换器,比如http://www.dolcevie.com/js/converter.html,然后输入第一个数字。你会得到:

代码语言:javascript
复制
            V5QM8ZXV

看看这看起来有多相似?现在唯一的区别是字节排序(字节顺序)。

要一劳永逸地解决这个问题,您需要告诉我们您认为这三个序列号中的哪一个是序列号的“适当”表示(理想情况下,它将与驱动器上打印的内容相匹配)。一旦弄清楚所处的位置(显然取决于平台--可能取决于Python、WMI或您正在使用的Python WMI模块的版本),就可以很容易地在三种表示形式之间进行转换。

票数 3
EN

Stack Overflow用户

发布于 2020-11-29 08:47:14

迟到比以往任何时候都好,我希望这对其他人有帮助。我不知道从哪拿来的。

代码语言:javascript
复制
import wmi

c = wmi.WMI()
hddSerialNumber = c.Win32_PhysicalMedia()[0].wmi_property('SerialNumber').value.strip()
print(hddSerialNumber)
票数 1
EN

Stack Overflow用户

发布于 2012-03-13 20:16:03

代码语言:javascript
复制
>>> import binascii
>>> binascii.a2b_hex("2020202020202020202020205635514d385a5856")
'            V5QM8ZXV'

替换字符被交换...看起来它们可能是相同的序列号。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9683278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档