http://www.armce.com/bbs/thread-113-1-2.html
常用代碼段: 從block設備中讀取扇區大小,扇區數,和總容量等。
- 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);
- }