-
-
[求助][求助]关于键盘过滤驱动中回调函数的问题
-
发表于:
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完成时的回调函数中不能操作文件吗?创建或写入?
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!