PspGetMemoryPartitionImplicit

NTSTATUS __fastcall PspGetMemoryPartitionImplicit(_EJOB *Silo, INT16 a2, _LIST_ENTRY **a3){
  NTSTATUS v5; 
  _ETHREAD *CurrentThread; 
  _EJOB *i; 
  _LIST_ENTRY *v9; 
  _EJOB *v11; 

  v5 = 0;
  *a3 = 0i64;
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  PspLockJobChain(Silo, CurrentThread);
  if( (a2 & 0x400) != 0 )
  {
    LODWORD(v11) = PsGetEffectiveServerSilo((INT64)Silo);
    i = v11;
  }
  else
  {
    for( i = Silo; i; i = (_EJOB *)*((_QWORD *)i + 134) )
    {
      if( (*((_DWORD *)i + 64) & 0x1000) == 0 && ((*((_DWORD *)i + 64) & 0x800) == 0 || (a2 & 1) == 0) )
        break;
    }
    if( (a2 & 1) != 0 && i == Silo && (*((_DWORD *)i + 330) & 0x40000000) == 0 )
    {
      v5 = -1073741790;
      goto LABEL_11;
    }
  }
  if( i )
  {
    v9 = (_LIST_ENTRY *)*((_QWORD *)i + 195);
    if( v9 == (_LIST_ENTRY *)-1i64 )
    {
      v5 = -1073740682;
    }
    else
    {
      if( v9 )
      {
        ObfReferenceObjectWithTag(*((VOID **)i + 195), 0x624A7350ui64);
        v9 = (_LIST_ENTRY *)*((_QWORD *)i + 195);
      }
      *a3 = v9;
    }
  }
LABEL_11:
  PspUnlockJobChain(Silo, CurrentThread);
  return v5;
}

Referenced by:

PspGetMemoryPartitionContext