能力值:
( LV4,RANK:50 )
|
-
-
2 楼
好东西,学习下irp以及驱动
|
能力值:
( LV3,RANK:20 )
|
-
-
3 楼
沙发被抢了。。。占座学习之。
|
能力值:
(RANK:860 )
|
-
-
4 楼
好东西,谢谢共享!
|
能力值:
( LV9,RANK:610 )
|
-
-
5 楼
你这个卸载时还得等待按键吧?这个问题没有解决?
|
能力值:
( LV9,RANK:610 )
|
-
-
6 楼
还是先支持一下楼主,这个源码其实网上有
|
能力值:
( LV3,RANK:20 )
|
-
-
7 楼
这个估计是最简单的了,呵呵
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
请问,为什么还要等待最后一个按键?
|
能力值:
( LV9,RANK:610 )
|
-
-
9 楼
因为有个IRP没有完成,还在Pending呢,如果不等待直接卸载,当这个IRP完成时会执行CompleteRoutine,而这个地址所在的驱动已经卸载了,系统就会BSOD~解决方法是设置CancelRoutine,这样卸载时IoCancelIrp就可以了,无须等待
|
能力值:
( LV3,RANK:30 )
|
-
-
10 楼
谢谢achillis 前辈指点 不过我这个代码没有attach到具体的键盘设备上去,卸载的时候貌似取不到CurrentIrp,所以如何得到当前IRP,请前辈详述之
|
能力值:
( LV9,RANK:610 )
|
-
-
11 楼
因为实际上这里只会有一个Irp处于Pending状态,当一个新的Irp到来时上一个已经完成了,所以你可以使用一个全局变量在FakeDispatchRead中把经过的IRP记录下来,那么下一次按键前,这个Irp必然就是那个pending的Irp,卸载时取消的也是这个Irp
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
不太明白为什么会在unload的调用KeSetPriorityThread:
// 把当前线程设置为低实时模式,以便让它的运行尽量少影响其他程序。
KeSetPriorityThread(CurrentThread, LOW_REALTIME_PRIORITY);
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
学习一下。。。。
|
能力值:
( LV10,RANK:170 )
|
-
-
14 楼
支持一个,我也刚接触驱动,正好参考一下
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
我是来感谢 achillis
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
if (CancelKeyboardIrp(PendingIrp) == STATUS_CANCELLED)
这个函数不是返回BOOLEAN吗,LZ改一下
|
能力值:
( LV2,RANK:10 )
|
-
-
17 楼
另外请教一下,这里为什么不用公开的API IoGetDeviceObjectPointer 获取?
|
能力值:
( LV2,RANK:10 )
|
-
-
18 楼
好像寒江的。。。
不过,还是支持一下。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
19 楼
很好的键盘记录
|
能力值:
( LV5,RANK:60 )
|
-
-
20 楼
代码还不错噶..学习下..
|
能力值:
( LV17,RANK:1820 )
|
-
-
21 楼
support!
|
|
|