我们的反盗版软件根据硬盘序列号识别用户。我相信这是一个固定的特征,除非用户更换主物理驱动器-如果我错了,请纠正我。我们使用
我们两台测试计算机中有 2 台硬盘序列号发生了改变,但我们并没有更换它们的硬盘。 可能是什么原因导致这样的问题? 我们用于识别序列号的代码是否不够全面,无法适用于所有的 Windows 操作系统?我注意到这个帖子提到,如果标准用户进程检索序列号,则可能会得到错误的序列号。但在我们的情况下,即使是管理员用户也出现了错误。
一些重要信息:
WMI
python 模块来获取用户的硬盘序列号。我们两台测试计算机中有 2 台硬盘序列号发生了改变,但我们并没有更换它们的硬盘。 可能是什么原因导致这样的问题? 我们用于识别序列号的代码是否不够全面,无法适用于所有的 Windows 操作系统?我注意到这个帖子提到,如果标准用户进程检索序列号,则可能会得到错误的序列号。但在我们的情况下,即使是管理员用户也出现了错误。
一些重要信息:
- 这两个测试节点都运行 Windows 8 Professional
- 一台计算机是东芝笔记本电脑
- 另一台计算机是 Acer Iconia 平板电脑
- 平板电脑最近从 Windows 8 升级到 Windows 8.1,我注意到在此更新后序列号发生了改变
- 笔记本电脑有一个管理员用户遇到了这个问题。 平板电脑有一个标准用户遇到了这个问题。
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()