rayman1040

    1. 参考下面代码 void GetStorageInfo() {                 DISK_INFO  m_devinfo;         BOOL  buf=1;         unsigned long BytesReturned; //这里DSK1:的名字要根据具体你的块设备index来的,sd卡的index一般不定死,但你可以用注册表工具从Active下面找到被加载的所有block设备,你可以知道哪个DSK是哪个存储设备。5楼更新了具体的方法。         HANDLE        h_nfd = CreateFile( L"DSK1:",                 GENERIC_READ,                 0,                 NULL,                 OPEN_EXISTING,                 0,                 NULL);         if(h_nfd==NULL)                 ::MessageBox ( NULL, L"ERRO in createfile", L"ERROR", 0);                   if ( FALSE == DeviceIoControl(                 h_nfd,                 IOCTL_DISK_GETINFO,                 NULL,                 0,                 &m_devinfo                 sizeof(m_devinfo),                 &BytesReturned,                 NULL                 )) {                 ::MessageBox ( NULL, L"DISK_IOCTL_GETINFO", L"ERROR", 0);                 return ;         }         CString tmp;         tmp.Format(L"di_bytes_per_sect=%d di_total_sectors =%d Total Captal=%d\r\n",inbuf.di_bytes_per_sect,inbuf.di_total_sectors,di_total_sectors*di_bytes_per_sect );         ::MessageBox ( NULL, tmp, L"ERROR", 0);                   CloseHandle(h_nfd);          } ====================================== 补充: #include "winioctl.h" #include "Diskio.h" m_devinfo里面就会有sector总数和sector大小,进而算出总容量,这个是基于文件系统层的获得容量,并非实际物理容量 其中的DSK1:需要被替换成你的SD存储设备被加载的号码,一般为DSK2: 也可以通过枚举HKEY_LOCAL_MACHINE\Drivers\Active下的键值,来获得SD的DSK号码,比如 [HKEY_LOCAL_MACHINE\Drivers\Active\49] "Hnd"=dword:005adc00 "Name"="DSK2:" "Key"="\Drivers\\SDCARD\\ClientDrivers\\Class\\SDMemory_Class" "BusParent"=dword:0059a2a0 "InterfaceType"=dword:00000000 "BusName"="SDCARD_0_0_0" "ClientInfo"=dword:005a5080 这里的DSK2:就是你要传递的参数了 本文来自eeworld博客,转载请标明出处:http://blog.eeworld.net/lan120576664/archive/2009/09/21/4576760.aspx

最近访客

< 1/1 >

统计信息

已有42人来访过

  • 芯积分:--
  • 好友:--
  • 主题:--
  • 回复:1

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言