include <Storemgr.h>
#include <winioctl.h>
#include <Diskio.h>
unsigned char DiskID[MAX_PATH];
unsigned char szSerialNum[MAX_PATH];
unsigned char szManufactureID[MAX_PATH];
void ReadSDID(void)
{
DWORD dwBytesRead = 0;
char *cIDbuff = NULL;
BOOL ret = 0;
HANDLE hVolume = INVALID_HANDLE_VALUE;
PSTORAGE_IDENTIFICATION pStorageID;
int nIDlen;
hVolume = CreateFile( TEXT("//sd card//VOL:"), GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
if( hVolume != INVALID_HANDLE_VALUE )
{
memset(DiskID,0,MAX_PATH);
ret = DeviceIoControl( hVolume, IOCTL_DISK_GET_STORAGEID, NULL, 0, DiskID, MAX_PATH, &dwBytesRead, NULL );
if(ret)
{
pStorageID = (PSTORAGE_IDENTIFICATION )DiskID;
if (pStorageID->dwFlags != MANUFACTUREID_INVALID)
{
cIDbuff = (char*)DiskID;
cIDbuff = cIDbuff+pStorageID->dwManufactureIDOffset;
nIDlen = strlen(cIDbuff);
memset(szManufactureID, 0,MAX_PATH);
memcpy(szManufactureID,cIDbuff,nIDlen);
}
if (pStorageID->dwFlags != SERIALNUM_INVALID)
{
cIDbuff = (char*)DiskID;
cIDbuff = cIDbuff+pStorageID->dwSerialNumOffset;
nIDlen = strlen(cIDbuff);
memset(szSerialNum, 0,MAX_PATH);
memcpy(szSerialNum,cIDbuff,nIDlen);
}
}
CloseHandle( hVolume );
}
}