我们的反盗版软件根据人们的硬盘序列号来识别他们。我相信这是一个不变的功能,不会改变,除非用户改变他们的主要物理驱动器-纠正我,如果我错了?我们使用WMIpython模块来获取用户硬盘驱动器序列号。
对于我们的两台测试计算机,硬盘驱动器序列号已更改。但我们根本没有更换他们的硬盘。
什么会导致这样的问题?我们识别序列号的代码是否不全面?我确实注意到post提到,如果标准用户进程检索序列号,您可能会得到错误的序列号。但在我们的例子中,该错误也发生在管理员用户身上。
一些重要信息:这两个测试节点都运行Windows 8 Professional
一台电脑是东芝笔记本电脑
另一台电脑是Acer Iconia平板电脑
平板电脑最近从Windows 8更新到windows8.1,我注意到更新后序列号发生了变化
笔记本电脑的管理员用户遇到了这个问题。平板电脑有一个标准用户体验过这个问题。
硬盘序列号是硬件设备的MAC地址还是其他什么?
获取硬盘序列号的代码:c = wmi.WMI()
for item in c.Win32_PhysicalMedia():
if "PHYSICALDRIVE" in str(item.Tag).upper():
serialNo = item.SerialNumber
break
编辑:将用户硬盘驱动器序列号作为普通进程和提升/管理进程检索的短脚本。
注意:对我来说,无论是作为用户还是作为管理员,它都会输出完全相同的序列号。这个剧本对你也一样吗?import os
import sys
import wmi
import win32com.shell.shell as shell
ASADMIN = 'asadmin'
def get_elevated_privleges():
if sys.argv[-1] != ASADMIN:
script = os.path.abspath(sys.argv[0])
params = ' '.join([script] + sys.argv[1:] + [ASADMIN])
shell.ShellExecuteEx(lpVerb='runas', lpFile=sys.executable, lpParameters=params)
def get_hard_drive_serial():
c = wmi.WMI()
for item in c.Win32_PhysicalMedia():
if "PHYSICALDRIVE" in str(item.Tag).upper():
return str(item.SerialNumber)
return None
print "HD Serial as Regular User: " + get_hard_drive_serial()
get_elevated_privleges()
print "HD Serial as Admin User: " + get_hard_drive_serial()