阅读:1532回复:1
关于创建IRP的问题?
我用下面的方式创建一个写IRP没有问题,但是
创建一个读IRP则不行,不只问题出在什么地方。 NTSTATUS HidtoserDevice::Read(KIrp I) { PUCHAR pinBuffer= new (NonPagedPool) UCHAR[16]; IO_STATUS_BLOCK IoStatus; LARGE_INTEGER loffset, *pOff; KIrp Irp=IoBuildAsynchronousFsdRequest( IRP_MJ_READ, I.DeviceObject(CURRENT), pinBuffer, 8, pOff, &IoStatus); if ( Irp.IsNull() ) { return I.PnpComplete(this, STATUS_INSUFFICIENT_RESOURCES); } Irp.Information() = 0; status=m_Lower.PnpCall(this,Irp);//在这一句上出现问题,出现蓝屏。 I.Information() = dwBytesRead; status=I.PnpComplete(this, status); return status; } |
|
沙发#
发布于:2001-09-21 09:57
我认为问题出在status=m_Lower.PnpCall(this,Irp);这一句上,我想知道这里的this和I.DeviceObject(CURRENT) 所指向的是同一Device吗?若不是那就有些问题了;若是,我建议不要用this,直接用Device的指针吧!
你是要发IRP发给自身吗? 还有,发异步IRP,要记得释放IRP。 还有,最重要一点,解决的话,记得给分:),我好久没得分了!!! |
|