while(true) и KeDelayExecutionThread в DriverEntry — это неправильно, т.к. служба будет постоянно "Запускается".
Но как создать поток, и еще как быть с буфером?
С ним планируется сделать так:
— буфер объявлен как глобальная переменная UNICODE_STRING вне функций и инициалирован L""
— каллбеки фильтра аппендят к нему некие строки
— по таймеру проверяется, не пустой ли буфер по-прежнему, и если нет — то создается и открывается файл, буфер записывается в него, файл закрывается, после чего буфер опять инициализируется L""
На всякий случай, код создания того файла:
OBJECT_ATTRIBUTES objAttr;
InitializeObjectAttributes(&objAttr, &filePath,
OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE,
NULL, NULL);
return ZwCreateFile(hFile,
GENERIC_ALL,
&objAttr, ioStatusBlock, NULL,
FILE_ATTRIBUTE_NORMAL,
0,
FILE_OVERWRITE_IF,
FILE_SYNCHRONOUS_IO_NONALERT,
NULL, 0);