PspGetMemoryPartitionFromJobList

NTSTATUS __stdcall PspGetMemoryPartitionFromJobList(INT64 a1, UINT64 a2, _XSTATE_FEATURE *a3){
  _ETHREAD *CurrentThread; 
  NTSTATUS v7; 
  UINT64 i; 
  __int64 v9; 
  __int64 v10; 
  _XSTATE_FEATURE v11; 

  *a3 = 0i64;
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  --CurrentThread->Tcb.SpecialApcDisable;
  v7 = 0;
  for( i = 0i64; i < a2; ++i )
  {
    v9 = *(_QWORD *)(a1 + 8 * i);
    ExAcquireResourceExclusiveLite(v9 + 56, 1, (INT64)a3);
    v10 = *(_QWORD *)(v9 + 1560);
    if( v10 == -1 )
    {
      v7 = -1073740682;
    }
    else
    {
      v11 = *a3;
      if( v10 )
      {
        if( v11 )
        {
          if( v10 != v11 )
            v7 = -1073741637;
        }
        else
        {
          ObfReferenceObjectWithTag(*(VOID **)(v9 + 1560), 0x624A7350ui64);
          *a3 = *(_XSTATE_FEATURE *)(v9 + 1560);
        }
      }
    }
    ExReleaseResourceLite((PERESOURCE)(v9 + 56));
    if( v7 < 0 )
      break;
  }
  if( (CurrentThread->CrossThreadFlags & 1) != 0 )
    v7 = -1073741749;
  if( v7 < 0 && *(_QWORD *)a3 )
  {
    ObfDereferenceObjectWithTag(*(VOID **)a3, 0x624A7350ui64);
    *a3 = 0i64;
  }
  KiLeaveGuardedRegionUnsafe((__int64)CurrentThread);
  return v7;
}

Referenced by:

PspGetMemoryPartitionContext