static
CONST FLT_OPERATION_REGISTRATION operCallbacks[]={
{
IRP_MJ_CREATE,
0,
OnFltCreatePreCallback,
OnFltCreatePostCallback,
NULL
},
{
IRP_MJ_READ,
0,
OnFltReadPreCallback,
OnFltReadPostCallback,
NULL
},
{
IRP_MJ_WRITE,
0,
OnFltWritePreCallback,
OnFltWritePostCallback,
NULL
},
{
IRP_MJ_SET_INFORMATION,
0,
OnFltSetInformationPreCallback,
OnFltSetInformationPostCallback,
NULL
},
{
IRP_MJ_QUERY_INFORMATION,
0,
OnFltQueryInformationPreCallback,
OnFltQueryInformationPostCallback,
NULL
},
{
IRP_MJ_CLEANUP,
0,
OnFltCleanupPreCallback,
OnFltCleanupPostCallback,
NULL
},
{
IRP_MJ_CLOSE,
0,
OnFltClosePreCallback,
OnFltClosePostCallback,
NULL
},
{IRP_MJ_OPERATION_END}
};
...
do
{
....
g_userGlobalInfo.g_fltRegistration.Size=
sizeof
(FLT_REGISTRATION);
g_userGlobalInfo.g_fltRegistration.Version=FLT_REGISTRATION_VERSION;
#if DBG
g_userGlobalInfo.g_fltRegistration.Flags=0;
#else
g_userGlobalInfo.g_fltRegistration.Flags=FLTFL_REGISTRATION_DO_NOT_SUPPORT_SERVICE_STOP;
#endif
g_userGlobalInfo.g_fltRegistration.ContextRegistration=NULL;
g_userGlobalInfo.g_fltRegistration.OperationRegistration=operCallbacks;
g_userGlobalInfo.g_fltRegistration.FilterUnloadCallback=OnFltUnloadCallback;
g_userGlobalInfo.g_fltRegistration.InstanceSetupCallback=OnFltInstanceSetupCallback;
g_userGlobalInfo.g_fltRegistration.InstanceQueryTeardownCallback=OnFltInstanceQueryTearDownCallback;
g_userGlobalInfo.g_fltRegistration.InstanceTeardownStartCallback=OnFltInstanceTearDownStartCallback;
g_userGlobalInfo.g_fltRegistration.InstanceTeardownCompleteCallback=OnFltInstanceTearDownCompleteCallback;
ntStatus=FltRegisterFilter(pDriverObject,
&g_userGlobalInfo.g_fltRegistration,
&g_userGlobalInfo.g_pFltFilter);
if
(!NT_SUCCESS(ntStatus)){
KdPrintEx((
DPFLTR_IHVDRIVER_ID,
DPFLTR_ERROR_LEVEL,
"Failed to FltRegisterFilter[DriverEntry]!Status: 0x%08X\n"
,
ntStatus
));
break
;
}
...
}
while
(FALSE);