KeQueryCpuSetsProcess

UINT64 __stdcall KeQueryCpuSetsProcess(_EPROCESS *Process, UINT64 *CpuSets, UINT64 CpuSetCount, UINT64 AllowedSets){
  unsigned int v6; 
  UINT64 *ProcessCpuSetMaskPointer; 
  unsigned __int8 CurrentIrql; 
  unsigned int v9; 
  signed __int64 v10; 
  __int64 v11; 
  UINT64 v13; 

  LODWORD(v13) = 0;
  v6 = 20;
  ProcessCpuSetMaskPointer = KiGetProcessCpuSetMaskPointer(&Process->Pcb, (unsigned int)AllowedSets, &v13);
  CurrentIrql = KeGetCurrentIrql();
  __writecr8(2ui64);
  ExAcquireSpinLockSharedAtDpcLevel((PEX_SPIN_LOCK)&Process->Pcb.ProcessLock);
  v9 = v13;
  if( (unsigned int)v13 > 0x14 || (v6 = v13) != 0 )
  {
    v10 = (char *)ProcessCpuSetMaskPointer - (char *)CpuSets;
    v11 = v6;
    do
    {
      *CpuSets = *(UINT64 *)((char *)CpuSets + v10);
      ++CpuSets;
      --v11;
    }
    while( v11 );
  }
  ExReleaseSpinLockSharedFromDpcLevel((PEX_SPIN_LOCK)&Process->Pcb.ProcessLock);
  __writecr8(CurrentIrql);
  return v9;
}

Referenced by:

NtQueryInformationProcess