#include <uniqueid.h>
#define MAX_LOADSTRING 100
BOOL GetDeviceID( GUID* pGuid)
{
BOOL fRes;
DWORD dwBytesReturned =0;
DEVICE_ID* pDevID;
int wSize;
if (NULL == pGuid)
return FALSE;
memset(pGuid, 0, sizeof(GUID));
pDevID = (DEVICE_ID*)malloc(sizeof(DEVICE_ID));
memset(pDevID, 0, sizeof(DEVICE_ID));
pDevID->dwSize = sizeof(DEVICE_ID);
fRes = KernelIoControl( IOCTL_HAL_GET_DEVICEID, NULL, 0,
pDevID, sizeof( DEVICE_ID ), &dwBytesReturned );
wSize = pDevID->dwSize;
free(pDevID);
if( (FALSE != fRes) || (ERROR_INSUFFICIENT_BUFFER != GetLastError()))
return FALSE;
pDevID = (DEVICE_ID*)malloc(wSize);
memset(pDevID, 0, sizeof(wSize));
pDevID->dwSize = wSize;
fRes = KernelIoControl( IOCTL_HAL_GET_DEVICEID, NULL, 0,
pDevID, wSize, &dwBytesReturned );
if((FALSE == fRes) || (ERROR_INSUFFICIENT_BUFFER == GetLastError()) )
return FALSE;
BYTE* pDat = (BYTE*)&pGuid->Data1;
BYTE* pSrc = (BYTE*)(pDevID) + pDevID->dwPresetIDOffset;
memcpy(pDat, pSrc, pDevID->dwPresetIDBytes);
pDat += pDevID->dwPresetIDBytes;
pSrc = (BYTE*)(pDevID) + pDevID->dwPlatformIDOffset;
memcpy(pDat, pSrc, pDevID->dwPlatformIDBytes);
return true;
}
void OnButton1()
{
GUID gid;
WCHAR szData[MAX_LOADSTRING];
GetDeviceID(&gid);
StringFromGUID2(gid, szData, MAX_LOADSTRING);
// AfxMessageBox(szData);
}
// 我稍微改了下
// 获得结构体型GUID
bool GetDeviceID( GUID* pGuid)
{
if (NULL == pGuid)
return false;
BOOL fRes;
DWORD dwBytesReturned =0;
int wSize = 255;
DEVICE_ID* pDevID;
memset(pGuid, 0, sizeof(GUID));
BYTE arrOutBuff[MAX_LOADSTRING]={0};
fRes = KernelIoControl( IOCTL_HAL_GET_DEVICEID, NULL, 0,
arrOutBuff, MAX_LOADSTRING, &dwBytesReturned );
wSize = dwBytesReturned;
pDevID = (DEVICE_ID*)malloc(wSize);
memset(pDevID, 0, wSize);
fRes = KernelIoControl( IOCTL_HAL_GET_DEVICEID, NULL, 0,
pDevID, wSize, &dwBytesReturned );
if((FALSE == fRes) || (ERROR_INSUFFICIENT_BUFFER == GetLastError()) )
return false;
BYTE* pDat = (BYTE*)&pGuid->Data1;
BYTE* pSrc = (BYTE*)(pDevID) + pDevID->dwPresetIDOffset;
memcpy(pDat, pSrc, pDevID->dwPresetIDBytes);
pDat += pDevID->dwPresetIDBytes;
pSrc = (BYTE*)(pDevID) + pDevID->dwPlatformIDOffset;
memcpy(pDat, pSrc, pDevID->dwPlatformIDBytes);
free(pDevID);
return true;
}
// 获得GUID
bool GetWM5DiveceUniqueID( char* sData)
{
// Get struct GUID
GUID gid;
if ( !GetDeviceID(&gid) )
return false;
// Get wchar_t GUID
TCHAR szData[MAX_LOADSTRING] = {0};
short nszDataLen = StringFromGUID2(gid, szData, MAX_LOADSTRING) -1;
// delete {}
for(int i=0; i<nszDataLen; i++)
{
szData[i] = szData[i+1];
}
szData[nszDataLen-2] = 0;
// wchar_t to char ... BT
for(int i=0; i<nszDataLen-2; i++)
{
sData[i] = (char)szData[i];
}
return true;
}