Я написал драйвер для Windows (файловая система). Все мои журналы печатаются с помощью функции DbgPrint. С DebugView программа (Ядро захвата — на) Я вижу все мои журналы.
Я хочу показать / сохранить свои журналы. Итак, я хочу слушать сообщения ядра.
Я пытался написать несколько:
struct DbWinBuffer
{
DWORD dwProcessId;
char data[4096 - sizeof(DWORD)];
};
DbWinBuffer* dbBuffer;
HANDLE hAckEvent;
HANDLE hEvent;
HANDLE hSharedFile;
SECURITY_DESCRIPTOR sd;
SECURITY_ATTRIBUTES sa;
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.bInheritHandle = true;
sa.lpSecurityDescriptor = &sd;
if (!InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION))
{
printf("ERROR: InitializeSecurityDescriptor\\n");
return 1;
}
if (!SetSecurityDescriptorDacl(&sd, true, 0, false))
{
printf("ERROR: SetSecurityDescriptorDacl\n");
return 1;
}
hAckEvent = CreateEvent(&sa, false, false, L"DBWIN_BUFFER_READY");
if (!hAckEvent)
{
printf("ERROR: CreateEvent(\\"DBWIN_BUFFER_READY\\")\\n");
return 1;
}
hEvent = CreateEvent(&sa, false, false, L"DBWIN_DATA_READY");
if (!hEvent)
{
printf("ERROR: CreateEvent(\\"DBWIN_DATA_READY\\")\\n");
return 1;
}
hSharedFile = CreateFileMapping((HANDLE)-1, &sa, PAGE_READWRITE, 0, 4096, L"DBWIN_BUFFER");
if (!hSharedFile)
{
printf("ERROR: CreateFileMapping(\\"DBWIN_BUFFER\\")\\n");
return 1;
}
dbBuffer = static_cast<DbWinBuffer*>(MapViewOfFile(hSharedFile, FILE_MAP_READ, 0, 0, 4096));
if (!dbBuffer)
{
printf("ERROR: MapViewOfFile\\n");
return 1;
}
SetEvent(hAckEvent);
DWORD pid = GetCurrentProcessId();
printf("Tracing PID: %dnn", pid);
for (;;)
{
DWORD ret = WaitForSingleObject(hEvent, INFINITE);
if (ret == WAIT_FAILED)
{
printf("ERROR: WaitForSingleObject\\n");
return 1;
}
SetEvent(hAckEvent);
}
В этом примере я получаю только OutputDebugString, а не DbgPrint. Как я могу получить сообщения DbgPrint?
Задача ещё не решена.
Других решений пока нет …