阅读:1147回复:3
自己分配的irp失败后应该在cancel例程中释放吗还是该立即释放??
PIRP irp = IoBuildDeviceIoControlRequest( //0X1B0048
0x1B0040, m_TargetDevice, &lEvent, sizeof(ULONG), &lEvent, sizeof(ULONG), false, m_Event, &IoStatus); IoSetCanelRoute(CancelRoute) ; ////-----!!!!!这里 status = IoCallDriver(m_TargetDevice->DeviceObject(),irp); if (status==STATUS_PENDING){ status = KeWaitForSingleObject(m_Event,Executive , KernelMode , false , &timeout); if (status==STATUS_TIMEOUT){ IoCancelIrp(irp); IoFreeIrp(irp); //////?????是该这里释放Irp //////还是应该在CancelRoute释放Irp } } /////////// |
|
|
沙发#
发布于:2004-07-16 16:03
PIRP irp = IoBuildDeviceIoControlRequest( //0X1B0048 应该设置完成例程,在完成例程里释放,并且返回STATUS_MORE_PROCESSING_REQUIRED 以避免io管理器处理 |
|
|
板凳#
发布于:2004-07-16 16:31
谢谢楼上哈,我也刚看懂为什么IoCanelIrp中也要IoCompletele ..
|
|
|
地板#
发布于:2005-05-19 11:46
为何要返回STATUS_MORE_PROCESSING_REQUIRED?
|
|