KeQueryAffinityProcess

VOID __stdcall KeQueryAffinityProcess(_EPROCESS *Process, _KAFFINITY_EX *Affinity, UINT64 *GroupMask, UINT16 *NodeList){
  unsigned __int8 CurrentIrql; 
  CurrentIrql = KeGetCurrentIrql();
  __writecr8(2ui64);
  ExAcquireSpinLockSharedAtDpcLevel((PEX_SPIN_LOCK)Process + 16);
  *(_OWORD *)&Affinity->Count = *((_OWORD *)Process + 5);
  *(_OWORD *)&Affinity->Bitmap[1] = *((_OWORD *)Process + 6);
  *(_OWORD *)&Affinity->Bitmap[3] = *((_OWORD *)Process + 7);
  *(_OWORD *)&Affinity->Bitmap[5] = *((_OWORD *)Process + 8);
  *(_OWORD *)&Affinity->Bitmap[7] = *((_OWORD *)Process + 9);
  *(_OWORD *)&Affinity->Bitmap[9] = *((_OWORD *)Process + 10);
  *(_OWORD *)&Affinity->Bitmap[11] = *((_OWORD *)Process + 11);
  Affinity = (_KAFFINITY_EX *)((char *)Affinity + 128);
  *(_OWORD *)&Affinity[-1].Bitmap[18] = *((_OWORD *)Process + 12);
  *(_OWORD *)&Affinity->Count = *((_OWORD *)Process + 13);
  *(_OWORD *)&Affinity->Bitmap[1] = *((_OWORD *)Process + 14);
  Affinity->Bitmap[3] = *((_QWORD *)Process + 30);
  if( GroupMask )
    *(_DWORD *)GroupMask = *((_DWORD *)Process + 159);
  if( NodeList )
  {
    *(_OWORD *)NodeList = *(_OWORD *)((char *)Process + 772);
    *((_OWORD *)NodeList + 1) = *(_OWORD *)((char *)Process + 788);
    *((_QWORD *)NodeList + 4) = *(_QWORD *)((char *)Process + 804);
  }
  ExReleaseSpinLockSharedFromDpcLevel((PEX_SPIN_LOCK)Process + 16);
  __writecr8(CurrentIrql);
}

Referenced by:

NtQueryInformationProcess
PspAllocateProcess