WinCE下如何获取SD卡容量

参考下面代码
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:就是你要传递的参数了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值