阅读:4775回复:6
怎么用C/C++获取U盘的容量(扇区总数) ?
我想在WIN32环境下通过 SCSI 协议中的 capability 请求准确获取U盘可以使用的扇区总数,但是找不到接口的API函数, 那位大哥知道的指导一下 ?
|
|
沙发#
发布于:2007-08-15 10:04
BOOL GetDiskFreeSpace(
LPCTSTR lpRootPathName, LPDWORD lpSectorsPerCluster, LPDWORD lpBytesPerSector, LPDWORD lpNumberOfFreeClusters, LPDWORD lpTotalNumberOfClusters ); |
|
板凳#
发布于:2007-07-16 17:19
用户被禁言,该主题自动屏蔽! |
|
地板#
发布于:2007-07-15 17:10
参考SCSI的ReadCapacity指令,构造SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER结构,CreateFile获得设备句柄,通过DeviceIoControl发送IOCTL_SCSI_PASS_THROUGH_DIRECT,返回8字节,最大扇区号(0开始)和扇区大小。U盘总容量=(最大扇区号+1)×扇区大小。
|
|
地下室#
发布于:2007-07-14 17:38
getdrivertype 对返回值进行判断如果是DRIVE_REMOVABLE,则使用SHGetDiskFreeSpace.不过返回值是字节,要自己除1024*1024*1024 变成G
|
|
|
5楼#
发布于:2007-07-10 12:04
我用 CreateFile,ReadFile,WriteFile 读写扇区/cluster 都可以通过, 就是获取不了总的扇区数。 假如用 柱头, tracks, cluster , SectorsPerTrack等通过 DeviceIoControl() IOCTL_DISK_GET_DRIVE_GEOMETRY 获取的参数全部乘起来得到的容量接近磁盘容量,但是和实际的不符合。
|
|
6楼#
发布于:2007-07-10 11:55
有人知道吗 ?
|
|