Серийный номер жесткого диска переворачивается каждые 2 байта в Windows XP, Vista и 7, но не в Windows 8

мне нужно получитьHDD серийный номер использовать его в качестве ключа длялицензирование программное обеспечение я использовалdiskid32 код в этом URL:http://www.winsim.com/diskid32/diskid32.html Он использовалDeviceIoControl Win32 API с управляющим кодом IOIOCTL_STORAGE_QUERY_PROPERTY.

Это сработало. Однако, когда я дважды проверил фактический серийный номер, напечатанный на самом жестком диске, я обнаружил, что каждые 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, 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 );

        ...
     }

Ответы на вопрос(5)

Ваш ответ на вопрос