首页
社区
课程
招聘
[求助][求助]关于键盘过滤驱动中回调函数的问题
发表于: 2011-4-12 16:55 5401

[求助][求助]关于键盘过滤驱动中回调函数的问题

2011-4-12 16:55
5401
在修改例程的基础上,
NTSTATUS Ctrl2capDispatchRead(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp )
{
.......
IoSetCompletionRoutine( Irp, Ctrl2capReadComplete,
                            DeviceObject, TRUE, TRUE, TRUE );
}
//-------------------------------------
回调函数:
NTSTATUS Ctrl2capReadComplete(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp,
    IN PVOID Context
    )
{
..........
writeFileTest(); //自定义例程
}

void writeFileTest()
{
....
ZwCreateFile();  
ZwWriteFile();
}
问题:
程序功能:
在这个回调函数中完成键盘的过滤得到键盘的扫描码,并转化为ascii码。再写入文件.文件是在驱动程序一开始就被创建或打开的.

1。为什么在完成的回调函数任意一个位置调用自定义的例程,都会蓝屏?
   是不是在回调函数中不能再调用其他的例程了?
2。我把这个自定义例程去掉,代码放到回调函数中,还是蓝屏,
3。但如果把代码放到其他函数如Ctrl2capDispatchRead()之内,
   也就是跟调用回调函数的IoSetCompletionRoutine()的前面或之后,
   就可以通过,不会蓝屏?
4。结论:IRP完成时的回调函数中不能操作文件吗?创建或写入?

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 227
活跃值: (86)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
补充问题:
5。键盘扫描码是不是非要在IRP完成时的回调函数才能获得?
   为什么在之前的函数Ctrl2capDispatchRead()中不能获得?
   我把获取键盘扫描码的代码放到这里就不能获取扫描码了,
2011-4-12 17:28
0
雪    币: 227
活跃值: (86)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
先谢谢各位大侠!帮一下驱动新手!
2011-4-12 17:55
0
雪    币: 693
活跃值: (108)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
4
由键盘记录器注册的回调完成例程函数运行在
DISPATCH 特权级上,而文件I/O 操作仅仅能在PASSIVE 特权级上进行.这就需要由回调
函数把键盘数据临时地保存在一个地方,然后用一个IRQ 级别为PASSIVE_LEVEL 的线程
来进行监视,读取线程还需要和写入线程进行同步
2011-4-12 18:01
0
游客
登录 | 注册 方可回帖
返回
//