Keyboard and Mouse Driver

From
Dmitry Rudnitsky (2:5030/1043)
To
Vitalik Perepelkin
Date
2002-03-02T00:03:50Z
Area
SU.WINDOWS.NT.PROG
Hello Vitalik!

Воскpесенье 17 Февpаля 2002 10:48, Vitalik Perepelkin wrote to All.


 VP>   sprintf( ntNameBuffer, "\\Device\\PointerClass0" );
 VP>   RtlInitAnsiString( &ntNameString, ntNameBuffer );
 VP>   RtlAnsiStringToUnicodeString( &ntMouseUnicodeString, &ntNameString,
 VP> TRUE );
 VP>   sprintf( ntNameBuffer, "\\Device\\KeyboardClass0" );
 VP>   RtlInitAnsiString( &ntNameString, ntNameBuffer );
 VP>   RtlAnsiStringToUnicodeString( &ntUnicodeString, &ntNameString, TRUE
 VP> );
 VP>   sprintf( ntNameBuffer, "\\DosDevices\\ViPKbd" );
 VP>   RtlInitAnsiString( &ntNameString, ntNameBuffer );
 VP>   RtlAnsiStringToUnicodeString( &deviceLinkUnicodeString,
 VP> &ntNameString, TRUE);
 VP>   sprintf( ntNameBuffer, "\\Device\\ViPKbd" );
 VP>   RtlInitAnsiString( &ntNameString, ntNameBuffer );
 VP>   RtlAnsiStringToUnicodeString( &deviceNameUnicodeString,
 VP> &ntNameString, TRUE);

Кошмаp.
    RtlInitUnicodeString(&ntMouseUnicodeString,L"\\Device\\PointerClass0");
    RtlInitUnicodeString(&ntUnicodeString,L"\\Device\\KeyboardClass0");
Освобождать не надо.

 VP>   ntStatus = IoCreateDevice( DriverObject,
 VP>                              sizeof(DEVICE_EXTENSION),
 VP>                              &deviceNameUnicodeString,
 VP>                              FILE_DEVICE_UNKNOWN,
 VP>                              0,
 VP>                              FALSE,
 VP>                              &DispatchDevice );
 VP>   if( !NT_SUCCESS(ntStatus) ) {...}
 VP>   ntStatus = IoCreateSymbolicLink (&deviceLinkUnicodeString,
 VP>                                    &deviceNameUnicodeString );
 VP>     if(!NT_SUCCESS(ntStatus)) {...}
Вот этого не нужно.
В usermode:
  if(!DefineDosDevice(DDD_RAW_TARGET_PATH,"Kbddmr","\\Device\\KeyboardClass0"))
  {
    return 0;
  }
  hDevice = CreateFile("\\\\.\\Kbddmr", GENERIC_WRITE,
                       FILE_SHARE_WRITE|FILE_SHARE_READ,NULL,
                       OPEN_EXISTING,0,NULL);
  if (hDevice==INVALID_HANDLE_VALUE){}



 VP> NTSTATUS ViPReadComplete(
 VP>     IN PDEVICE_OBJECT DeviceObject,
 VP>     IN PIRP Irp,
 VP>     IN PVOID Context)
 VP> {
 VP>     if( Irp->PendingReturned ) {
 VP>         IoMarkIrpPending( Irp );}
 VP>     if ( iKeyboardBlocked ) {
 VP>         Irp->IoStatus.Status = STATUS_UNSUCCESSFUL;}
Irp->IoStatus.Status = STATUS_CANCELLED;
 VP>     return Irp->IoStatus.Status;}



--- ICQ 84848809
 * Origin: "Плод познания был чеpвив." - Адам (2:5030/1043)