首页
社区
课程
招聘
[求助]大家有没有发现最近的品牌电脑读不出来硬盘序列号了
发表于: 2021-11-10 11:03 10229

[求助]大家有没有发现最近的品牌电脑读不出来硬盘序列号了

2021-11-10 11:03
10229

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

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

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

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

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



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


附上参考代码

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);


识别正确的序列号


识别错误的序列号


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 102
活跃值: (462)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
原因是wmic不识别NVME硬盘。
可以使用  EasyHardwareID v1.1,链接https://bbs.pediy.com/thread-270417.htm
2021-11-23 18:42
0
雪    币: 6
活跃值: (308)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
liucq 原因是wmic不识别NVME硬盘。 可以使用 EasyHardwareID v1.1,链接https://bbs.pediy.com/thread-270417.htm
老哥闲啊
2021-12-28 09:22
0
游客
登录 | 注册 方可回帖
返回
//