MCPcopy Create free account
hub / github.com/BestBurning/kmclass / GetKmclassInfo

Function GetKmclassInfo

kmclass.cpp:179–305  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

177
178
179NTSTATUS 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,

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected