转自:http://honwsn.itpub.net/post/41648/499730
wince 存储设备有两个名称,
一个设备名称CreateFile打开设备获取句柄的时候要用的,如DSK1:
一个是存储名称,如Mircosoft Flash Disk
见如下数据结构:

typedef struct {
DWORD cbSize;
TCHAR szDeviceName[DEVICENAMESIZE];
TCHAR szStoreName[STORENAMESIZE];
DWORD dwDeviceClass;
DWORD dwDeviceType;
STORAGEDEVICEINFO sdi;
DWORD dwDeviceFlags;
SECTORNUM snNumSectors;
DWORD dwBytesPerSector;
SECTORNUM snFreeSectors;
SECTORNUM snBiggestPartCreatable;
FILETIME ftCreated;
FILETIME ftLastModified;
DWORD dwAttributes;
DWORD dwPartitionCount;
DWORD dwMountCount;
} STOREINFO, *PSTOREINFO;

下面是我找的获取SD序号号和厂商ID一份示例代码:
SD卡的厂商ID和序列号都是ASCII字符串.

摘自http://geekswithblogs.net/BruceEitman/Default.aspx

#include "windows.h"
#include "Diskio.h"

void RETAILMSG_ASCII(char *Str, DWORD NumChars)
{
DWORD Index;

for( Index = 0; *Str != '' && Index < NumChars; Index++ )
{
RETAILMSG( 1, (TEXT("%c"), *Str++));
}
}

BOOL DisplayDiskID( TCHAR *Disk )
{
STORAGE_IDENTIFICATION *StoreID = NULL;
STORAGE_IDENTIFICATION GetSizeStoreID;
DWORD dwSize;
HANDLE hVol;
TCHAR VolumeName[MAX_PATH];
char *ManfID;
char *SerialNumber;
BOOL RetVal = FALSE;
DWORD GLE;

//_stprintf(VolumeName, _T("%sVol:"), Disk);
_stprintf(VolumeName, _T("%s"), Disk);//这两种方式状况都可以,输入应该是设备名称,如DSK1: DSK2:

hVol = CreateFile( Disk, GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);

if( hVol != INVALID_HANDLE_VALUE )
{
if(DeviceIoControl(hVol, IOCTL_DISK_GET_STORAGEID, (LPVOID)NULL, 0, &GetSizeStoreID, sizeof(STORAGE_IDENTIFICATION), &dwSize, NULL) == FALSE)
{
GLE = GetLastError();
if( GLE == ERROR_INSUFFICIENT_BUFFER )
{
//若是空间不足,引起的调用失败,说明还是有厂商ID和序列号信息的.
//GetSizeStoreID.dwSize 说明了STORAGE_IDENTIFICATION结构本身的大小加上了
//厂商ID和序列号所需的存储空间.

StoreID = (STORAGE_IDENTIFICATION *)malloc( GetSizeStoreID.dwSize );
if(DeviceIoControl(hVol, IOCTL_DISK_GET_STORAGEID, (LPVOID)NULL, 0, StoreID, GetSizeStoreID.dwSize, &dwSize, NULL) != FALSE)
{
if( !(StoreID->dwFlags & MANUFACTUREID_INVALID) )
{
ManfID = (char *)((DWORD)StoreID + StoreID->dwManufactureIDOffset);
RETAILMSG( 1, (TEXT("DisplayDiskID: Manufacture ID ")));
//下面的输出函数考虑到输出字符的长度
//The serial number and module number are NULL terminated ASCII strings.

RETAILMSG_ASCII( ManfID, StoreID->dwSerialNumOffset - StoreID->dwManufactureIDOffset);
RETAILMSG( 1, (TEXT("rn")));
}
if( !(StoreID->dwFlags & SERIALNUM_INVALID) )
{
SerialNumber = (char *)((DWORD)StoreID + StoreID->dwSerialNumOffset);
RETAILMSG( 1, (TEXT("DisplayDiskID: Serial Number ")));
RETAILMSG_ASCII( SerialNumber, GetSizeStoreID.dwSize - StoreID->dwSerialNumOffset );
RETAILMSG( 1, (TEXT("rn")));
}
RetVal = TRUE;
}
else
RETAILMSG( 1, (TEXT("DisplayDiskID: DeviceIoControl failed (%d)rn"), GLE));

free(StoreID);
}
else
RETAILMSG( 1, (TEXT("No Disk Identifcation available for %srn"), VolumeName ));
}
else//这种状况下,DeviceIoControl返回成功 说明这张卡没有序列号和厂商ID信息
RETAILMSG( 1, (TEXT("DisplayDiskID: DeviceIoControl succeeded (and shouldn't have)rn")));

CloseHandle (hVol);
}
else
RETAILMSG( 1, (TEXT("DisplayDiskID: Failed to open volume (%s)rn"), VolumeName ));

return RetVal;
}

下面是作者的原话,说明在获取卡的序列号时的注意事项,体现的严谨态度

"Note that the manufature ID and serial number are ASCII strings, so I included a little function to output those on the debug serial port. I also found that some of the memory card drivers don't handle the strings very well, so I had to limit the strings by length rather than by looking for the null character.

Further testing showed that both DSKx: and DSKx:Vol: work when calling CreateFile();"

获取SD卡序列号和厂商ID相关推荐

  1. android sd卡列目录文件_Android正确获取SD卡目录及使用SD卡目录

    此文乃是转载,原文在这里链接 SD卡作为手机的扩展存储设备,在手机中充当硬盘角色,可以让我们手机存放更多的数据以及多媒体等大体积文件.因此查看SD卡的内存就跟我们查看硬盘的剩余空间一样,是我们经常操作 ...

  2. Android实例]------获取sd卡图片显示出来

    [Android实例] 获取sd卡图片显示出来 ON 六 02 2012 IN ANDROID代码仓库, ANDROID项目代码 BY ANDROID智能手机 | 评论 package com.fil ...

  3. Android 获取SD卡的图片资源

    首先我先获得SD卡下的根目录路径: privateString isSdcard(){File sdcardDir=null;boolean isSDExist=Environment.getExte ...

  4. android sd卡 格式化 rom,Android开发之获取SD卡及手机ROM容量的方法

    本文实例讲述了Android获取SD卡及手机ROM容量的方法.分享给大家供大家参考,具体如下: 这里通过一个简单的小例子,来获取SD卡的容量和手机ROM的容量,代码如下: package com.ur ...

  5. 获取SD卡中的音乐文件

    小编近期在搞一个音乐播放器App.练练手: 首先遇到一个问题.怎么获取本地的音乐文件? /*** 获取SD卡中的音乐文件** @param context* @return*/public stati ...

  6. android学习笔记之——获取SD卡及手机ROM容量

    继续android学习之旅,今天通过一个小例子,来获取SD卡的容量和手机ROM的容量,具体代码如下: package com.urovo.sdcardspace;import java.io.File ...

  7. android 获取sd卡目录失败_Android正确获取SD卡目录及使用SD卡目录

    此文乃是转载,原文在这里链接 SD卡作为手机的扩展存储设备,在手机中充当硬盘角色,可以让我们手机存放更多的数据以及多媒体等大体积文件.因此查看SD卡的内存就跟我们查看硬盘的剩余空间一样,是我们经常操作 ...

  8. 【OkHttp】OkHttp 上传图片 ( 获取 SD 卡动态权限 | 跳转到相册界面选择图片 | 使用 OkHttp 上传图片文件 )

    OkHttp 系列文章目录 [OkHttp]OkHttp 简介 ( OkHttp 框架特性 | Http 版本简介 ) [OkHttp]Android 项目导入 OkHttp ( 配置依赖 | 配置 ...

  9. Android 获取SD卡路径和判断SD卡是否存在.

    android获取sd卡路径方法: public String getSDPath(){ File sdDir = null; boolean sdCardExist =Environment.get ...

最新文章

  1. MYSQL局域网访问设置
  2. R语言使用timeROC包计算存在竞争风险情况下的生存资料多时间AUC值、使用cox模型、并添加协变量、可视化存在竞争风险情况下的生存资料多时间ROC曲线
  3. excel多个工作表求和案例
  4. Storm Trident拓扑中的错误处理
  5. 工业交换机选择时需要注意什么?
  6. Python手写神经网络实现3层感知机
  7. 大页内存的使用:大页内存分配与释放
  8. 易语言通过服务器发送文件,易语言局域网文件传输带聊天功能例程
  9. python——pandas库之Series数据结构基础
  10. Eclipse 高清显示屏 图示太少
  11. gbdt算法_GBDT算法原理及应用
  12. excel服务器运行失败怎么办,解决勤哲EXCEL服务器启动失败的问题
  13. 区块链入门笔记(五) —— 加密货币博弈论
  14. 计算机类自主招生推荐信,自主招生推荐信范文15篇
  15. 罗振宇的跨年演讲和知识付费到底哪里错了
  16. matlab积分e (x 2),e^(x^2)的定积分
  17. 口袋里只有一百块钱,也要活出十个亿的气势
  18. win11连接不了蓝牙耳机的解决办法
  19. 如何用计算机求特征值特征向量,利用QR算法求解矩阵的特征值和特征向量
  20. 电子膨胀阀的原理、使用和特点,及其与热力膨胀阀的性能比较

热门文章

  1. 给出一个用逗号分隔开的字符串。求各部分之和
  2. 在大厂呆过多年的35岁“大龄”程序猿,聊聊35岁以上的程序猿们都干什么去了
  3. 女人是这样哄的,学以致用
  4. 电脑音频没声音,静音
  5. steam游戏存档迁移
  6. Studio5000和SE中如何使用替换功能
  7. Spliterator
  8. iOS之地图的使用和实时描绘运动轨迹
  9. VC(Visual Studio C++)虚拟键VK值列表
  10. vue 中嵌入iframe页面