1. Если вы только начинаете программировать на ассемблере и не знаете с чего начать, тогда попробуйте среду разработки ASM Visual IDE
    (c) на правах рекламы
    Скрыть объявление

Эмуляция клавы

Тема в разделе "WASM.NT.KERNEL", создана пользователем punxer, 19 авг 2010.

Статус темы:
Закрыта.
  1. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    Код (Text):
    1. NTSTATUS
    2. MJ_DispatchIoctl(
    3.     IN  PDEVICE_OBJECT  DeviceObject,
    4.     IN  PIRP            Irp
    5.     )
    6.  
    7. {
    8.     PIO_STACK_LOCATION      irpStack;
    9.     NTSTATUS                status= STATUS_SUCCESS;
    10.  
    11.     irpStack = IoGetCurrentIrpStackLocation (Irp);
    12.     switch (irpStack->Parameters.DeviceIoControl.IoControlCode)
    13.     {
    14.     case 1:
    15.             WRITE_PORT_UCHAR(0x64,0xD2);
    16.             WRITE_PORT_UCHAR(0x60,'a');
    17.             KeStallExecutionProcessor(10000);
    18.             WRITE_PORT_UCHAR(0x64,0xD2);
    19.             WRITE_PORT_UCHAR(0x60,'a');
    20.             WRITE_PORT_UCHAR(0x64,0xD2);
    21.             WRITE_PORT_UCHAR(0x60,'a');
    22.             KeStallExecutionProcessor(10000);
    23.             WRITE_PORT_UCHAR(0x64,0xD2);
    24.             WRITE_PORT_UCHAR(0x60,'a');
    25.             WRITE_PORT_UCHAR(0x64,0xD2);
    26.             WRITE_PORT_UCHAR(0x60,'a');
    27.             KeStallExecutionProcessor(10000);
    28.             WRITE_PORT_UCHAR(0x64,0xD2);
    29.             WRITE_PORT_UCHAR(0x60,'a');
    30.         DbgPrint("IOCTL CODE PASSED");
    31.         break;
    32.     default:
    33.         break;
    34.    
    35.     };
    36.     Irp->IoStatus.Status = status;
    37.     IoCompleteRequest (Irp, IO_NO_INCREMENT);
    38.  
    39.     return status;
    40. }
    почему ноль результата? помогите пожалуйста/ устал уже биться/
     
  2. katrus

    katrus New Member

    Публикаций:
    0
    Регистрация:
    7 мар 2007
    Сообщения:
    612
    В порт нужно писать сканкод а не аски!

    Кстати, такой код не будет работать на машине с отсутствующим i8042 контроллером. Сегодня это достаточно распоростанено.

    Если нужно - пиши в личку. Есть море опыта работы с клавиатурой в ядре.
     
  3. make

    make New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2009
    Сообщения:
    59
    Сейчас он спросит что такое сканкод и i8042 %)))
     
  4. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    можно ли в дрове написать так
    Код (Text):
    1. __asm
    2.             {
    3.                 mov ah, 5
    4.                 mov ch,0
    5.                 mov cl,0dh
    6.                 int 16h
    7.             }
    если нет то почему?
    Бсодит постоянно(
     
  5. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    punxer
    Вы находитесь в защищённом режиме, там прерывания реалмода не работают. Младшие векторы используются как ловушки, старшие как железячые ISR. Вы вызывается ловушку KiTrap0F() которая специально установлена, дабы генерить багчек.

    В NT управление оборудованием производится посредством IOCTL. Это вам не дос. Есть(был) програмный эмулятор V8086, вызывается через сервис NtVdmControl, либо через обёртку Ke386CallBios().

    Изучайте матчасть. Закрыто.
     
Статус темы:
Закрыта.