Mit WDK 8.0 kompilierter FileSystem MiniFilter-Treiber zeigt keine DbgPrint-Ausgabe an (DbgView / Win7 32-Bit)
Ich habe einen Minifilter-Treiber mit dem Build-Dienstprogramm WDK 7.0 für Windows 7 32 Bit geschrieben und kompiliert. Dann installierte ich es auf einem Windows 7 (32-Bit) Computer, der unter VMWare mit dem Treiberladedienstprogramm von OSR ausgeführt wurde. Als ich DbgView ausführte, konnte ich die DbgPrint-Ausgabe genau sehen.
Dann habe ich denselben Treiber mit WDK 8.0 kompiliert, das in Microsoft Visual Studio Pro 2012 für Windows 7 (32 Bit) integriert ist. Als Ergebnis wurden 3 Dateien erstellt, eine sys-, cat- und inf-Datei. Ich habe den Treiber auf einem Windows 7-Computer (32 Bit) unter VMWare installiert, indem ich mit der rechten Maustaste auf die INF-Datei geklickt und "Installieren" ausgewählt habe. Dann startete ich den Dienst von der Eingabeaufforderung, die gut gestartet wurde. Aber obwohl es derselbe Code / Treiber war, kann ich die DbgPrint-Ausgabe in DbgView nicht von dem Treiber aus sehen, der mit WDK 8.0 / VS2012 Pro kompiliert wurde. Hier ist der Code, der den Druck tatsächlich ausführt (Post-Operation-Callback-Funktion für IRP_MJ_CREATE):
FLT_POSTOP_CALLBACK_STATUS CreateFilePostOpCallback(__in PFLT_CALLBACK_DATA Data, __in PCFLT_RELATED_OBJECTS FltObjects,
__in_opt PVOID CompletionContext, __in FLT_POST_OPERATION_FLAGS Flags)
{
PFLT_FILE_NAME_INFORMATION fileNameInfo;
NTSTATUS status;
UNREFERENCED_PARAMETER(FltObjects);
UNREFERENCED_PARAMETER(CompletionContext);
UNREFERENCED_PARAMETER(Flags);
status = FltGetFileNameInformation(Data, FLT_FILE_NAME_NORMALIZED|FLT_FILE_NAME_QUERY_DEFAULT, &fileNameInfo);
if(!NT_SUCCESS(status))
return FLT_POSTOP_FINISHED_PROCESSING;
FltParseFileNameInformation(fileNameInfo);
DbgPrint("%wZ created/opened", &fileNameInfo->Name);
FltReleaseFileNameInformation(fileNameInfo);
return FLT_POSTOP_FINISHED_PROCESSING;
}
Was vermisse ich hier?