NTSTATUS CompleteRoutine( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context ) { PIO_STACK_LOCATION IrpSp; PKEYBOARD_INPUT_DATA KeyData; int numKeys, i; IrpSp = IoGetCurrentIrpStackLocation( Irp ); if( NT_SUCCESS( Irp->IoStatus.Status ) ) { KeyData = Irp->AssociatedIrp.SystemBuffer; numKeys = Irp->IoStatus.Information / sizeof(KEYBOARD_INPUT_DATA); for( i = 0; i < numKeys; i++ ) { if(ctrl_state&&alt_state&&KeyData[i].MakeCode==0x53) { KeyData[i].MakeCode = 0; } switch(KeyData[i].MakeCode){ case 0x1d: if (KeyData[i].Flags) ctrl_state=FALSE; else ctrl_state=TRUE; break; case 0x38: if (KeyData[i].Flags) alt_state=FALSE; else alt_state=TRUE; break; default: break; } } } if( Irp->PendingReturned ) { IoMarkIrpPending( Irp ); } return Irp->IoStatus.Status; }