| 177 | |
| 178 | |
| 179 | NTSTATUS GetKmclassInfo(PDEVICE_OBJECT DeviceObject, USHORT Index) |
| 180 | { |
| 181 | NTSTATUS status; |
| 182 | UNICODE_STRING ObjectName; |
| 183 | PCWSTR kmhidName, kmclassName, kmName; |
| 184 | PVOID kmDriverStart; |
| 185 | ULONG kmDriverSize; |
| 186 | PVOID* TargetDeviceObject; |
| 187 | PVOID* TargetclassCallback; |
| 188 | PDEVICE_EXTENSION deviceExtension; |
| 189 | PDRIVER_OBJECT kmDriverObject = NULL; |
| 190 | PDRIVER_OBJECT kmclassDriverObject = NULL; |
| 191 | |
| 192 | |
| 193 | deviceExtension = (PDEVICE_EXTENSION)DeviceObject->DeviceExtension; |
| 194 | |
| 195 | switch (Index) |
| 196 | { |
| 197 | case KEYBOARD_DEVICE: |
| 198 | kmName = L"kbd"; |
| 199 | kmhidName = L"\\Driver\\kbdhid"; |
| 200 | kmclassName = L"\\Driver\\kbdclass"; |
| 201 | TargetDeviceObject = (PVOID*)&(deviceExtension->kbdDeviceObject); |
| 202 | TargetclassCallback = (PVOID*)&(deviceExtension->My_KbdCallback); |
| 203 | break; |
| 204 | case MOUSE_DEVICE: |
| 205 | kmName = L"mou"; |
| 206 | kmhidName = L"\\Driver\\mouhid"; |
| 207 | kmclassName = L"\\Driver\\mouclass"; |
| 208 | TargetDeviceObject = (PVOID*)&(deviceExtension->mouDeviceObject); |
| 209 | TargetclassCallback = (PVOID*)&(deviceExtension->My_MouCallback); |
| 210 | break; |
| 211 | default: |
| 212 | return STATUS_INVALID_PARAMETER; |
| 213 | } |
| 214 | |
| 215 | |
| 216 | // ͨ��USB���豸��ȡ�������� |
| 217 | RtlInitUnicodeString(&ObjectName, kmhidName); |
| 218 | status = ObReferenceObjectByName(&ObjectName, |
| 219 | OBJ_CASE_INSENSITIVE, |
| 220 | NULL, |
| 221 | FILE_READ_ACCESS, |
| 222 | *IoDriverObjectType, |
| 223 | KernelMode, |
| 224 | NULL, |
| 225 | (PVOID*)&kmDriverObject); |
| 226 | |
| 227 | |
| 228 | if (!NT_SUCCESS(status)) |
| 229 | { |
| 230 | // ͨ��i8042prt��ȡ�������� |
| 231 | RtlInitUnicodeString(&ObjectName, L"\\Driver\\i8042prt"); |
| 232 | status = ObReferenceObjectByName(&ObjectName, |
| 233 | OBJ_CASE_INSENSITIVE, |
| 234 | NULL, |
| 235 | FILE_READ_ACCESS, |
| 236 | *IoDriverObjectType, |
nothing calls this directly
no outgoing calls
no test coverage detected