typedef struct _FSRTL_COMMON_FCB_HEADER {
CSHORT NodeTypeCode;
CSHORT NodeByteSize;
//
// General flags available to FsRtl.
//
UCHAR Flags;
//
// Indicates if fast I/O is possible or if we should be calling
// the check for fast I/O routine which is found via the driver
// object.
//
UCHAR IsFastIoPossible; // really type FAST_IO_POSSIBLE
//
// Second Flags Field
//
UCHAR Flags2;
//
// The following reserved field should always be 0
//
UCHAR Reserved;
PERESOURCE Resource;
PERESOURCE PagingIoResource;
LARGE_INTEGER AllocationSize;
LARGE_INTEGER FileSize;
LARGE_INTEGER ValidDataLength;
} FSRTL_COMMON_FCB_HEADER;
typedef FSRTL_COMMON_FCB_HEADER *PFSRTL_COMMON_FCB_HEADER;
我们看一下 NTFSI 上面 关于 AllocationSize, FileSize, ValidDataLength 的介绍
我们可以看到 AllocateSize是在硬盘上实际申请的大小, FileSize 是呈现给用户的文件大小,ValidDataLength是FileSize下实际有效的长度。
文件右击属性,会看见 大小 和 占用空间 。 大小对应的就是FileSize, 占用空间就是AllocateSize。