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->Pcb.ProcessLock);
*(_OWORD *)&Affinity->Count = *(_OWORD *)&Process->Pcb.Affinity.Count;
*(_OWORD *)&Affinity->Bitmap[1] = *(_OWORD *)&Process->Pcb.Affinity.Bitmap[1];
*(_OWORD *)&Affinity->Bitmap[3] = *(_OWORD *)&Process->Pcb.Affinity.Bitmap[3];
*(_OWORD *)&Affinity->Bitmap[5] = *(_OWORD *)&Process->Pcb.Affinity.Bitmap[5];
*(_OWORD *)&Affinity->Bitmap[7] = *(_OWORD *)&Process->Pcb.Affinity.Bitmap[7];
*(_OWORD *)&Affinity->Bitmap[9] = *(_OWORD *)&Process->Pcb.Affinity.Bitmap[9];
*(_OWORD *)&Affinity->Bitmap[11] = *(_OWORD *)&Process->Pcb.Affinity.Bitmap[11];
Affinity = (_KAFFINITY_EX *)((char *)Affinity + 128);
*(_OWORD *)&Affinity[-1].Bitmap[18] = *(_OWORD *)&Process->Pcb.Affinity.Bitmap[13];
*(_OWORD *)&Affinity->Count = *(_OWORD *)&Process->Pcb.Affinity.Bitmap[15];
*(_OWORD *)&Affinity->Bitmap[1] = *(_OWORD *)&Process->Pcb.Affinity.Bitmap[17];
Affinity->Bitmap[3] = Process->Pcb.Affinity.Bitmap[19];
if( GroupMask )
*(_DWORD *)GroupMask = Process->Pcb.ActiveGroupsMask;
if( NodeList )
{
*(_OWORD *)NodeList = *(_OWORD *)Process->Pcb.IdealNode;
*((_OWORD *)NodeList + 1) = *(_OWORD *)&Process->Pcb.IdealNode[8];
*((_QWORD *)NodeList + 4) = *(_QWORD *)&Process->Pcb.IdealNode[16];
}
ExReleaseSpinLockSharedFromDpcLevel((PEX_SPIN_LOCK)&Process->Pcb.ProcessLock);
__writecr8(CurrentIrql);
}Referenced by:
NtQueryInformationProcess
PspAllocateProcess