我正在开发一个基于minispy示例的minifilter驱动程序,我很难理解为什么我的过滤器每秒被调用几百次,因为它只能捕获IRP_MJ_CREATE并且没有创建任何内容那个时候。
我没有在网上找到太多帮助,或者我搜索了错误的内容或者在另一方面犯了错误......
所以这就是我如何注册我的前后操作:
CONST FLT_OPERATION_REGISTRATION Callbacks[] = {
{ IRP_MJ_CREATE,
0,
logfilterPreOperation,
logfilterPostOperation },
{ IRP_MJ_OPERATION_END }
};
这里是过滤器本身......
CONST FLT_REGISTRATION FilterRegistration = {
sizeof( FLT_REGISTRATION ), // Size
FLT_REGISTRATION_VERSION, // Version
0, // Flags
Contexts, // Context
Callbacks, // Operation callbacks
logfilterUnload, // MiniFilterUnload
NULL, // InstanceSetup
logfilterInstanceQueryTeardown, // InstanceQueryTeardown
NULL, // InstanceTeardownStart
NULL, // InstanceTeardownComplete
NULL, // GenerateFileName
NULL, // GenerateDestinationFileName
NULL // NormalizeNameComponent
};
注册并开始...... Context.DriverObject = DriverObject;
// register filter
DEB_PRINT("DriverEntry: register filter... \n");
status = FltRegisterFilter(DriverObject,&FilterRegistration,&Context.FltFilter);
if (!NT_SUCCESS(status)) {
DEB_PRINT("DriverEntry: registration failed. status=%#08x \n",status);
return status;
}
// start data server
InitServer();
// start filtering
DEB_PRINT("DriverEntry: start filtering... \n");
status = FltStartFiltering(Context.FltFilter);
if (!NT_SUCCESS( status )) {
DEB_PRINT("DriverEntry: start filtering failed. status=%#08x \n",status);
FltUnregisterFilter(Context.FltFilter);
return status;
}
这一切与minispy示例非常相似。
那么为什么我得到所有这些"毫无意义"电话或我说错了什么?
任何帮助都会很棒。
提前谢谢
答案 0 :(得分:1)
欢迎来到windows设备驱动程序特别是文件系统过滤器的混乱世界。 您不仅是访问资源的人,而且还有其他人 流程,他们可以发送给你很多创造。例如:Explorer.exe等 所以不用担心它。如果你拒绝自动附加卷那么 你赢了一半的战斗。希望这可能有所帮助。
答案 1 :(得分:1)
您可以使用此
克服InstanceSetUp回调中的自动附件if ( FlagOn( Flags, FLTFL_INSTANCE_SETUP_AUTOMATIC_ATTACHMENT ) )
{
return STATUS_FLT_DO_NOT_ATTACH;
}
然后您可以尝试使用FltAttachVolume()
或FltAttachAtAltitude()
等msdn按需添加
搜索。它肯定会解决你的问题。
答案 2 :(得分:1)
Richmont,只是为了添加更多信息,
IRP_MJ_CREATE不仅用于创建新文件/文件夹,还用于打开任何文件/文件夹以供阅读或执行," IRP_MJ_CREATE"也被称为。
根据http://msdn.microsoft.com/en-gb/library/windows/hardware/ff548630(v=vs.85).aspx
" I / O管理器在创建新文件或目录时,或者在打开现有文件,设备,目录或卷时发送IRP_MJ_CREATE请求"
答案 3 :(得分:0)