加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

Windows-8 – HDD序列号在Windows XP,Vista和7中每2个字节翻转,

发布时间:2020-12-13 20:17:09 所属栏目:Windows 来源:网络整理
导读:我需要获得硬盘序列号才能使用它作为许可软件的关键. 我在这个url中使用了diskid32代码: http://www.winsim.com/diskid32/diskid32.html 它使用DeviceIoControl Win32 API与IOCTL_STORAGE_QUERY_PROPERTY的IO控制代码. 有效.但是,当我仔细检查打印在HDD本身
我需要获得硬盘序列号才能使用它作为许可软件的关键.
我在这个url中使用了diskid32代码: http://www.winsim.com/diskid32/diskid32.html
它使用DeviceIoControl Win32 API与IOCTL_STORAGE_QUERY_PROPERTY的IO控制代码.

有效.但是,当我仔细检查打印在HDD本身的实际序列号时,我发现每2个字节的数字被翻转.

一个简单的解决方案可能是简单地翻转字节.它在Windows XP,Vista和7中工作,但在Windows 8中不需要翻转!

我想知道在Windows XP,Vista和7中翻转字节的确切原因,为什么不在Windows 8中翻转.下一个Windows怎么样?

部分代码与轻微更改:

int drive = 0;
  HANDLE hPhysicalDriveIOCTL = 0;
  char driveName [256];
  sprintf (driveName,"\.PhysicalDrive%d",drive);
  //  Windows NT,Windows 2000,Windows XP - admin rights not required
  hPhysicalDriveIOCTL = CreateFile (driveName,FILE_SHARE_READ | FILE_SHARE_WRITE,NULL,OPEN_EXISTING,NULL);
  if (hPhysicalDriveIOCTL != INVALID_HANDLE_VALUE)
  {
     _STORAGE_PROPERTY_QUERY query;
     DWORD cbBytesReturned = 0;
     char buffer [10000];

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

     memset (buffer,sizeof (buffer));

     if ( DeviceIoControl (hPhysicalDriveIOCTL,IOCTL_STORAGE_QUERY_PROPERTY,& query,sizeof (query),& buffer,sizeof (buffer),& cbBytesReturned,NULL) )
     {
         _STORAGE_DEVICE_DESCRIPTOR * descrip = (_STORAGE_DEVICE_DESCRIPTOR *) & buffer;
         char serialNumber [1000];
         char modelNumber [1000];
         char vendorId [1000];
         char productRevision [1000];

         flipAndCodeBytes (buffer,descrip -> SerialNumberOffset,1,serialNumber );

        ...
     }
我在软件许可中使用相同的方法(和相同的代码).是的,Windows 8由于某些原因是为此方法返回翻转的值,我不能说为什么(所以我不能回答你的问题).

我的解决方案是您指出的解决方案:再次翻转值.
所以,在调用“flipAndCodeBytes”之后,你可以测试一下是否是Windows 8操作系统,然后翻转这些值.

在我的情况下,它现在工作(我得到相同的值为Windows XP / Vista / 7和Windows 8).

祝你好运!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读