KeSetTagCpuSets
NTSTATUS __stdcall KeSetTagCpuSets(UINT64 CpuSetCount, UINT64 *CpuSetMasks, UINT64 AllocationTag){
UINT64 *v3;
unsigned int v4;
NTSTATUS result;
unsigned __int8 CurrentIrql;
unsigned int i;
unsigned __int64 j;
unsigned __int64 v10;
v3 = CpuSetMasks;
v4 = CpuSetCount;
LOBYTE(result) = KiValidateCpuSetMasks((_GUID *)CpuSetMasks, (_IOBJECT_TYPE_LIST *)(unsigned int)CpuSetCount);
if( result >= 0 )
{
CurrentIrql = KeGetCurrentIrql();
__writecr8(2ui64);
KxAcquireSpinLock(&KiCpuSetLock);
RtlWriteAcquireTickLock(&KiCpuSetSequence);
for( i = 0; i < v4; ++v3 )
{
for( j = *v3; j; *(_QWORD *)(KiCpuSetData + 16i64 * ((i << 6) + (unsigned int)v10) + 8) = AllocationTag )
{
_BitScanForward64(&v10, j);
j &= ~(1i64 << v10);
}
++i;
}
++KiCpuSetSequence;
KxReleaseSpinLock(&KiCpuSetLock);
__writecr8(CurrentIrql);
return 0;
}
return result;
}Referenced by:
NtSetSystemInformation