abc13271552
驱动小牛
驱动小牛
  • 注册日期2007-08-13
  • 最后登录2023-12-05
  • 粉丝0
  • 关注0
  • 积分34分
  • 威望552点
  • 贡献值0点
  • 好评度160点
  • 原创分0分
  • 专家分0分
  • 社区居民
阅读:867回复:3

ReadCompletion中一个奇怪的问题

楼主#
更多 发布于:2007-09-07 15:52
NTSTATUS
ReadCompleted(
      PDEVICE_OBJECT DeviceObject,
      PIRP   Irp,
      PVOID  Context
      )
{


PREAD_WRITE_COMPLETION_CONTEXT CompletionCtx = (PREAD_WRITE_COMPLETION_CONTEXT) Context;
ULONG Offset = 0;
PHOOK_EXTENSION     DevExt = DeviceObject->DeviceExtension;

if (Irp->PendingReturned)
{
    IoMarkIrpPending(Irp);
}

IoFreeMdl(Irp->MdlAddress);
    
Irp->MdlAddress = CompletionCtx->OldMdl;
Irp->UserBuffer = CompletionCtx->OldUserBuffer;
Irp->AssociatedIrp.SystemBuffer = CompletionCtx->OldSystemBuffer;

for (Offset = 0; Offset < CompletionCtx->Length; ++Offset)
{
((PUCHAR) CompletionCtx->OldBuffer)[Offset] = ((PUCHAR) CompletionCtx->MyBuffer)[Offset] ;
}
    
//    DbgPrint("ReadCompleted");
    DbgPrint("%s", CompletionCtx->MyBuffer);
    
    if (CompletionCtx->MdlForUserBuffer)
    {
    MmUnlockPages(CompletionCtx->MdlForUserBuffer);
    IoFreeMdl(CompletionCtx->MdlForUserBuffer);
    }

    ExFreePoolWithTag(CompletionCtx->MyBuffer, SFLT_POOL_TAG);
    ExFreeToNPagedLookasideList(&gReadWriteCompletionCtxLookAsideList, CompletionCtx);

    return Irp->IoStatus.Status;
}
驱网无线,快乐无限
abc13271552
驱动小牛
驱动小牛
  • 注册日期2007-08-13
  • 最后登录2023-12-05
  • 粉丝0
  • 关注0
  • 积分34分
  • 威望552点
  • 贡献值0点
  • 好评度160点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2007-09-07 15:53
DbgPrint("%s", CompletionCtx->MyBuffer);

这句话,为什么不能 完全的 把文件内容显示出来
有时可以显示~
驱网无线,快乐无限
stevphen
驱动牛犊
驱动牛犊
  • 注册日期2003-02-09
  • 最后登录2010-12-03
  • 粉丝0
  • 关注0
  • 积分573分
  • 威望87点
  • 贡献值1点
  • 好评度57点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-09-12 09:56
改为:DbgPrint("%ws", CompletionCtx->MyBuffer);
abc13271552
驱动小牛
驱动小牛
  • 注册日期2007-08-13
  • 最后登录2023-12-05
  • 粉丝0
  • 关注0
  • 积分34分
  • 威望552点
  • 贡献值0点
  • 好评度160点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2007-09-12 10:05
原因找到了,
1,cache的原因
2,是dbgprint无法处里特殊字符, 只能无符号输出,如果转成 char* 会造成丢失
驱网无线,快乐无限
游客

返回顶部