Я написал и скомпилировал драйвер минифильтра с помощью утилиты сборки WDK 7.0 для 32-разрядной версии Windows 7. Затем я установил его на компьютер с Windows 7 (32-разрядная версия), работающий на VMWare, с помощью утилиты загрузки драйверов OSR. Когда я запускал DbgView, я мог точно видеть вывод DbgPrint.
Затем я скомпилировал тот же самый драйвер, используя WDK 8.0, интегрированный в Microsoft Visual Studio Pro 2012 для Windows 7 (32-разрядная версия). В результате было создано 3 файла: sys, cat и inf. Я установил драйвер на компьютер с Windows 7 (32-разрядная версия), работающий на VMWare, щелкнув правой кнопкой мыши файл inf и выбрав «установить». Затем я запустил службу из командной строки, которая запустилась нормально. Но даже если это был тот же код/драйвер, я не вижу вывод DbgPrint в DbgView из драйвера, который был скомпилирован с использованием WDK 8.0/VS2012 Pro. Вот код, который фактически выполняет печать (функция обратного вызова после операции для 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;
}
Что мне здесь не хватает?