LdrpMapResourceFile

NTSTATUS __stdcall LdrpMapResourceFile(
        PVOID Module,
        UNICODE_STRING *pResourceFileName,
        PVOID *pFileHandle,
        PVOID *pResourceFileView,
        UINT64 *pViewSize){
  PVOID v8; 
  IMAGE_NT_HEADERS *v9; 
  unsigned __int16 MajorSubsystemVersion; 
  int v11; 
  PVOID v12; 
  NTSTATUS v13; 
  IMAGE_NT_HEADERS *v14; 
  int v15; 
  UINT64 *v16; 
  PLARGE_INTEGER AllocationSize; 
  UINT64 FileAttributes; 
  UINT64 FileAttributesa; 
  UINT64 ShareAccess; 
  UINT64 CreateDisposition; 
  UINT64 CreateOptions; 
  UINT64 EaLength; 
  void *SectionHandle; 
  PVOID MappedBase; 
  PVOID Object; 
  ULONG_PTR ViewSize; 
  struct _OBJECT_ATTRIBUTES ObjectAttributes; 
  union _LARGE_INTEGER MaximumSize; 
  struct _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 )
  {
    v9 = RtlImageNtHeader((PVOID)((unsigned __int64)Module & 0xFFFFFFFFFFFFFFFCui64));
    if( v9 )
    {
      MajorSubsystemVersion = v9->OptionalHeader.MajorSubsystemVersion;
      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;
      v11 = ZwCreateFile(
              &FileHandle,
              0x80000000ui64,
              &ObjectAttributes,
              &IoStatusBlock,
              0i64,
              FileAttributes,
              ShareAccess,
              CreateDisposition,
              CreateOptions,
              0i64,
              EaLength);
      if( v11 >= 0 )
      {
        *(_QWORD *)&ObjectAttributes.Length = 48i64;
        *(_QWORD *)&ObjectAttributes.Attributes = 576i64;
        ObjectAttributes.RootDirectory = 0i64;
        ObjectAttributes.ObjectName = 0i64;
        LODWORD(FileAttributesa) = 0x8000000;
        LODWORD(AllocationSize) = MajorSubsystemVersion < 6u ? 8 : 2;
        *(_OWORD *)&ObjectAttributes.SecurityDescriptor = 0i64;
        v11 = ZwCreateSection(
                &SectionHandle,
                0xF0005ui64,
                &ObjectAttributes,
                &MaximumSize,
                (UINT64)AllocationSize,
                FileAttributesa,
                FileHandle);
        if( v11 >= 0 )
        {
          Object = 0i64;
          v11 = ObReferenceObjectByHandle(SectionHandle, 0, 0i64, 0, &Object, 0i64);
          ZwClose(SectionHandle);
          v12 = Object;
          if( v11 >= 0 )
          {
            v13 = MmMapViewInSystemSpace(Object, &MappedBase, &ViewSize);
            v8 = MappedBase;
            v11 = v13;
            if( v13 >= 0 )
            {
              v14 = RtlImageNtHeader(MappedBase);
              v15 = v11;
              if( !v14 )
                v15 = -1073741701;
              v11 = v15;
            }
          }
          if( v12 )
            ObfDereferenceObjectWithTag(v12, 0x746C6644ui64);
          if( v11 < 0 )
          {
            if( v8 )
              MmUnmapViewInSystemSpace(v8);
          }
          else
          {
            v16 = pViewSize;
            *pResourceFileView = v8;
            if( v16 )
              *v16 = ViewSize;
            if( pFileHandle )
            {
              *pFileHandle = FileHandle;
              return v11;
            }
          }
        }
      }
    }
    else
    {
      v11 = -1073741701;
    }
    if( FileHandle )
      ZwClose(FileHandle);
    return v11;
  }
  return -1073741811;
}

Referenced by:

LdrLoadAlternateResourceModuleEx