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;
}