hill9932
驱动牛犊
驱动牛犊
  • 注册日期2004-03-04
  • 最后登录2008-03-17
  • 粉丝0
  • 关注0
  • 积分335分
  • 威望35点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
阅读:1863回复:5

关于文件加密标识

楼主#
更多 发布于:2008-01-05 03:28
根据devia 的提示,我试了试隐藏文件头的方法,结果用记事本打开时,总是提示"存储空间不足,无法处理此命令",但是用写字板就没问题.

虽然说原因可能是因为记事本和写字板的处理方式不同(记事本用文件映射方法),但是我觉得关键还是没有把文件长度给修改好.目前,我修改文件长度的入口有, IRP_MJ_QUERYINFORMATION, IRP_MJ_DIRECTORY_CONTROL和FastIoQueryStandardInformation.不知道是否还有遗露.
microbe
驱动小牛
驱动小牛
  • 注册日期2007-12-10
  • 最后登录2011-01-17
  • 粉丝1
  • 关注0
  • 积分914分
  • 威望420点
  • 贡献值1点
  • 好评度88点
  • 原创分0分
  • 专家分1分
沙发#
发布于:2008-01-07 10:34
你跟一下,看是不是query的irp里在Iocalldriver之后返回的状态码是STATUS_BUFFER_OVERFLOW?? 我的也是这个问题,后来我把这个错误屏蔽了下,结果好了,但是还没有最终解决这个问题。。。
hill9932
驱动牛犊
驱动牛犊
  • 注册日期2004-03-04
  • 最后登录2008-03-17
  • 粉丝0
  • 关注0
  • 积分335分
  • 威望35点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2008-01-08 00:35
没错,我跟了一下是这个错误.你说的屏蔽是什么意思,直接以SUCCESS返回吗?
microbe
驱动小牛
驱动小牛
  • 注册日期2007-12-10
  • 最后登录2011-01-17
  • 粉丝1
  • 关注0
  • 积分914分
  • 威望420点
  • 贡献值1点
  • 好评度88点
  • 原创分0分
  • 专家分1分
地板#
发布于:2008-01-08 09:10
呵呵,就是当你Success的时候做什么处理,现在依然做什么处理,权宜之计,呵呵。。。。

我把if(NT_SUCCESS(status))改成了if(NT_STATUS(status) || status == STATUS_BUFFER_OVERFLOW)。。。还在查原因,,,这个改法很戳的,,
hill9932
驱动牛犊
驱动牛犊
  • 注册日期2004-03-04
  • 最后登录2008-03-17
  • 粉丝0
  • 关注0
  • 积分335分
  • 威望35点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2008-01-08 11:19
记事本以文件映射方式打开,下面是网上找到的资料,关于打开映像文件的,其中就有STATUS_BUFFER_OVER的错误返回。

HANDLE     APIENTRY    CreateFileMappingW(  
          HANDLE   hFile,  
          LPSECURITY_ATTRIBUTES   lpFileMappingAttributes,  
          DWORD   flProtect,  
          DWORD   dwMaximumSizeHigh,  
          DWORD   dwMaximumSizeLow,  
          LPCWSTR   lpName  
          )      
  {  
          HANDLE   Section;  
          NTSTATUS   Status;  
          LARGE_INTEGER   SectionSizeData;  
          PLARGE_INTEGER   SectionSize;  
          OBJECT_ATTRIBUTES   Obja;  
          POBJECT_ATTRIBUTES   pObja;  
          ACCESS_MASK   DesiredAccess;  
          UNICODE_STRING   ObjectName;  
          ULONG   AllocationAttributes;  
          PWCHAR   pstrNewObjName   =   NULL;  
    
          DesiredAccess   =   STANDARD_RIGHTS_REQUIRED   |   SECTION_QUERY   |   SECTION_MAP_READ;  
          AllocationAttributes   =   flProtect   &   (SEC_FILE   |   SEC_IMAGE   |   SEC_RESERVE   |   SEC_COMMIT   |   SEC_NOCACHE);  
          flProtect   ^=   AllocationAttributes;  
          if   (AllocationAttributes   ==   0)   {  
                  AllocationAttributes   =   SEC_COMMIT;  
                  }  
    
          if   (   flProtect   ==   PAGE_READWRITE   )   {  
                  DesiredAccess   |=   (SECTION_MAP_READ   |   SECTION_MAP_WRITE);  
                  }  
          else  
          if   (   flProtect   !=   PAGE_READONLY   &&   flProtect   !=   PAGE_WRITECOPY   )   {  
                  SetLastError(ERROR_INVALID_PARAMETER);  
                  return   NULL;  
                  }  
    
          if   (   ARGUMENT_PRESENT(lpName)   )   {  
                  if   (gpTermsrvFormatObjectName   &&    
                          (pstrNewObjName   =   gpTermsrvFormatObjectName(lpName)))   {  
            
                          RtlInitUnicodeString(&ObjectName,pstrNewObjName);  
            
                  }   else   {  
            
                          RtlInitUnicodeString(&ObjectName,lpName);  
                  }  
    
                  pObja   =   BaseFormatObjectAttributes(&Obja,lpFileMappingAttributes,&ObjectName);  
                  }  
          else   {  
                  pObja   =   BaseFormatObjectAttributes(&Obja,lpFileMappingAttributes,NULL);  
                  }  
    
          if   (   dwMaximumSizeLow   ||   dwMaximumSizeHigh   )   {  
                  SectionSize   =   &SectionSizeData;  
                  SectionSize->LowPart   =   dwMaximumSizeLow;  
                  SectionSize->HighPart   =   dwMaximumSizeHigh;  
                  }  
          else   {  
                  SectionSize   =   NULL;  
                  }  
    
          if   (hFile   ==   INVALID_HANDLE_VALUE)   {  
                  hFile   =   NULL;  
                  if   (   !SectionSize   )   {  
                          SetLastError(ERROR_INVALID_PARAMETER);  
                          if   (pstrNewObjName)   {  
                                  RtlFreeHeap(RtlProcessHeap(),   0,   pstrNewObjName);  
                          }  
                          return   NULL;  
                          }  
                  }  
    
          Status   =   NtCreateSection(  
                                  &Section,  
                                  DesiredAccess,  
                                  pObja,  
                                  SectionSize,  
                                  flProtect,  
                                  AllocationAttributes,  
                                  hFile  
                                  );  
    
          if   (pstrNewObjName)   {  
                  RtlFreeHeap(RtlProcessHeap(),   0,   pstrNewObjName);  
          }  
    
          if   (   !NT_SUCCESS(Status)   )   {  
                  BaseSetLastNTError(Status);  
                  return   Section   =   NULL;  
                  }  
          else   {  
                  if   (   Status   ==   STATUS_OBJECT_NAME_EXISTS   )   {  
                          SetLastError(ERROR_ALREADY_EXISTS);  
                          }  
                  else   {  
                          SetLastError(0);  
                          }  
                  }  
          return   Section;  
  }


HANDLE    APIENTRY    OpenFileMappingA(  
          DWORD   dwDesiredAccess,  
          BOOL   bInheritHandle,  
          LPCSTR   lpName  
          )      
  {  
          PUNICODE_STRING   Unicode;  
          ANSI_STRING   AnsiString;  
          NTSTATUS   Status;  
    
          if   (   ARGUMENT_PRESENT(lpName)   )   {  
                  Unicode   =   &NtCurrentTeb()->StaticUnicodeString;  
                  RtlInitAnsiString(&AnsiString,lpName);  
                  Status   =   RtlAnsiStringToUnicodeString(Unicode,&AnsiString,FALSE);  
                  if   (   !NT_SUCCESS(Status)   )   {  
                          if   (   Status   ==  
STATUS_BUFFER_OVERFLOW   )   {  
                                  SetLastError(ERROR_FILENAME_EXCED_RANGE);  
                                  }  
                          else   {  
                                  BaseSetLastNTError(Status);  
                                  }  
                          return   NULL;  
                          }  
                  }  
          else   {  
                  BaseSetLastNTError(STATUS_INVALID_PARAMETER);  
                  return   NULL;  
                  }  
    
          return   OpenFileMappingW(  
                                  dwDesiredAccess,  
                                  bInheritHandle,  
                                  (LPCWSTR)Unicode->Buffer  
                                  );  
  }
alwaysrun
驱动小牛
驱动小牛
  • 注册日期2006-06-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分1059分
  • 威望752点
  • 贡献值1点
  • 好评度98点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2008-04-15 16:20
这个问题有人解决了吗,
提示一下思路,谢谢!
一颗平常的心!
游客

返回顶部