阅读:928回复:7
关于KeWaitForSingleObject的问题。
我估计IoCallDriver返回STATUS_PEDING,我想让他返回“成功值”,所以就调用KeWaitForSingleObject()。
但是添加KeWaitForSingleObject()后,计算机会重新启动。请问如何解决? IoSetCompletionRoutine( Irp, FilemonHookDone, NULL, FALSE, FALSE, FALSE ); status = IoCallDriver( hookExt->FileSystem , Irp ); if(STATUS_PEDING == status) KeWaitForSingleObject(&event, Executive, KernelMode, TRUE, 0); RtlCopyMemory(buffer1,buffer2,length) IoCompleteRequest(Irp , IO_NO_INCREMENT); return Irp->IoStatus.Status; [编辑 - 12/1/04 by aasa2] [编辑 - 12/1/04 by aasa2] |
|
|
沙发#
发布于:2004-12-01 11:10
我把IoCompleteRequest(Irp , IO_NO_INCREMENT)删了,不会重启了。
但是RtlCopyMemory(buffer1,buffer2,length)功能没有实现! 急问! [编辑 - 12/1/04 by aasa2] |
|
|
板凳#
发布于:2004-12-01 16:08
我觉得IoCallDriver返回STATUS_PEDING时,你不用可以处理,直接返回就可以了吧,系统会自动处理的,不过在FileMon的程序里,只在Complete例程里处理了这种情况。
|
|
|
地板#
发布于:2004-12-02 03:53
Irp都完成了, 你怎么还能用"Irp->"呢? toad |
|
地下室#
发布于:2004-12-02 08:33
IoCompleteRequest(Irp , IO_NO_INCREMENT);
return STATUS_SUCCESS; 好像也不行! 能指点一下吗? |
|
|
5楼#
发布于:2004-12-31 16:51
在微软的例子程序中,如果IoCallDriver返回PENDING状态,它只是调用了IoMarkIrpPending然后返回了~~~~~
|
|
6楼#
发布于:2004-12-31 19:01
建议看一下蓝平的原因
|
|
|
7楼#
发布于:2004-12-31 19:33
这个问题解决了,fsfile说的对,其实需要到完成历程中处理。
谢谢各位关心。 祝大家元旦快乐! [编辑 - 12/31/04 by aasa2] |
|
|