0

我刚刚开始研究文件系统过滤器驱动程序,该驱动程序监视对任何文件的 I/O 写入(侦听IRP_MJ_WRITE请求),并在文件碎片化时透明地对文件进行碎片整理。

目前,我有这样的代码:

NTSTATUS FsFilterDispatchWrite(__in PDEVICE_OBJECT DeviceObject, __in PIRP Irp)
{
    PFILE_OBJECT pFileObject = IoGetCurrentIrpStackLocation(Irp)->FileObject;
    NTSTATUS result = FsFilterDispatchPassThrough(DeviceObject, Irp);
    //FltFsControlFile(???);
    return result;
}

我需要在其中发出FSCTL_GET_RETRIEVAL_POINTERSI/O 控制代码。

但是,我对驱动程序开发领域相当陌生……FltFsControlFile我在这里使用正确的功能吗?如果是这样,Instance参数代表什么?如果没有,那我该怎么做呢?

4

1 回答 1

1

梅哈德,

FltFsControlFile 是正确使用的 API,但请记住,它不值得从过滤器驱动程序进行碎片整理,在内核模式下对 IO 路径(或从工作线程进行碎片整理将非常低效)非常高效。

Windows 使大多数文件可以在用户模式下进行碎片整理。检查http://technet.microsoft.com/en-us/library/dd405526(VS.85).asphttp://technet.microsoft.com/en-us/library/aa364577(VS.85).aspx

要监控 FS 活动,最好使用 USN 日志,这非常有效。不会对系统施加任何负载

http://technet.microsoft.com/en-us/library/aa365736(VS.85).aspx

于 2011-04-27T02:13:34.007 回答