[英]Log to a txt file from a Windows 10 Kernel Mode driver
我正在尋找從Windows 10內核模式驅動程序(C)進行一些日志記錄的方法。 我在驅動程序內部進行了大量日志記錄,但是在這種情況下,我無法附加內核調試器,因此我想將調試字符串轉儲到txt文件(甚至事件日志)中。
例如,這是一個例子
#include <stdio.h>
#include <stdlib.h>
VOID Log(char * text) {
FILE *f = fopen("c:\\temp\\logger.txt", "a+");
if (f == NULL) return;
fprintf(f, "%s\n", text);
fclose(f);
}
但是我明白了
driver.obj : error LNK2019: unresolved external symbol fclose referenced in function Log driver.obj : error LNK2019: unresolved external symbol fopen referenced in function Log tdriver.obj : error LNK2019: unresolved external symbol fprintf referenced in function Log
我已經包含了stdio.h,還需要做些其他的事情才能使它鏈接嗎?
還是因為這是內核驅動程序,所以我無法使用這些庫,並且必須執行其他低級過程才能寫入日志文件?
編輯:看來我不能從內核驅動程序使用fopen。
我試過了,但是什么也沒寫到文件中。 我基於此示例編寫代碼:
我所做的只是將標志設置為FILE_OPEN_IF以附加文件(如果文件已經存在)。 我知道每次打開和關閉手柄效率都很低,但是我現在只是在測試。
VOID Log(char* text) {
UNICODE_STRING uniName;
OBJECT_ATTRIBUTES objAttr;
RtlInitUnicodeString(&uniName, L"\\SystemRoot\\example.txt"); // or L"\\SystemRoot\\example.txt"
InitializeObjectAttributes(&objAttr, &uniName,
OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE,
NULL, NULL);
HANDLE handle;
NTSTATUS ntstatus;
IO_STATUS_BLOCK ioStatusBlock;
// Do not try to perform any file operations at higher IRQL levels.
// Instead, you may use a work item or a system worker thread to perform file operations.
if (KeGetCurrentIrql() != PASSIVE_LEVEL) return;
//return STATUS_INVALID_DEVICE_STATE;
ntstatus = ZwCreateFile(&handle,
GENERIC_WRITE,
&objAttr, &ioStatusBlock, NULL,
FILE_ATTRIBUTE_NORMAL,
0,
FILE_OPEN_IF,
FILE_SYNCHRONOUS_IO_NONALERT,
NULL, 0);
CHAR buffer[BUFFER_SIZE];
size_t cb;
if (NT_SUCCESS(ntstatus)) {
ntstatus = RtlStringCbPrintfA(buffer, sizeof(buffer), text, 0x0);
if (NT_SUCCESS(ntstatus)) {
ntstatus = RtlStringCbLengthA(buffer, sizeof(buffer), &cb);
if (NT_SUCCESS(ntstatus)) {
ntstatus = ZwWriteFile(handle, NULL, NULL, NULL, &ioStatusBlock,
buffer, (ULONG)cb, NULL, NULL);
}
}
ZwClose(handle);
}
}
如果確實需要從內核模式驅動程序進行日志記錄,建議您研究WMI / WPP跟蹤。 這將能夠以足夠快的速度記錄日志,以使其能夠跟上大多數內核事件,而這些事件記錄到文件或調試器中並不適合。 它還將使您能夠在不影響性能的情況下跟蹤生產/發布驅動程序,以便使客戶能夠收集日志並進行分析。
https://docs.microsoft.com/zh-cn/windows-hardware/drivers/devtest/wpp-software-tracing
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.