LdrpMapResourceFile

NTSTATUS __stdcall LdrpMapResourceFile(
        PVOID Module,
        _UNICODE_STRING *pResourceFileName,
        PVOID *pFileHandle,
        PVOID *pResourceFileView,
        UINT64 *pViewSize){
  VOID *v8; 
  __int64 v9; 
  unsigned __int16 v10; 
  int Section; 
  VOID *v12; 
  NTSTATUS v13; 
  __int64 v14; 
  int v15; 
  UINT64 *v16; 
  _LARGE_INTEGER *AllocationSize; 
  UINT64 FileAttributes; 
  INT64 FileAttributesa; 
  UINT64 ShareAccess; 
  UINT64 CreateDisposition; 
  UINT64 CreateOptions; 
  UINT64 EaLength; 
  VOID *SectionHandle; 
  VOID *MappedBase; 
  PVOID Object; 
  UINT64 ViewSize; 
  _OBJECT_ATTRIBUTES ObjectAttributes; 
  _LARGE_INTEGER MaximumSize; 
  _IO_STATUS_BLOCK IoStatusBlock; 
  VOID *FileHandle; 

  FileHandle = 0i64;
  SectionHandle = 0i64;
  MappedBase = 0i64;
  MaximumSize.QuadPart = 0i64;
  v8 = 0i64;
  ViewSize = 0i64;
  memset(&ObjectAttributes, 0, sizeof(ObjectAttributes));
  IoStatusBlock = 0i64;
  if( Module && pResourceFileName && pResourceFileView )
  {
    LODWORD(v9) = RtlImageNtHeader((unsigned __int64)Module & 0xFFFFFFFFFFFFFFFCui64);
    if( v9 )
    {
      v10 = *(_WORD *)(v9 + 72);
      LODWORD(EaLength) = 0;
      LODWORD(CreateOptions) = 0;
      LODWORD(CreateDisposition) = 1;
      LODWORD(ShareAccess) = 5;
      LODWORD(FileAttributes) = 0;
      ObjectAttributes.Length = 48;
      ObjectAttributes.RootDirectory = 0i64;
      ObjectAttributes.Attributes = 576;
      ObjectAttributes.ObjectName = pResourceFileName;
      *(_OWORD *)&ObjectAttributes.SecurityDescriptor = 0i64;
      Section = ZwCreateFile(
                  &FileHandle,
                  0x80000000ui64,
                  &ObjectAttributes,
                  &IoStatusBlock,
                  0i64,
                  FileAttributes,
                  ShareAccess,
                  CreateDisposition,
                  CreateOptions,
                  0i64,
                  EaLength);
      if( Section >= 0 )
      {
        *(_QWORD *)&ObjectAttributes.Length = 48i64;
        *(_QWORD *)&ObjectAttributes.Attributes = 576i64;
        ObjectAttributes.RootDirectory = 0i64;
        ObjectAttributes.ObjectName = 0i64;
        LODWORD(FileAttributesa) = 0x8000000;
        LODWORD(AllocationSize) = v10 < 6u ? 8 : 2;
        *(_OWORD *)&ObjectAttributes.SecurityDescriptor = 0i64;
        Section = ZwCreateSection(
                    (UINT64)&SectionHandle,
                    0xF0005ui64,
                    (INT64)&ObjectAttributes,
                    (INT64 *)&MaximumSize,
                    (INT64)AllocationSize,
                    FileAttributesa,
                    (UINT64)FileHandle);
        if( Section >= 0 )
        {
          Object = 0i64;
          Section = ObReferenceObjectByHandle(SectionHandle, 0i64, 0i64, 0, &Object, 0i64);
          ZwClose((_HANDLE)SectionHandle);
          v12 = Object;
          if( Section >= 0 )
          {
            v13 = MmMapViewInSystemSpace(Object, &MappedBase, &ViewSize);
            v8 = MappedBase;
            Section = v13;
            if( v13 >= 0 )
            {
              LODWORD(v14) = RtlImageNtHeader((UINT64)MappedBase);
              v15 = Section;
              if( !v14 )
                v15 = -1073741701;
              Section = v15;
            }
          }
          if( v12 )
            ObfDereferenceObjectWithTag(v12, 0x746C6644ui64);
          if( Section < 0 )
          {
            if( v8 )
              MmUnmapViewInSystemSpace(v8);
          }
          else
          {
            v16 = pViewSize;
            *pResourceFileView = v8;
            if( v16 )
              *v16 = ViewSize;
            if( pFileHandle )
            {
              *pFileHandle = FileHandle;
              return Section;
            }
          }
        }
      }
    }
    else
    {
      Section = -1073741701;
    }
    if( FileHandle )
      ZwClose((_HANDLE)FileHandle);
    return Section;
  }
  return -1073741811;
}

Referenced by:

LdrLoadAlternateResourceModuleEx