寒江独钓的键盘过滤驱动
- C/C++ code
// 初始化一个字符串,就是Kdbclass驱动的名字。 RtlInitUnicodeString(&uniNtNameString, KBD_DRIVER_NAME); // 请参照前面打开设备对象的例子。只是这里打开的是驱动对象。 status = ObReferenceObjectByName ( &uniNtNameString, OBJ_CASE_INSENSITIVE, NULL, 0, IoDriverObjectType, KernelMode, NULL, &KbdDriverObject ); // 如果失败了就直接返回 if(!NT_SUCCESS(status)) { KdPrint(("MyAttach: Couldn't get the MyTest Device Object\n")); return( status ); } else { // 这个打开需要解应用。早点解除了免得之后忘记。 ObDereferenceObject(DriverObject); } // 这是设备链中的第一个设备 pTargetDeviceObject = KbdDriverObject->DeviceObject; // 现在开始遍历这个设备链 while (pTargetDeviceObject) { //,............... }
这段绑定代码, 在执行到 while (pTargetDeviceObject) , 由于 pTargetDeviceObject 为空直接退出了。
ObReferenceObjectByName 这个函数调用是成功的, 为什么会这样呢,抓狂了。
------解决方案--------------------
------解决方案--------------------
还在看前面的串口过滤
------解决方案--------------------
看我的博客,有个可以运行的源码供楼主参考。
http://blog.csdn.net/svtanto