zealsoft_zhu
驱动小牛
驱动小牛
  • 注册日期2004-03-30
  • 最后登录2014-07-30
  • 粉丝2
  • 关注0
  • 积分22分
  • 威望375点
  • 贡献值0点
  • 好评度137点
  • 原创分0分
  • 专家分0分
阅读:1475回复:8

那位大侠能告诉我怎么得到FAT文件系统的簇大小吗?

楼主#
更多 发布于:2007-12-04 11:41
那位大侠能告诉我怎么得到FAT文件系统的簇大小吗?NTFS我可以得到,调用FSCTL_GET_NTFS_VOLUME_DATA就可以,但是FAT文件系统呢?
tooflat
论坛版主
论坛版主
  • 注册日期2002-07-08
  • 最后登录2014-03-11
  • 粉丝2
  • 关注0
  • 积分1007分
  • 威望551点
  • 贡献值3点
  • 好评度476点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-12-06 23:27
FSCTL_QUERY_FAT_BPB
zealsoft_zhu
驱动小牛
驱动小牛
  • 注册日期2004-03-30
  • 最后登录2014-07-30
  • 粉丝2
  • 关注0
  • 积分22分
  • 威望375点
  • 贡献值0点
  • 好评度137点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-12-07 09:44
tooflat大侠,小弟一直看您的帖子成长呀,但是你这个FSCTL_QUERY_FAT_BPB这个ioctl命令我怎么在帮助里面查不到,可以告诉我它的用法吗?谢谢了
引用第1楼tooflat于2007-12-06 23:27发表的  :
FSCTL_QUERY_FAT_BPB
coolw
驱动牛犊
驱动牛犊
  • 注册日期2006-03-20
  • 最后登录2012-04-13
  • 粉丝0
  • 关注0
  • 积分521分
  • 威望65点
  • 贡献值0点
  • 好评度54点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-12-07 09:55
MSDN上没有,DDK里面能找到
zealsoft_zhu
驱动小牛
驱动小牛
  • 注册日期2004-03-30
  • 最后登录2014-07-30
  • 粉丝2
  • 关注0
  • 积分22分
  • 威望375点
  • 贡献值0点
  • 好评度137点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-12-07 09:56
哈哈,我在winioctl.h文件中查到了,但是这个参数有点让我费解
typedef struct _FSCTL_QUERY_FAT_BPB_BUFFER {

    BYTE  First0x24BytesOfBootSector[0x24];

} FSCTL_QUERY_FAT_BPB_BUFFER, *PFSCTL_QUERY_FAT_BPB_BUFFER;
大侠能帮我解释一下吗?谢谢了!
tooflat
论坛版主
论坛版主
  • 注册日期2002-07-08
  • 最后登录2014-03-11
  • 粉丝2
  • 关注0
  • 积分1007分
  • 威望551点
  • 贡献值3点
  • 好评度476点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-12-07 13:19
还是直接读取第一个扇区的数据吧,FSCTL_QUERY_FAT_BPB只能读取FAT12/16的BPB
coolw
驱动牛犊
驱动牛犊
  • 注册日期2006-03-20
  • 最后登录2012-04-13
  • 粉丝0
  • 关注0
  • 积分521分
  • 威望65点
  • 贡献值0点
  • 好评度54点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2007-12-07 13:58
First0x24BytesOfBootSector的结构定义是:
typedef struct _PACKED_BOOT_SECTOR {
    UCHAR Jump[3];                                  // offset = 0x000   0
    UCHAR Oem[8];                                   // offset = 0x003   3
    PACKED_BIOS_PARAMETER_BLOCK PackedBpb;          // offset = 0x00B  11
    UCHAR PhysicalDriveNumber;                      // offset = 0x024  36
    UCHAR CurrentHead;                              // offset = 0x025  37
    UCHAR Signature;                                // offset = 0x026  38
    UCHAR Id[4];                                    // offset = 0x027  39
    UCHAR VolumeLabel[11];                          // offset = 0x02B  43
    UCHAR SystemId[8];                              // offset = 0x036  54
} PACKED_BOOT_SECTOR;                               // sizeof = 0x03E  6

FASTFAT用下面这个宏判断的
#define IsBpbFat32(bpb) (*(USHORT *)(&(bpb)->SectorsPerFat) == 0)

详细的信息查FASTFAT源代码
zealsoft_zhu
驱动小牛
驱动小牛
  • 注册日期2004-03-30
  • 最后登录2014-07-30
  • 粉丝2
  • 关注0
  • 积分22分
  • 威望375点
  • 贡献值0点
  • 好评度137点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2008-05-06 14:52
好像大家都没有什么特别有效的办法获取fat32文件系统的簇大小,这个还真是一个比较麻烦的问题。ntfs就比较容易获得,FSCTL_GET_NTFS_VOLUME_DATA就可以
dreamsity
驱动小牛
驱动小牛
  • 注册日期2006-09-01
  • 最后登录2013-07-04
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望821点
  • 贡献值1点
  • 好评度68点
  • 原创分1分
  • 专家分0分
8楼#
发布于:2008-05-07 08:02
FAT的直接解析分区的BPB
一切都是时间问题!
游客

返回顶部