ソフトウェアのライセンスを取得するためのキーとして使用するために、 HDD のシリアル番号を取得する必要があります。この URL でdiskid32コードを使用しました: http://www.winsim.com/diskid32/diskid32.html IOCTL_STORAGE_QUERY_PROPERTYの IO 制御コードでDeviceIoControl Win32 API を 使用しました。
出来た。しかし、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, 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 );
...
}