阅读:1463回复:7
我的过滤程序里,CloseHandle()出现页错误?
在过滤的AddDevice()里创建2个设备,一个是无姓无名的过滤设备,加到堆栈顶部.一个是有名有姓的监控设备,用于win32通信.2个设备用DeviceExtension里的一个变量区分.过滤设备工作正常.监控设备可以用CreateFile()打开,但是关闭时,驱动里的DispatchClose()还没有被调用之前,Softice提示出现页错误,请问是哪里的问题?
|
|
沙发#
发布于:2003-06-13 14:14
关注一下,我也可能面临与 filter driver 通信的问题 :)
你做了两套 dispatch 函数吗? 另:我想知道,如果给 filter driver 起了名字,会有什么后果,试过吗? |
|
|
板凳#
发布于:2003-06-13 18:03
这个问题还需要细化,你应该详细一点并补充部分代码
|
|
|
地板#
发布于:2003-06-13 18:54
我只作了一套DispatchXXX函数,靠DeviceExtension的一个标志来区分是谁的IRP.DispatchCreate()函数如下:
NTSTATUS DispatchCreate( IN PDEVICE_OBJECT pDeviceObject, IN PIRP pIrp ) { NTSTATUS Status = STATUS_SUCCESS; PDEVICE_EXTENSION pDeviceExtension; pDeviceExtension = (PDEVICE_EXTENSION)pDeviceObject->DeviceExtension; if( pDeviceExtension->nType == DEVICE_MONITOR ) // 监控的CreateFile { KdPrint(( \"Create Monitor File.\\n\" )); pIrp->IoStatus.Information = 0; pIrp->IoStatus.Status = Status; IoCompleteRequest( pIrp,IO_NO_INCREMENT ); } else { KdPrint(( \"Create Filter File.\\n\" )); DispatchPassThru( pDeviceObject, pIrp ); // 传给下级驱动 } return Status; } |
|
地下室#
发布于:2003-06-14 00:12
我的创建3个设备,call下面3次,不然BSOD !!
IoDeleteDevice(DriverObject->DeviceObject); |
|
5楼#
发布于:2003-06-16 10:21
我感觉是系统把CloseHandle()传给驱动的过程中出了什么问题.安装,卸载都是好的.可以用\'Show Symbolic Link\'看见我的监控设备的连接名字的.出现页错误时,DispatchClose()还没有进入呀.
|
|
6楼#
发布于:2003-06-17 10:59
呵呵,给分吧。
这个情况我前几天刚刚碰到过。我的也是一个过滤程序。 你的程序的Cleanup的例程设置了吗?就是 DriverObject[IRP_MJ_CLEANUP] 如果没有设置的话,肯定会有问题的。 你看看是不是这个问题,如果是的话,别忘了给分哟。 |
|
7楼#
发布于:2003-06-17 11:47
呵呵,给分吧。 果然是这个. 3ks. |
|