PspLocateInPEManifest

NTSTATUS __stdcall PspLocateInPEManifest(_EPROCESS *CurrentProcess, PSP_CREATE_PROCESS_CONTEXT *CreateContext){
  _EWOW64PROCESS *WoW64Process; 
  VOID *SectionBaseAddress; 
  NTSTATUS result; 
  PSP_CREATE_PROCESS_CONTEXT v6; 
  unsigned __int16 Machine; 
  __int64 v8; 
  UINT64 InitResIds[5]; 
  UINT64 Size; 

  WoW64Process = CurrentProcess->WoW64Process;
  SectionBaseAddress = CurrentProcess->SectionBaseAddress;
  if( WoW64Process )
  {
    Machine = WoW64Process->Machine;
    if( Machine == 332 || Machine == 452 )
    {
      result = MmCheckImageMapping((INT64)CurrentProcess);
      if( result < 0 )
        return result;
      SectionBaseAddress = (VOID *)(v8 | 1);
    }
  }
  InitResIds[2] = 0i64;
  Size = 0i64;
  InitResIds[0] = 24i64;
  InitResIds[1] = 1i64;
  result = LdrResSearchResource(
             SectionBaseAddress,
             InitResIds,
             3ui64,
             0x30ui64,
             (VOID **)CreateContext + 38,
             &Size,
             0i64,
             0i64);
  if( result >= 0 )
  {
    v6 = Size;
    if( Size > 0xFFFFFFFF )
      return -1073741701;
    *((_BYTE *)CreateContext + 8) |= 0x20u;
    CreateContext[78] = v6;
    *(_DWORD *)(*((_QWORD *)CreateContext + 26) + 8i64) |= 0x2000u;
    return 0;
  }
  if( (unsigned int)(result + 1073741687) <= 2 || result == -1073741308 )
    return 0;
  return result;
}

Referenced by:

PspSetupUserProcessAddressSpace