阅读:1413回复:4
请问关于在irp_mj_read完成例程解密的问题
看了各位前辈的文章,还有一些疑问。
当(Irp->Flags & IRP_NOCACHE)以及Irp->MdlAddress != NULL 时用 MmGetSystemAddressForMdlSafe获得pbuf并将其内容拷贝 到自己开辟的内存中,然后将其解密。之后我该怎么办呢?自己 新建一个mdl替换原来的mdl吗? |
|
沙发#
发布于:2004-04-28 18:30
谢谢回复。lock哪个页面呢?
我在IoAllocateMdl( pVirtual, ReadLength, FALSE, TRUE, Irp); 后加上了 MmProbeAndLockPages(Irp->MdlAddress, Irp->RequestorMode, IoWriteAccess); 但是还是没有改变。 |
|
板凳#
发布于:2004-04-28 17:54
对页面Lock一下试试
|
|
|
地板#
发布于:2004-04-28 15:06
毫无头绪啊。各位大侠点拨点拨我吧
|
|
地下室#
发布于:2004-04-27 18:44
我写的代码如下:
NTSTATUS ReadCompleteRoutine( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context ) { ULONG ReadLength = Irp->IoStatus.Information; PVOID pbuf; PVOID pVirtual; PMDL OriginalMDL; DbgPrint((\"Entering Read Complete Routine. the length is %d .\\n\", ReadLength)); pbuf = MmGetSystemAddressForMdlSafe(Irp->MdlAddress, NormalPagePriority); pVirtual = ExAllocatePool( NonPagedPool, ReadLength); RtlCopyMemory(pVirtual, pbuf, ReadLength); // 解密,简单的将其ascII值加一 DecryptData(pVirtual, ReadLength); // save original Mdl OriginalMDL = Irp->MdlAddress; Irp->MdlAddress = NULL; //build the MDL IoAllocateMdl( pVirtual, ReadLength, FALSE, TRUE, Irp); if( Irp->PendingReturned ) { IoMarkIrpPending( Irp ); } return Irp->IoStatus.Status; } pVirtual里面的东西经过了解密(+1),但是读出来的内容还是原来的阿?我还漏掉了什么步骤吗? |
|