通过DeviceIoControl读SD卡ID

icesoft2000 2011-07-17 05:40:15
通过DeviceIoControl读SD卡ID,读到以下数据是否正确?

7DFB784

---------------------------------------------------------
不懂 SD 卡相关的东西,请大家看看。
...全文
266 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
may1986n 2011-08-17
  • 打赏
  • 举报
回复
我目前需要在xp系统下直接读取sd卡的ID号,但台式机又没有sd插槽,所以只能通过sd读卡器插在usb接口上,再使用3楼的代码,不成功。CreateFile()这里就失败了。恳请各位指点。
sdudubing 2011-08-17
  • 打赏
  • 举报
回复
路过学习
may1986n 2011-08-17
  • 打赏
  • 举报
回复
再问下3楼,得到的hDisk的值是多少?
当我遇上-你 2011-07-21
  • 打赏
  • 举报
回复
对啊,顶
northcan 2011-07-21
  • 打赏
  • 举报
回复
这个厂商ID,不同卡是不相同的。
单凭一个数字,我觉得应该无法判断正确与否。
northcan 2011-07-21
  • 打赏
  • 举报
回复
我贴的代码,只是我用它正确读出过我的SD卡ID。
用意是想让楼主试一下,与你使用的程序读出的ID是否一致。
如果一致,楼主读出的结果就应该是正确的。

否则楼主只给出一个数字7DFB784,谁能知道是否正确?
读SD卡的“标志”,一般是读它的序列号,或者是厂商ID
我们也不知道楼主用的是什么型号的SD卡,怎么能知道7DFB784是不是正确呢?

不知道楼主是否可以从你所使用的SD卡的手册或者技术支持那里
获取一些信息(他们的厂商ID烧进卡里的是多少)

QQ515311445 2011-07-21
  • 打赏
  • 举报
回复
正确!
icesoft2000 2011-07-21
  • 打赏
  • 举报
回复
真的想要回答,就麻烦您看清楚别人的问题。

文不对题的事,最好不要干。
jonsenwu 2011-07-19
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 icesoft2000 的回复:]
代码我有,网上也有,一大堆

我只是想知道得到的结果是否正确?
[/Quote]
人家是在帮你忙,态度这么差,是否正确你不知道网上查去,这里问什么,一大堆
icesoft2000 2011-07-18
  • 打赏
  • 举报
回复
代码我有,网上也有,一大堆

我只是想知道得到的结果是否正确?
northcan 2011-07-18
  • 打赏
  • 举报
回复

BYTE *pSerialNo = GetStroageID(_T("DSK1:")); //First StorageCard
CString str(pSerialNo);
MessageBox(str);
northcan 2011-07-18
  • 打赏
  • 举报
回复

#include "winioctl.h"
#include "storemgr.h"

#define IOCTL_DISK_GET_STORAGEID CTL_CODE(FILE_DEVICE_DISK,0x709,METHOD_BUFFERED,FILE_ANY_ACCESS)

typedef struct _STORAGE_IDENTIFICATION
{
DWORD dwSize;
DWORD dwFlags;
DWORD dwManufactureIDOffset;
DWORD dwSerialNumOffset;
} STORAGE_IDENTIFICATION, *PSTORAGE_IDENTIFICATION;

unsigned char* GetStroageID(LPCTSTR szDisk);

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;

PSTORAGE_IDENTIFICATION pStoreInfo = (PSTORAGE_IDENTIFICATION) new BYTE[3000];

DWORD dwBytesRet;

if (!DeviceIoControl(hDisk, IOCTL_DISK_GET_STORAGEID, NULL, 0, pStoreInfo, 3000, &dwBytesRet, NULL))
{
DWORD err = GetLastError();
delete [] pStoreInfo;
CloseHandle(hDisk);
return FALSE;
}

BYTE *ManuID = (((BYTE *)pStoreInfo) + pStoreInfo->dwManufactureIDOffset);
BYTE *SerialNo = (((BYTE *)pStoreInfo) + pStoreInfo->dwSerialNumOffset);

return SerialNo;
}
icesoft2000 2011-07-18
  • 打赏
  • 举报
回复
多谢!LS.
LN烟雨缥缈 2011-07-17
  • 打赏
  • 举报
回复
不错,好东西!

19,502

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧