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

前端之家收集整理的这篇文章主要介绍了Windows-8 – HDD序列号在Windows XP,Vista和7中每2个字节翻转,但不在Windows 8中翻转前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要获得硬盘序列号才能使用它作为许可软件的关键.
我在这个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).

祝你好运!

猜你在找的Windows相关文章