Re[6]: Помогите - Перехват клавиатуры в w2k
От: coder_ds  
Дата: 22.02.05 21:28
Оценка:
Вылетает на нажатие клавиши:
#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.
Похоже проблема в этом....Каким образом можно это обойти.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.