HDD 序列号在 Windows XP、Vista 和 7 中每 2 个字节翻转一次,但在 Windows 8 中则不会

2024-04-09

我需要得到硬盘序列号使用它作为密钥许可一个软件。 我用了diskid32此网址中的代码:http://www.winsim.com/diskid32/diskid32.html http://www.winsim.com/diskid32/diskid32.html它使用了设备Io控制Win32 API 的 IO 控制代码为IOCTL_STORAGE_QUERY_PROPERTY.

有效。然而,当我仔细检查 HDD 本身上打印的实际序列号时,我发现该数字的每 2 个字节都被翻转。

一个简单的解决方案可能是简单地flip返回字节。它在 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, 0,
                           FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
                           OPEN_EXISTING, 0, NULL);
  if (hPhysicalDriveIOCTL != INVALID_HANDLE_VALUE)
  {
     _STORAGE_PROPERTY_QUERY query;
     DWORD cbBytesReturned = 0;
     char buffer [10000];

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

     memset (buffer, 0, 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 上获得了相同的值)。

祝你好运!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HDD 序列号在 Windows XP、Vista 和 7 中每 2 个字节翻转一次,但在 Windows 8 中则不会 的相关文章

随机推荐