标签:python winapi wmi windows-8
我们的反盗版软件根据硬盘序列识别人员.我认为这是一个不变的功能,除非用户更改其主要物理驱动器,否则不会更改 – 如果我错了,请更正我?我们使用WMI python模块获取用户硬盘序列号.
对于我们的两台测试计算机,硬盘驱动器序列号已更改.但我们根本没有改变他们的硬盘.
什么可能导致这样的问题?我们的代码是否标识了Windows操作系统中不完整的序列?我注意到这个post提到如果标准用户进程检索序列号,你可以得到错误的序列号.但在我们的案例中,管理员用户也发生了错误.
一些重要信息:
>这两个测试节点都运行Windows 8 Professional
>一台电脑是东芝笔记本电脑
>另一台电脑是Acer Iconia平板电脑
>平板电脑最近从Windows 8更新到Windows 8.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()
解决方法:
我知道这是一个旧线程,但我刚刚遇到了同样的问题,使用驱动器的序列号作为密钥.我认为在某处记录我的发现会很好.
我注意到的一件事是,在Windows 7和Windows 8.1之间,似乎WMI例程返回驱动器序列号的方式发生了变化.
我掩盖了一些角色.
Windows 10 reports: [S21D********04F]
Windows 8.1 reports: [S21D********04F]
Windows 7 reports: [2SD1********40 F]
似乎W7及以下不是字节交换驱动器信息.
标签:python,winapi,wmi,windows-8 来源: https://codeday.me/bug/20190830/1769008.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。