PspLocateInPEManifest

INT64 __fastcall PspLocateInPEManifest(INT64 a1, INT64 a2){
  __int64 v2; 
  VOID *v4; 
  INT64 result; 
  int v6; 
  __int16 v7; 
  __int64 v8; 
  UINT64 InitResIds[5]; 
  UINT64 Size; 
  v2 = *(_QWORD *)(a1 + 1408);
  v4 = *(VOID **)(a1 + 1312);
  if( v2 )
  {
    v7 = *(_WORD *)(v2 + 8);
    if( v7 == 332 || v7 == 452 )
    {
      result = MmCheckImageMapping(a1);
      if( (int)result < 0 )
        return result;
      v4 = (VOID *)(v8 | 1);
    }
  }
  InitResIds[2] = 0i64;
  Size = 0i64;
  InitResIds[0] = 24i64;
  InitResIds[1] = 1i64;
  result = LdrResSearchResource(v4, InitResIds, 3ui64, 0x30ui64, (VOID **)(a2 + 304), &Size, 0i64, 0i64);
  if( (int)result >= 0 )
  {
    v6 = Size;
    if( Size > 0xFFFFFFFF )
      return 3221225595i64;
    *(_BYTE *)(a2 + 8) |= 0x20u;
    *(_DWORD *)(a2 + 312) = v6;
    *(_DWORD *)(*(_QWORD *)(a2 + 208) + 8i64) |= 0x2000u;
    return 0i64;
  }
  if( (unsigned int)(result + 1073741687) <= 2 || (_DWORD)result == -1073741308 )
    return 0i64;
  return result;
}

Referenced by:

PspSetupUserProcessAddressSpace