吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4950|回复: 27
收起左侧

[求助] 谁有NVME固态硬盘读硬盘序列号代码,没有我就自己写了

  [复制链接]
yanaying 发表于 2021-11-10 10:18
本帖最后由 yanaying 于 2021-11-11 14:47 编辑

近期发现华为的电脑100%识别不出来正确的硬盘序列号,只能读一串不知道是啥的数字字母文本。
在AIDA64里面可以看到那串文本在物理驱动器的标识里,不同电脑可能相同。

测试了若干电脑,发现六七台,集中在华为和联想的新电脑上,硬盘型号各不相同。是不是安装什么奇怪的驱动了?

想测试的可以在DOS窗口执行下面三条命令,你会发现读出来的是四位间隔是文本,这是错误的序列号。
正确的序列号是一串字母数字(超过四位,不到20位)。AIDA64可以查到正确的序列号,可以与AIDA64的结果对照。

wmic diskdrive get serialnumber
wmic path win32_physicalmedia get SerialNumber
wmic path Win32_DiskDrive get SerialNumber

查看AIDA64的硬盘序列号,在左边选ata,右边硬盘型号后面括号里的数字就是序列号。



我觉得这个问题会影响大部分靠硬盘序列号识别授权的软件。

已经确认是NVME(NVM Express) 固态硬盘造成的。wmic为什么不支持nvme这很奇怪,虽然windows11已经放弃了wmic,但是windows10还活着啊。


附上MFC源代码,这个代码当初发布的时候,还没有nvme...,看来需要升级了。

[C] 纯文本查看 复制代码
HANDLE hPhysicalDriveIOCTL = 0;

         //  Try to get a handle to PhysicalDrive IOCTL, report failure
         //  and exit if can't.
      char cszDriveName [256];

      sprintf_s(cszDriveName,256,"\\\\.\\PhysicalDrive%d", iDrive);

         //  Windows NT, Windows 2000, Windows XP - admin rights not required
      hPhysicalDriveIOCTL = CreateFileA (cszDriveName, 0, FILE_SHARE_READ | FILE_SHARE_WRITE, 
          NULL, OPEN_EXISTING, 0, NULL);

      if (hPhysicalDriveIOCTL == INVALID_HANDLE_VALUE)
      {
                        SecureZeroMemory(m_cszErrorMessage,sizeof(m_cszErrorMessage));
                        sprintf_s(m_cszErrorMessage,256,"%d ReadPhysicalDriveInNTWithZeroRights ERROR CreateFileA(%s) returned INVALID_HANDLE_VALUE",__LINE__, cszDriveName);
      }
      else
      {
                 STORAGE_PROPERTY_QUERY query;
         DWORD dwBytesReturned = 0;
                 char cszBuffer [1000];

         memset ((void *) & query, 0, sizeof (query));
                 query.PropertyId = StorageDeviceProperty;
                 query.QueryType = PropertyStandardQuery;

                 memset (cszBuffer, 0, sizeof (cszBuffer));
         if (DeviceIoControl (hPhysicalDriveIOCTL, IOCTL_STORAGE_QUERY_PROPERTY,
                   & query,
                   sizeof (query),
                                   & cszBuffer,    
                                   sizeof (cszBuffer),  
                   & dwBytesReturned, NULL) )
         {         
                         STORAGE_DEVICE_DESCRIPTOR * descrip = (STORAGE_DEVICE_DESCRIPTOR *) & cszBuffer;
                         
             int snoffset = descrip->SerialNumberOffset+1;
             int mnoffset = descrip->ProductIdOffset + 1;
             char* cszSerialNumber = (char*)descrip->RawDeviceProperties + snoffset - 0x25;
             char* cszModelNumber = (char*)descrip->RawDeviceProperties + mnoffset - 0x25;
             
         }
                 else
                 {
                         DWORD dwErr = GetLastError ();
                         SecureZeroMemory(m_cszErrorMessage,sizeof(m_cszErrorMessage));
                         sprintf_s (m_cszErrorMessage,"DeviceIOControl IOCTL_STORAGE_QUERY_PROPERTY error = %d\n", dwErr);

                 }

         CloseHandle (hPhysicalDriveIOCTL);


发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| yanaying 发表于 2021-11-10 10:21
本帖最后由 yanaying 于 2021-11-11 14:48 编辑

22222.JPG

这个红色部分就是wmic识别错误的硬盘序列号,与AIDA64识别出来的不同。


已经确认是NVME造成的
wujishenfu 发表于 2021-11-10 10:37
jiangteddy 发表于 2021-11-10 10:38
E式丶男孩 发表于 2021-11-10 10:48
不是内部或外部命令
 楼主| yanaying 发表于 2021-11-10 10:49
jiangteddy 发表于 2021-11-10 10:38
用的翻新硬盘怎么可能让你再看到

都是最近新买的电脑,你是不是想说华为用翻新硬盘?
 楼主| yanaying 发表于 2021-11-10 10:52
E式丶男孩 发表于 2021-11-10 10:48
不是内部或外部命令

在DOS下运行
2333.JPG
solly 发表于 2021-11-10 11:04
我有4个盘,M.2接口(NVMe协议)的显示4段,另外两个 SATA 接口的显示正常。
as614001 发表于 2021-11-10 11:13
你觉得有影响授权,实际上没有影响。本质上读取的只是一堆字符串加密算法转换。
Spa495 发表于 2021-11-10 11:20
我还发现品牌电脑的硬盘保护,换块硬盘就
加载不了新系统
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 21:44

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表