isrunnIng
驱动牛犊
驱动牛犊
  • 注册日期2005-03-11
  • 最后登录2005-12-18
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1111回复:0

求助tooflat

楼主#
更多 发布于:2005-04-28 22:18
帮帮忙,我照着你的思路改了一下读过程,为什么蓝屏(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]

最新喜欢:

LeopardLeopar...
游客

返回顶部