我的程序如下:是在网上弄到的。
// getCFSerialNumber.cpp : Defines the entry point for the application.
//
#include "stdafx.h"
//my code
#include
#include
#define IOCTL_DISK_BASE FILE_DEVICE_DISK
#define IOCTL_DISK_GET_STORAGEID CTL_CODE(IOCTL_DISK_BASE, 0x709, METHOD_BUFFERED, FILE_ANY_ACCESS)
typedef struct _STORAGE_IDENTIFICATION {
DWORD dwSize;
DWORD dwFlags;
DWORD dwManufactureIDOffset;
DWORD dwSerialNumOffset;
} STORAGE_IDENTIFICATION, *PSTORAGE_IDENTIFICATION;
#define MANUFACTUREID_INVALID 0x01
#define SERIALNUM_INVALID 0x02
//end of my code
int WINAPI WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
// TODO: Place code here.
HANDLE hDisk = CreateFile(_T("Dsk1:"), GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
if (!hDisk) return -1;
PSTORAGE_IDENTIFICATION pStoreInfo = (PSTORAGE_IDENTIFICATION) new BYTE[100];
if (!pStoreInfo) {
CloseHandle(hDisk);
return -2;
}
DWORD dwBytesRet;
if (!DeviceIoControl(hDisk, IOCTL_DISK_GET_STORAGEID, NULL, 0, pStoreInfo, 100, &dwBytesRet, NULL)) { //3000 changed to 46
DWORD err = GetLastError();
delete [] pStoreInfo;
CloseHandle(hDisk);
return -3;
}
TCHAR tStr[200];
if (dwBytesRet)
{
unsigned char *SerialNo=(((BYTE *)pStoreInfo)+pStoreInfo->dwSerialNumOffset);
int i =0;
while (SerialNo!=0 && i < (int)(dwBytesRet-pStoreInfo->dwSerialNumOffset))
{
tStr = (TCHAR)SerialNo;
i++;
}
tStr = 0;
}
delete [] pStoreInfo;
CloseHandle(hDisk);
MessageBox(NULL, tStr, _T("HDD Serial No"), MB_OK);
return 0;
}
现在读出来的结果是:0123913C01J38570. 应该是不对的。请问如何读取CF卡的序列号。大家帮忙看一下程序,或者谁有这方面的程序或资料发给我一下,baiminshengbai@126.com谢谢。时间比较紧大家帮忙了再次感谢。
如果是在网上download的代码的话,你可能要核对两个地方:
第一个是设备名是否和你的设备一致,就是T("Dsk1:"),
再者就是核对你的驱动支持IOCTL_DISK_GET_STORAGEID
引用: 引用 1 楼 guopeixin 的回复:
如果是在网上download的代码的话,你可能要核对两个地方:
第一个是设备名是否和你的设备一致,就是T("Dsk1:"),
再者就是核对你的驱动支持IOCTL_DISK_GET_STORAGEID
T("Dsk1:")这个好像是这样写的,好像是设备映射出两个一个是Dsk1,一个是Dsk2,这里选择Dsk1了。之余驱动支持IOCTL_DISK_GET_STORAGEID,我应该怎么核对我的设备呢?能详细点说吗?谢谢
引用: 引用 2 楼 twins222 的回复:
引用 1 楼 guopeixin 的回复:
如果是在网上download的代码的话,你可能要核对两个地方:
第一个是设备名是否和你的设备一致,就是T("Dsk1:"),
再者就是核对你的驱动支持IOCTL_DISK_GET_STORAGEID
T("Dsk1:")这个好像是这样写的,好像是设备映射出两个一个是Dsk1,一个是Dsk2,这里选择Dsk1了。之余驱动支持IOCTL_DISK_GET_STORAGEID,我应该怎么核对我的设备呢?能详细点说吗?谢谢
准确查的话,可以调用存储管理的api,遍历所有的store,找到对应cf卡的设备名
简单点可以看看注册比哦
IOCTL_DISK_GET_STORAGEID要看驱动代码才知道