| 111 | } |
| 112 | |
| 113 | NTSTATUS kmclassDispatchDeviceControl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp) |
| 114 | { |
| 115 | NTSTATUS status = STATUS_SUCCESS; |
| 116 | PIO_STACK_LOCATION irpStack; |
| 117 | PDEVICE_EXTENSION deviceExtension; |
| 118 | ULONG ioControlCode; |
| 119 | PKEYBOARD_INPUT_DATA KbdInputDataStart, KbdInputDataEnd; |
| 120 | PMOUSE_INPUT_DATA MouseInputDataStart, MouseInputDataEnd; |
| 121 | ULONG InputDataConsumed; |
| 122 | PVOID ioBuffer; |
| 123 | |
| 124 | irpStack = IoGetCurrentIrpStackLocation(Irp); |
| 125 | deviceExtension = (PDEVICE_EXTENSION)DeviceObject->DeviceExtension; |
| 126 | |
| 127 | ioBuffer = Irp->AssociatedIrp.SystemBuffer; |
| 128 | ioControlCode = irpStack->Parameters.DeviceIoControl.IoControlCode; |
| 129 | Irp->IoStatus.Information = 0; |
| 130 | |
| 131 | switch (ioControlCode) |
| 132 | { |
| 133 | case IOCTL_KEYBOARD: |
| 134 | if (ioBuffer) |
| 135 | { |
| 136 | KEYBOARD_INPUT_DATA kid = *(PKEYBOARD_INPUT_DATA)ioBuffer; |
| 137 | KbdInputDataStart = &kid; |
| 138 | KbdInputDataEnd = KbdInputDataStart + 1; |
| 139 | //deviceExtension->My_KbdCallback(deviceExtension->kbdDeviceObject, |
| 140 | g_KoMCallBack.KeyboardClassServiceCallback(g_KoMCallBack.KdbDeviceObject, |
| 141 | KbdInputDataStart, |
| 142 | KbdInputDataEnd, |
| 143 | &InputDataConsumed); |
| 144 | |
| 145 | status = STATUS_SUCCESS; |
| 146 | } |
| 147 | break; |
| 148 | |
| 149 | case IOCTL_MOUSE: |
| 150 | if (ioBuffer) |
| 151 | { |
| 152 | MOUSE_INPUT_DATA mid = *(PMOUSE_INPUT_DATA)ioBuffer; |
| 153 | MouseInputDataStart = ∣ |
| 154 | MouseInputDataEnd = MouseInputDataStart + 1; |
| 155 | |
| 156 | //deviceExtension->My_MouCallback(deviceExtension->mouDeviceObject, |
| 157 | g_KoMCallBack.MouseClassServiceCallback(g_KoMCallBack.MouDeviceObject, |
| 158 | MouseInputDataStart, |
| 159 | MouseInputDataEnd, |
| 160 | &InputDataConsumed); |
| 161 | |
| 162 | status = STATUS_SUCCESS; |
| 163 | } |
| 164 | break; |
| 165 | |
| 166 | default: |
| 167 | status = STATUS_INVALID_PARAMETER; |
| 168 | KdPrint(("\nunknown IRP_MJ_DEVICE_CONTROL\n")); |
| 169 | break; |
| 170 | } |
nothing calls this directly
no outgoing calls
no test coverage detected