wince设备上获取sd卡的id号

本文介绍了一种通过Windows API函数创建文件句柄并使用DeviceIoControl函数从SD卡获取序列号的方法。文中提供了完整的C/C++示例代码,并说明了如何通过注册表找到SD卡对应的DSK号码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近工作上的一个小需求, 获得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:" 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值