KeQueryAffinityThread
VOID __stdcall KeQueryAffinityThread(_ETHREAD *Thread, _GROUP_AFFINITY *GroupAffinity){
unsigned __int8 CurrentIrql;
UINT64 SpinCount;
*(_DWORD *)GroupAffinity->Reserved = 0;
GroupAffinity->Reserved[2] = 0;
CurrentIrql = KeGetCurrentIrql();
__writecr8(2ui64);
LODWORD(SpinCount) = 0;
while( _interlockedbittestandset64((volatile signed __int32 *)&Thread->Tcb.ThreadLock, 0i64) )
{
do
KeYieldProcessorEx(&SpinCount);
while( Thread->Tcb.ThreadLock );
}
GroupAffinity->Group = Thread->Tcb.UserAffinity.Group;
GroupAffinity->Mask = Thread->Tcb.UserAffinity.Mask;
KiReleaseThreadLockSafe((INT64)Thread);
__writecr8(CurrentIrql);
}Referenced by:
MiCombineAllPhysicalMemory
NtQueryInformationThread