我刚刚开始研究一个文件系统过滤器驱动程序,它监视对任何文件的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_POINTERS
I / O控制代码。
但是,我对驾驶员开发方面还不熟悉...... FltFsControlFile
我在这里使用的功能是正确的吗?如果是这样,Instance
参数代表什么?如果没有,那我该怎么做呢?
答案 0 :(得分:1)
Merhad,
FltFsControlFile是正确使用的API,但是记住它不值得从过滤器驱动程序进行碎片整理,在内核模式下在IO路径上进行碎片整理(或者从工作线程进行碎片整理将非常高效)。
Windows使大部分文件可以从用户模式进行碎片整理。检查http://technet.microsoft.com/en-us/library/dd405526(VS.85).asp和http://technet.microsoft.com/en-us/library/aa364577(VS.85).aspx
要监控FS活动,最好的办法是使用USN期刊,这非常有效。不对系统施加任何负担
http://technet.microsoft.com/en-us/library/aa365736(VS.85).aspx