网站建设包括的内容有什么,大理网站制作,产品推广方法有哪些,seo推广顾问我写了一个简单的键盘过滤驱动程序(MyKbdFilter)#xff0c;其注册注册表#xff0c;并添加到HLM \系统\ CurrentControlSet \控制\ {类4D36E96B-E325-11CE-BFC1-08002BE10318} \的UpperFilters MyKbdFilter。现在我有#xff1a;“kbdclass MyKbdFilter”。所以#xff0c… 我写了一个简单的键盘过滤驱动程序(MyKbdFilter)其注册注册表并添加到HLM \系统\ CurrentControlSet \控制\ {类4D36E96B-E325-11CE-BFC1-08002BE10318} \的UpperFilters MyKbdFilter。现在我有“kbdclass MyKbdFilter”。所以当为键盘构建一个新的设备堆栈时我会得到MyKbdFilter- kdbclass- kbHid- HidUsb。当我插入键盘时我看到DriverEntryAddDeviceDispatchThru和DispatchPNP被调用。但键盘没有响应。在关键笔划上既不调用DispatchRead也不调用其他函数。 这里是我的代码键盘过滤驱动程序不responsing NTSTATUS DriverEntry(IN DRIVER_OBJECT* pDriverObject, IN UNICODE_STRING* pRegPath) { int i; NTSTATUS status; for (i 0; i IRP_MJ_MAXIMUM_FUNCTION; i) { pDriverObject-MajorFunction[i] DispatchThru; } pDriverObject-MajorFunction[IRP_MJ_READ] DispatchRead; pDriverObject-MajorFunction[IRP_MJ_POWER] DispatchPower; pDriverObject-MajorFunction[IRP_MJ_PNP] DispatchPNP; pDriverObject-DriverUnload UnloadDriver; pDriverObject-DriverExtension-AddDevice AddDevice; return STATUS_SUCCESS; } NTSTATUS AddDevice(IN PDRIVER_OBJECT pDriverObject, IN PDEVICE_OBJECT pTargetDeviceObject){ PDEVICE_OBJECT pSourceDeviceObject, pDeviceObject; PDEVICE_EXTENSION pDeviceExtension; NTSTATUS status; status IoCreateDevice(pDriverObject, sizeof(DEVICE_EXTENSION), NULL, FILE_DEVICE_KEYBOARD, 0, FALSE, pSourceDeviceObject); pDeviceExtension (PDEVICE_EXTENSION) pSourceDeviceObject-DeviceExtension; pDeviceObject IoAttachDeviceToDeviceStack(pSourceDeviceObject, pTargetDeviceObject); pDeviceExtension-pLowerDeviceObject pTargetDeviceObject; pSourceDeviceObject-Flags pDeviceObject-Flags (DO_BUFFERED_IO | DO_POWER_PAGABLE | DO_DIRECT_IO); pSourceDeviceObject-Flags pDeviceObject-Flags ~DO_DEVICE_INITIALIZING; return status; } NTSTATUS DispatchThru(IN PDEVICE_OBJECT pDeviceObject, IN PIRP pIrp) { IoSkipCurrentIrpStackLocation(pIrp); return IoCallDriver(((PDEVICE_EXTENSION) pDeviceObject-DeviceExtension)-pLowerDeviceObject ,pIrp); } NTSTATUS DispatchRead(IN PDEVICE_OBJECT pDeviceObject, IN PIRP pIrp) { IoSkipCurrentIrpStackLocation(pIrp); return IoCallDriver(((PDEVICE_EXTENSION) pDeviceObject-DeviceExtension)-pLowerDeviceObject ,pIrp); } 编辑我使用Windows 7 2016-10-20 Michael