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