阅读:922回复:1
很困惑:一个有效的设备句柄,为什么CloseHandle的时候,连驱动Close例程都没有被调用?
先说一下场景:自己实现了一个简单的虚拟设备驱动,有个用户态app使用它。做了如下操作:
1)CreateFile,使用OVERLAPPED方式打开,成功,句柄记录为DevHdl。 2)启动两个现成,使用DeviceIoControl读写数据,也是使用OVERLAPPED的方式读写,由于不明原因,我的读线程在DeviceIoControl返回失败后,调用GetLastError的返回值是0x02,这个错误表示handle是无效的,但是问题也来了,这时候,我的驱动是可以工作的,而且收发数据正常。不明白为什么这样?这样一来我的APP就无法正确了解IO请求的执行状态。 3)更大的问题在这里: 我使用CloseHandle(DevHdl),关闭设备失败,getLastError得到0x02,不明白为什么,但是这个时候我的处理IRP_MJ_CLSOE的Close例程的确没有被执行。这就奇怪了:为什么同样的handle,在第二步可以完成IO请求,但是第三步就不会执行Close例程了呢? 各位谁对这个有兴趣呢,或者你们也遇到过同样的问题? |
|
沙发#
发布于:2007-09-23 15:24
Get your code public
|
|