typedef struct _STORAGE_IDENTIFICATION {
DWORD dwSize;
DWORD dwFlags;
DWORD dwManufactureIDOffset;
DWORD dwSerialNumOffset;
} STORAGE_IDENTIFICATION, *PSTORAGE_IDENTIFICATION;
void MySD()
{
TCHAR tzSDCardID[22];
TCHAR tzError[50];
HANDLE hCard = CreateFile(TEXT("DSK1:"), //设备标识DISK1由查询注册表获得
GENERIC_READ|GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
0,
NULL);
if(hCard)
{
int i = 0;
PSTORAGE_IDENTIFICATION pStoreInfo;
pStoreInfo=(STORAGE_IDENTIFICATION *)LocalAlloc(LMEM_ZEROINIT,3000);
DWORD dwGetBytes;
if (DeviceIoControl(hCard,
CTL_CODE(FILE_DEVICE_DISK, 0x0709, METHOD_BUFFERED, FILE_ANY_ACCESS), // 关键行:指定IOCTL
NULL,
0,
(LPVOID)pStoreInfo,
3000,
&dwGetBytes,
NULL)
!=FALSE)
{
if(dwGetBytes > 0)
{
i = 0;
int j = 0;
if(pStoreInfo->dwSerialNumOffset < dwGetBytes)
{
BYTE* SerialNo=(((BYTE *)pStoreInfo)+pStoreInfo->dwSerialNumOffset);
while (SerialNo[i]!=0 && i<(int)(dwGetBytes-pStoreInfo->dwSerialNumOffset) && i<22)
{
if(SerialNo[i] < '0' || SerialNo[i] > 'z')
{
j++;
}
else
{
tzSDCardID[i - j]=(TCHAR)SerialNo[i];
}
i++;
}
}
tzSDCardID[i - j]=0;
}
}
else
{
wsprintf(tzError, TEXT("查询储存卡ID失败,错误号%lu!"), GetLastError());
AfxMessageBox(tzError);
LocalFree(pStoreInfo);
CloseHandle(hCard);
return ;
}
LocalFree(pStoreInfo);
CloseHandle(hCard);
AfxMessageBox(tzSDCardID);
}
}
DWORD dwSize;
DWORD dwFlags;
DWORD dwManufactureIDOffset;
DWORD dwSerialNumOffset;
} STORAGE_IDENTIFICATION, *PSTORAGE_IDENTIFICATION;
void MySD()
{
TCHAR tzSDCardID[22];
TCHAR tzError[50];
HANDLE hCard = CreateFile(TEXT("DSK1:"), //设备标识DISK1由查询注册表获得
GENERIC_READ|GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
0,
NULL);
if(hCard)
{
int i = 0;
PSTORAGE_IDENTIFICATION pStoreInfo;
pStoreInfo=(STORAGE_IDENTIFICATION *)LocalAlloc(LMEM_ZEROINIT,3000);
DWORD dwGetBytes;
if (DeviceIoControl(hCard,
CTL_CODE(FILE_DEVICE_DISK, 0x0709, METHOD_BUFFERED, FILE_ANY_ACCESS), // 关键行:指定IOCTL
NULL,
0,
(LPVOID)pStoreInfo,
3000,
&dwGetBytes,
NULL)
!=FALSE)
{
if(dwGetBytes > 0)
{
i = 0;
int j = 0;
if(pStoreInfo->dwSerialNumOffset < dwGetBytes)
{
BYTE* SerialNo=(((BYTE *)pStoreInfo)+pStoreInfo->dwSerialNumOffset);
while (SerialNo[i]!=0 && i<(int)(dwGetBytes-pStoreInfo->dwSerialNumOffset) && i<22)
{
if(SerialNo[i] < '0' || SerialNo[i] > 'z')
{
j++;
}
else
{
tzSDCardID[i - j]=(TCHAR)SerialNo[i];
}
i++;
}
}
tzSDCardID[i - j]=0;
}
}
else
{
wsprintf(tzError, TEXT("查询储存卡ID失败,错误号%lu!"), GetLastError());
AfxMessageBox(tzError);
LocalFree(pStoreInfo);
CloseHandle(hCard);
return ;
}
LocalFree(pStoreInfo);
CloseHandle(hCard);
AfxMessageBox(tzSDCardID);
}
}