阅读:1111回复:0
求助tooflat
帮帮忙,我照着你的思路改了一下读过程,为什么蓝屏(BAD_POOL_CALLER)
在SfRead中加入: if(mycmp(irpSp)) //判断是否是要解密的文件 { CompletionCtx=(PREAD_WRITE_COMPLETION_CONTEXT)ExAllocatePool(NonPagedPool,sizeof(READ_WRITE_COMPLETION_CONTEXT)); CompletionCtx->Length=irpSp->Parameters.Read.Length; CompletionCtx->MyBuffer=ExAllocatePool(NonPagedPool,CompletionCtx->Length); CompletionCtx->OldMdl=Irp->MdlAddress; CompletionCtx->OldSystemBuffer=Irp->AssociatedIrp.SystemBuffer; CompletionCtx->OldUserBuffer=Irp->UserBuffer; if (Irp->MdlAddress) CompletionCtx->OldBuffer= MmGetSystemAddressForMdlSafe(Irp->MdlAddress,NormalPagePriority ); else CompletionCtx->OldBuffer = Irp->UserBuffer; Irp->MdlAddress=IoAllocateMdl(CompletionCtx->MyBuffer,CompletionCtx->Length, FALSE,TRUE, NULL); MmBuildMdlForNonPagedPool(Irp->MdlAddress); Irp->UserBuffer = MmGetMdlVirtualAddress(Irp->MdlAddress); DbgPrint(\"sfilter\\\\SfRead::matching...%ws\",lockdir); IoCopyCurrentIrpStackLocationToNext( Irp ); IoSetCompletionRoutine(Irp,SfReadCompletion,&CompletionCtx,TRUE,TRUE,TRUE ); return IoCallDriver( ((PDEVICE_EXTENSION)DeviceObject->DeviceExtension)->NextDeviceObject, Irp ); } 在SfReadCompletion中加入: for(i=0; i < cxt->Length; i++) ((char *)(cxt->OldBuffer))=((char *)(cxt->MyBuffer))-1; IoFreeMdl(Irp->MdlAddress); Irp->MdlAddress=cxt->OldMdl; Irp->UserBuffer=cxt->OldUserBuffer; Irp->AssociatedIrp.SystemBuffer=cxt->OldSystemBuffer; ExFreePool(cxt->MyBuffer); ExFreePool(cxt); [编辑 - 4/29/05 by isrunnIng] |
|
最新喜欢:![]() |