ksnet
驱动牛犊
驱动牛犊
  • 注册日期2002-12-24
  • 最后登录2007-07-10
  • 粉丝0
  • 关注0
  • 积分60分
  • 威望6点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
阅读:4773回复:6

怎么用C/C++获取U盘的容量(扇区总数) ?

楼主#
更多 发布于:2007-07-09 21:39
我想在WIN32环境下通过 SCSI 协议中的 capability 请求准确获取U盘可以使用的扇区总数,但是找不到接口的API函数, 那位大哥知道的指导一下 ?
ksnet
驱动牛犊
驱动牛犊
  • 注册日期2002-12-24
  • 最后登录2007-07-10
  • 粉丝0
  • 关注0
  • 积分60分
  • 威望6点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-07-10 11:55
有人知道吗 ?
ksnet
驱动牛犊
驱动牛犊
  • 注册日期2002-12-24
  • 最后登录2007-07-10
  • 粉丝0
  • 关注0
  • 积分60分
  • 威望6点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-07-10 12:04
我用 CreateFile,ReadFile,WriteFile  读写扇区/cluster  都可以通过, 就是获取不了总的扇区数。 假如用  柱头, tracks, cluster , SectorsPerTrack等通过 DeviceIoControl() IOCTL_DISK_GET_DRIVE_GEOMETRY 获取的参数全部乘起来得到的容量接近磁盘容量,但是和实际的不符合。
amygirl
驱动牛犊
驱动牛犊
  • 注册日期2006-11-07
  • 最后登录2008-03-06
  • 粉丝0
  • 关注0
  • 积分360分
  • 威望37点
  • 贡献值0点
  • 好评度36点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-07-14 17:38
getdrivertype 对返回值进行判断如果是DRIVE_REMOVABLE,则使用SHGetDiskFreeSpace.不过返回值是字节,要自己除1024*1024*1024 变成G
驱网无线,快乐无限
ytwei
驱动小牛
驱动小牛
  • 注册日期2005-04-01
  • 最后登录2010-07-30
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望102点
  • 贡献值0点
  • 好评度85点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-07-15 17:10
参考SCSI的ReadCapacity指令,构造SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER结构,CreateFile获得设备句柄,通过DeviceIoControl发送IOCTL_SCSI_PASS_THROUGH_DIRECT,返回8字节,最大扇区号(0开始)和扇区大小。U盘总容量=(最大扇区号+1)×扇区大小。
xjtusdbzh
禁止发言
禁止发言
  • 注册日期2005-04-22
  • 最后登录2018-07-10
  • 粉丝1
  • 关注0
  • 积分-812分
  • 威望44点
  • 贡献值1点
  • 好评度124点
  • 原创分1分
  • 专家分0分
5楼#
发布于:2007-07-16 17:19
用户被禁言,该主题自动屏蔽!
zzj233
驱动牛犊
驱动牛犊
  • 注册日期2007-06-05
  • 最后登录2008-04-13
  • 粉丝0
  • 关注0
  • 积分190分
  • 威望20点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2007-08-15 10:04
BOOL GetDiskFreeSpace(
  LPCTSTR lpRootPathName,
  LPDWORD lpSectorsPerCluster,
  LPDWORD lpBytesPerSector,
  LPDWORD lpNumberOfFreeClusters,
  LPDWORD lpTotalNumberOfClusters
);
游客

返回顶部