首页
社区
课程
招聘
[求助]minifilter怎么打印缓冲区中数据
发表于: 2017-10-27 15:21 3223

[求助]minifilter怎么打印缓冲区中数据

2017-10-27 15:21
3223

minifilter怎么打印缓冲区中数据,txt文本文件读出来后,缓冲区在哪里


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 407
活跃值: (1821)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
有个iopb的参数,应该在那里面
2017-10-27 19:40
0
雪    币: 307
活跃值: (60)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
我是这么弄得,但是打印的都是乱码,我用PVOID类型接收的数据,用%S打印的是乱码
2017-10-27 20:13
0
雪    币: 407
活跃值: (1821)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
冰栈 我是这么弄得,但是打印的都是乱码,我用PVOID类型接收的数据,用%S打印的是乱码
unicode编码还是gb2312?这些要确定
2017-10-27 23:02
0
雪    币: 307
活跃值: (60)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
Thead unicode编码还是gb2312?这些要确定
两种编码我都试过了,都是乱码。  用%p  (  %X)  都可以正确打印缓冲区的地址,就是内容打印不出来
2017-10-30 11:50
0
雪    币: 307
活跃值: (60)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6



Thead

unicode编码还是gb2312?这些要确定
FLT_POSTOP_CALLBACK_STATUS
SwapPostReadBuffers(
        __inout  PFLT_CALLBACK_DATA  Data,
        __in  PCFLT_RELATED_OBJECTS  FltObjects,
        __in  PVOID  CompletionContext,
        __in  FLT_POST_OPERATION_FLAGS  Flags
        )
{
        PVOID  origBuf;
        PFLT_IO_PARAMETER_BLOCK  iopb  =  Data->Iopb;
        FLT_POSTOP_CALLBACK_STATUS  retValue  =  FLT_POSTOP_FINISHED_PROCESSING;
        PPRE_2_POST_CONTEXT  p2pCtx  =  CompletionContext;
        BOOLEAN  cleanupAllocatedBuffer  =  TRUE;
        ASSERT(!FlagOn(Flags,  FLTFL_POST_OPERATION_DRAINING));
        try  {

                if  (!NT_SUCCESS(Data->IoStatus.Status)  ||
                        (Data->IoStatus.Information  ==  0))  {
                        leave;
                }

                if  (iopb->Parameters.Read.MdlAddress  !=  NULL) 
               {
   

                        origBuf  =  MmGetSystemAddressForMdlSafe(  iopb->Parameters.Read.MdlAddress,NormalPagePriority  );

                         if  (origBuf  ==  NULL) 
                         {
                                Data->IoStatus.Status  =  STATUS_INSUFFICIENT_RESOURCES;
                                Data->IoStatus.Information  =  0;
                                leave;
                          }

                }  else  if  (FlagOn(Data->Flags,FLTFL_CALLBACK_DATA_SYSTEM_BUFFER)  ||
                                      FlagOn(Data->Flags,FLTFL_CALLBACK_DATA_FAST_IO_OPERATION)) 
               {

                        origBuf  =  iopb->Parameters.Read.ReadBuffer;

                }  else 
               {

                        if  (FltDoCompletionProcessingWhenSafe(  Data,
                                                                                                      FltObjects,
                                                                                                      CompletionContext,
                                                                                                      Flags,
                                                                                                      SwapPostReadBuffersWhenSafe,
                                                                                                      &retValue  )) 
                       {

       
                                cleanupAllocatedBuffer  =  FALSE;

                        }  else  {

                                Data->IoStatus.Status  =  STATUS_UNSUCCESSFUL;
                                Data->IoStatus.Information  =  0;
                        }

                        leave;
                }

               
                try  {

                        RtlCopyMemory(  origBuf,
                                                      p2pCtx->SwappedBuffer,
                                                      Data->IoStatus.Information  );

                }  except  (EXCEPTION_EXECUTE_HANDLER)  {

                        Data->IoStatus.Status  =  GetExceptionCode();
                        Data->IoStatus.Information  =  0;

                }

        }  finally  {

                if  (cleanupAllocatedBuffer)
               {
                        ExFreePool(  p2pCtx->SwappedBuffer  );
                        FltReleaseContext(  p2pCtx->VolCtx  );

                        ExFreeToNPagedLookasideList(  &Pre2PostContextList,
                                                                                  p2pCtx  );
                }
        }
       KdPrint(("111111  \n"));

       KdPrint(("%Z  \n",origBuf));

       KdPrint(("\n  222222  \n"));

        return  retValue;
}                                                                                                                                                                         


以上就是代码,在read的后操作数中,代码是wdk中swapBuffers的例子,没有改,就加了一个打印,打开的文件我用notepad++改成ANSI编码了
2017-10-30 11:54
0
游客
登录 | 注册 方可回帖
返回
//