KeQueryAffinityThread

__int64 __fastcall KeQueryAffinityThread(__int64 a1, __int64 a2){
  unsigned __int8 CurrentIrql; 
  __int64 result; 
  UINT64 SpinCount; 
  *(_DWORD *)(a2 + 10) = 0;
  *(_WORD *)(a2 + 14) = 0;
  CurrentIrql = KeGetCurrentIrql();
  __writecr8(2ui64);
  LODWORD(SpinCount) = 0;
  while( _interlockedbittestandset64((volatile signed __int32 *)(a1 + 64), 0i64) )
  {
    do
      KeYieldProcessorEx(&SpinCount);
    while( *(_QWORD *)(a1 + 64) );
  }
  *(_WORD *)(a2 + 8) = *(_WORD *)(a1 + 560);
  *(_QWORD *)a2 = *(_QWORD *)(a1 + 552);
  KiReleaseThreadLockSafe(a1);
  result = CurrentIrql;
  __writecr8(CurrentIrql);
  return result;
}

Referenced by:

MiCombineAllPhysicalMemory
NtQueryInformationThread