Я работаю над образцом драйвера PassThrough в win 10 x86, но он ничего не печатает с помощью KdPrint.Зачем? - PullRequest
0 голосов
/ 17 ноября 2018

Я печатаю с использованием KdPrint (("Hi \ n"));в FLT_PREOP_CALLBACK_STATUS PtPreOperationPassThrough ( Inout PFLT_CALLBACK_DATA Data, In PCFLT_RELATED_OBJECTS.Драйвер запускается, так как я использую запрос драйвера.Но я не вижу выходных данных после случайного открытия файлов.

в моем коде есть следующее:

CONST FLT_OPERATION_REGISTRATION Callbacks[] = {
{ IRP_MJ_CREATE,
0,
PtPreOperationPassThrough,
PtPostOperationPassThrough },
{ IRP_MJ_DEVICE_CONTROL,
0,
PtPreOperationPassThrough,
PtPostOperationPassThrough },

{ IRP_MJ_CLEANUP,
0,
PtPreOperationPassThrough,
PtPostOperationPassThrough },

{ IRP_MJ_OPERATION_END }
};

//
//  This defines what we want to filter with FltMgr

//

CONST FLT_REGISTRATION FilterRegistration = {

sizeof(FLT_REGISTRATION),         //  Size
FLT_REGISTRATION_VERSION,           //  Version
0,                                  //  Flags

NULL,                               //  Context
Callbacks,                          //  Operation callbacks

PtUnload,                           //  MiniFilterUnload

PtInstanceSetup,                    //  InstanceSetup
PtInstanceQueryTeardown,            //  InstanceQueryTeardown
PtInstanceTeardownStart,            //  InstanceTeardownStart
PtInstanceTeardownComplete,         //  InstanceTeardownComplete

NULL,                               //  GenerateFileName
NULL,                               //  GenerateDestinationFileName
NULL                                //  NormalizeNameComponent

};


NTSTATUS
DriverEntry(
_In_ PDRIVER_OBJECT DriverObject,
_In_ PUNICODE_STRING RegistryPath
)

{
NTSTATUS status;

UNREFERENCED_PARAMETER(RegistryPath);

PT_DBG_PRINT(PTDBG_TRACE_ROUTINES,
    ("PassThrough!DriverEntry: Entered\n"));

//
//  Register with FltMgr to tell it our callback routines
//

status = FltRegisterFilter(DriverObject,
    &FilterRegistration,
    &gFilterHandle);

FLT_ASSERT(NT_SUCCESS(status));

if (NT_SUCCESS(status)) {

    //
    //  Start filtering i/o
    //

    status = FltStartFiltering(gFilterHandle);

    if (!NT_SUCCESS(status)) {

        FltUnregisterFilter(gFilterHandle);
    }
}

return status;
}
...