最近工作上的一个小需求, 获得sd卡上的需求号
typedef struct _STORAGE_IDENTIFICATION
{
DWORD dwSize;
DWORD dwFlags;
DWORD dwManufactureIDOffset;
DWORD dwSerialNumOffset;
} STORAGE_IDENTIFICATION, *PSTORAGE_IDENTIFICATION;
PSTORAGE_IDENTIFICATION pStoreInfo;
unsigned char* GetStroageID(LPCTSTR szDisk)
{
//HANDLE hDisk = CreateFile(_T("DSK1:"), GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
HANDLE hDisk = CreateFile(szDisk, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
if (!hDisk) return FALSE;
pStoreInfo = (PSTORAGE_IDENTIFICATION) new BYTE[3000];
DWORD dwBytesRet;
if (!DeviceIoControl(hDisk, 0x71C24, NULL, 0, pStoreInfo, 3000, &dwBytesRet, NULL))
{
DWORD err = GetLastError();
delete [] pStoreInfo;
CloseHandle(hDisk);
AfxMessageBox(_T("获取ID失败/n"));
exit(0);
return FALSE;
}
BYTE *ManuID = (((BYTE *)pStoreInfo) + pStoreInfo->dwManufactureIDOffset);
BYTE *SerialNo = (((BYTE *)pStoreInfo) + pStoreInfo->dwSerialNumOffset);
CloseHandle(hDisk);
return SerialNo;
}
注意其中的DSK1:需要被替换成你的SD存储设备被加载的号码
可以通过枚举注册表的值,位置在
HKEY_LOCAL_MACHINE/Drivers/Active下的键值,来获得SD的DSK号码,比如
[HKEY_LOCAL_MACHINE/Drivers/Active/39]
"Hnd"=dword:005adc00
"Name"="DSK2:"