KeyboardClass0

Тема в разделе "WASM.WIN32", создана пользователем Nouzui, 8 фев 2007.

  1. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    мм.. извиняюсь, если уже было, я что-то не нашел..

    в общем, вот:

    Код (Text):
    1.     UNICODE_STRING str;
    2.     ObjectAttributes.Length= sizeof(ObjectAttributes);
    3.     ObjectAttributes.Attributes= OBJ_CASE_INSENSITIVE;
    4.     ObjectAttributes.RootDirectory= NULL;
    5.     ObjectAttributes.SecurityDescriptor= NULL;
    6.     ObjectAttributes.SecurityQualityOfService= NULL;
    7.     ObjectAttributes.ObjectName= &str;
    8.  
    9.     HANDLE hKeyboard;
    10.     IO_STATUS_BLOCK IoStatusBlock;
    11.     RtlInitUnicodeString(ObjectAttributes.ObjectName, L"\\Device\\KeyboardClass0");
    12.     NtOpenFile(&hKeyboard, GENERIC_READ | SYNCHRONIZE, &ObjectAttributes, &IoStatusBlock, FILE_SHARE_READ | FILE_SHARE_WRITE, FILE_DIRECTORY_FILE);
    13.  
    14.     char Buffer[0x10000];
    15.     LARGE_INTEGER r= {0};
    16.     NtReadFile(hKeyboard, NULL, NULL, NULL, &IoStatusBlock, Buffer, 0x10000, &r, NULL);
    NtOpenFile возвращает STATUS_SUCCESS, все поля IoStatusBlock заполняются нулями
    NtReadFile возвращает 0xC0000023 (STATUS_BUFFER_TOO_SMALL), IoStatusBlock не меняется

    почему чтение возвращает ошибку? размер буфера 64k
     
  2. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Код (Text):
    1. NTSTATUS
    2. KeyboardClassRead(
    3.     IN PDEVICE_OBJECT Device,
    4.     IN PIRP Irp
    5.     )
    6. {
    7. . . .
    8.     } else if (irpSp->Parameters.Read.Length % sizeof(KEYBOARD_INPUT_DATA)) {
    9.         status = STATUS_BUFFER_TOO_SMALL;
    10. . . .
    11. }
     
  3. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    уух.. сорсы прямо в ддк! а я даже и не заметил )
    спасибо, Four-F.. пойду еще попытаюсь