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)