KeQueryCpuSetsProcess

UINT64 __stdcall KeQueryCpuSetsProcess(_EPROCESS *Process, UINT64 *CpuSets, UINT64 CpuSetCount, UINT64 AllowedSets){
  unsigned int v6; 
  unsigned __int64 ProcessCpuSetMaskPointer; 
  unsigned __int8 CurrentIrql; 
  unsigned int v9; 
  unsigned __int64 v10; 
  __int64 v11; 
  unsigned int v13; 
  v13 = 0;
  v6 = 20;
  ProcessCpuSetMaskPointer = KiGetProcessCpuSetMaskPointer((__int64)Process, AllowedSets, &v13);
  CurrentIrql = KeGetCurrentIrql();
  __writecr8(2ui64);
  ExAcquireSpinLockSharedAtDpcLevel((PEX_SPIN_LOCK)Process + 16);
  v9 = v13;
  if( v13 > 0x14 || (v6 = v13) != 0 )
  {
    v10 = ProcessCpuSetMaskPointer - (_QWORD)CpuSets;
    v11 = v6;
    do
    {
      *CpuSets = *(UINT64 *)((char *)CpuSets + v10);
      ++CpuSets;
      --v11;
    }
    while( v11 );
  }
  ExReleaseSpinLockSharedFromDpcLevel((PEX_SPIN_LOCK)Process + 16);
  __writecr8(CurrentIrql);
  return v9;
}

Referenced by:

NtQueryInformationProcess