KeQueryCpuSetsThread
VOID __fastcall KeQueryCpuSetsThread(_ETHREAD *Thread, UINT64 *CpuSets, UINT64 CpuSetCount){
unsigned int v5;
__int64 ThreadCpuSetMaskPointer;
unsigned __int8 CurrentIrql;
__int64 v8;
__int64 v9;
UINT64 SpinCount;
unsigned int v11;
v11 = 0;
v5 = 20;
ThreadCpuSetMaskPointer = KiGetThreadCpuSetMaskPointer((__int64)Thread, &v11);
if( v11 <= 0x14 )
v5 = v11;
CurrentIrql = KeGetCurrentIrql();
__writecr8(2ui64);
LODWORD(SpinCount) = 0;
while( _interlockedbittestandset64((volatile signed __int32 *)&Thread->Tcb.ThreadLock, 0i64) )
{
do
KeYieldProcessorEx(&SpinCount);
while( Thread->Tcb.ThreadLock );
}
if( v5 )
{
v8 = ThreadCpuSetMaskPointer - (_QWORD)CpuSets;
v9 = v5;
do
{
*CpuSets = *(UINT64 *)((char *)CpuSets + v8);
++CpuSets;
--v9;
}
while( v9 );
}
KiReleaseThreadLockSafe((INT64)Thread);
__writecr8(CurrentIrql);
}Referenced by:
NtQueryInformationThread