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 ); } }