【发布时间】:2014-07-23 08:18:43
【问题描述】:
我正在基于 minispy 示例开发一个微过滤器驱动程序,但我无法理解为什么我的过滤器每秒被调用几百次,而它应该只捕获 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 示例非常相似。
那么为什么我会接到所有这些“毫无意义”的电话,或者我理解错了什么?
任何帮助都会很棒。
提前谢谢你
【问题讨论】: