阅读:1474回复:8
那位大侠能告诉我怎么得到FAT文件系统的簇大小吗?
那位大侠能告诉我怎么得到FAT文件系统的簇大小吗?NTFS我可以得到,调用FSCTL_GET_NTFS_VOLUME_DATA就可以,但是FAT文件系统呢?
|
|
沙发#
发布于:2007-12-06 23:27
FSCTL_QUERY_FAT_BPB
|
|
板凳#
发布于:2007-12-07 09:44
tooflat大侠,小弟一直看您的帖子成长呀,但是你这个FSCTL_QUERY_FAT_BPB这个ioctl命令我怎么在帮助里面查不到,可以告诉我它的用法吗?谢谢了
引用第1楼tooflat于2007-12-06 23:27发表的 : |
|
地板#
发布于:2007-12-07 09:55
MSDN上没有,DDK里面能找到
|
|
地下室#
发布于: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; 大侠能帮我解释一下吗?谢谢了! |
|
5楼#
发布于:2007-12-07 13:19
还是直接读取第一个扇区的数据吧,FSCTL_QUERY_FAT_BPB只能读取FAT12/16的BPB
|
|
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源代码 |
|
7楼#
发布于:2008-05-06 14:52
好像大家都没有什么特别有效的办法获取fat32文件系统的簇大小,这个还真是一个比较麻烦的问题。ntfs就比较容易获得,FSCTL_GET_NTFS_VOLUME_DATA就可以
|
|
8楼#
发布于:2008-05-07 08:02
FAT的直接解析分区的BPB
|
|
|