LdrLoadAlternateResourceModuleEx

NTSTATUS __stdcall LdrLoadAlternateResourceModuleEx(
        PVOID Module,
        UINT16 LangId,
        PVOID *ReturnAlternateModule,
        UINT64 *AlternateViewSize,
        UINT64 Flags){
  unsigned int v7; 
  void *v9; 
  unsigned __int64 v10; 
  __int64 v12; 
  int v13; 
  const WCHAR *v14; 
  int ResourceFileName; 
  INT64 v16; 
  UINT64 v17; 
  UINT64 *pViewSize; 
  UINT64 v19; 
  INT64 ErrorCode; 
  PVOID MappedBase; 
  UINT64 Size; 
  HANDLE Handle; 
  int v24; 
  UNICODE_STRING pResourceFileName; 
  __int64 v26; 
  INT64 result[22]; 
  char v28; 
  v7 = LangId;
  MappedBase = 0i64;
  Handle = 0i64;
  pResourceFileName = 0i64;
  memset((INT64)result, 0i64);
  Size = 0i64;
  if( !Module || !(_WORD)v7 || !ReturnAlternateModule )
    return -1073741811;
  LODWORD(v9) = LdrpGetFromMUIMemCache(Module, v7, &Size, 4ui64);
  v10 = (unsigned __int64)v9;
  if( v9 == (void *)-1i64 )
  {
    *ReturnAlternateModule = 0i64;
    return -1073020922;
  }
  if( v9 )
  {
    *ReturnAlternateModule = v9;
    if( AlternateViewSize )
      *AlternateViewSize = Size;
    v24 = 0;
    return 0;
  }
  LODWORD(v12) = LdrpKrnGetDataTableEntry(Module);
  v26 = v12;
  if( v12 )
  {
    pResourceFileName.Buffer = (wchar_t *)&v28;
    *(_DWORD *)&pResourceFileName.Length = 34078720;
    v13 = Flags & 0x1000000;
    if( (Flags & 0x1000000) != 0 )
    {
LABEL_14:
      v14 = L".mun";
      if( !v13 )
        v14 = L".mui";
      ResourceFileName = LdrpGetResourceFileName(v12, v13 != 0, v14, (const WCHAR *)result, &pResourceFileName);
      if( ResourceFileName >= 0 )
      {
        ResourceFileName = LdrpMapResourceFile(Module, &pResourceFileName, &Handle, &MappedBase, &Size);
        if( ResourceFileName >= 0 )
        {
          v10 = (unsigned __int64)MappedBase | 1;
          LODWORD(pViewSize) = Flags;
          if( !LdrpVerifyAlternateResourceModuleEx(
                  Module,
                  (VOID *)((unsigned __int64)MappedBase | 1),
                  v16,
                  (const WCHAR *)result,
                  (INT64)pViewSize) )
          {
            MmUnmapViewInSystemSpace(MappedBase);
            ZwClose(Handle);
            Handle = 0i64;
            v10 = 0i64;
            ResourceFileName = -1073020926;
          }
        }
      }
      goto LABEL_20;
    }
    if( DownLevelLangIDToLanguageName(v7, (PWCHAR)result, 85i64, 2ui64) )
    {
      v12 = v26;
      goto LABEL_14;
    }
    DbgPrintEx(0x55u, 1u, "LDR: No Locale name for LangId %d \n", v7);
  }
  ResourceFileName = -1073020927;
LABEL_20:
  if( !v10 )
    v10 = -1i64;
  MappedBase = (PVOID)v10;
  v17 = Size;
  LODWORD(ErrorCode) = ResourceFileName;
  LODWORD(v19) = 1;
  LdrpSetAlternateResourceModuleHandle(Module, &MappedBase, &Handle, 0i64, v7, v19, ErrorCode, Size);
  if( MappedBase == (PVOID)-1i64 )
  {
    *ReturnAlternateModule = 0i64;
  }
  else
  {
    *ReturnAlternateModule = MappedBase;
    if( AlternateViewSize )
      *AlternateViewSize = v17;
    return 0;
  }
  return ResourceFileName;
}

Referenced by:

LdrResSearchResource
LdrpLoadResourceFromAlternativeModule
LdrpResSearchResourceMappedFile