2. FSCTL_GET_RETRIEVAL_POINTERS The FSCTL_GET_RETRIEVAL_POINTERS control code retrieves a data structure that describes the allocation and location on disk of a specific file. 发送这个控制码,可以获取描述磁盘上的一个指定文件的分配和存放位置信息的结构体。
参数用法: 输入参数 ULONGLONG型的StartLcn,标记为0开始;输入长度为变量长度。 输出参数 是一个结构体,存储了文件在磁盘上的分块以及位置信息。如下: typedef struct RETRIEVAL_POINTERS_BUFFER { } RETRIEVAL_POINTERS_BUFFER, *PRETRIEVAL_POINTERS_BUFFER;
ExtentCount 表示文件在磁盘上有多少个分块;分块越多,表示这个文件越碎。这样的分块也称为一个簇链;碎文件就是以多个簇链分布存储,从而导致磁盘访问效率的下降。比较理想的情况是,一个文件占用一个簇链,这也是磁盘 整理的目标。 StartingVcn 文件内部的虚拟簇编号,{dy}次调用时总为0。VCN用来引用文件内部的数据,从文件开头到文件结尾,VCN都是连续的;LCN是分区卷的逻辑簇编号,属于全局的,一个文件分块存储,每块开始的LCN是不一样的。VCN-LCN有映射关系。 Extents[1] ,文件在磁盘上的每块数据的定位信息,也就是每个簇链的定位信息。包含两个字段,一个文件内部的VCN和相对于这个分区卷的逻辑LCN。
通过这个结构体,就能描述出一个文件在磁盘上的存放情况;如果是碎文件,也可以获知有哪些零散的簇链。进而为磁盘整理提供了必要数据。
2. FSCTL_MOVE_FILE The FSCTL_MOVE_FILE control code relocates one or more virtual clusters of a file from one logical cluster to another within the same volume. 该控制码在同一个分区卷内,将一个文件的一个或多个虚拟簇从一个逻辑簇移动到另一个逻辑簇;即完成文件中一个簇链的重定位工作。
参数: 输入参数: 输入缓冲是一个结构体信息:MOVE_FILE_DATA,定义如下, typedef struct { Members FileHandle A handle to the file to be moved. If the file is encrypted, the handle must have the FILE_READ_DATA, FILE_WRITE_DATA, FILE_APPEND_DATA, or FILE_EXECUTE access right. For more information, see File Security and Access Rights. StartingVcn A VCN (cluster number relative to the beginning of a file) of the first cluster to be moved. StartingLcn An LCN (cluster number on a volume) to which the VCN is to be moved. ClusterCount The count of clusters to be moved.
Msdn的解释很明白,首先指定要移动的文件句柄,然后指定要移动的文件内部的VCN,然后指定要移动到哪块LCN,{zh1}指定要移动几个簇。
无输出参数
注:如果要移动的目标LCN处有数据,那么该操作不会去覆盖;而是返回一个错误码,该操作将不会执行。
3. FSCTL_LOCK_VOLUME
This operation is useful for applications that need exclusive access to a volume for a period of time—for example, disk utility programs.
FSCTL_UNLOCK_VOLUME
4. FSCTL_DISMOUNT_VOLUME 发送这个控制码将一个卷解挂载 A dismounted volume has the following properties: · There are no open files. · The operating system does detect the volume. Dismounting a volume is useful when a volume needs to disappear for a while. For example, an application that changes a volume file system from the FAT file system to the NTFS file system might use the following procedure.
To change a volume file system 1. Open a volume. 2. Lock the volume. 3. Format the volume. 4. Dismount the volume. 5. Unlock the volume. 6. Close the volume handle. A dismounting operation removes the volume from the FAT file system awareness. When the operating system mounts the volume, it appears as an NTFS file system volume.
5. 其他相关的控制码,详见MSDN。
|