.NETプロセッサでは、すべてのスレッドと子プロセスのアフィニティと優先度クラスは、プロパティを使用して設定できProcess.ProcessorAffinity
ますProcess.PriorityClass
。ジョブオブジェクトを使用するJOB_OBJECT_LIMIT_AFFINITY
と、JOB_OBJECT_LIMIT_PRIORITY_CLASS
フラグを使用して同じように設定できるようです。
では、ジョブオブジェクトとプロセスに上記のような特定の制限を設定することの違いは何ですか?
編集:ジョブオブジェクトの制限を低い値に設定した後でも、特権の低いプロセスがそれらを上書きする可能性があります。それは、ジョブオブジェクトの制限が強化されていないことを意味しますか?特権の低いアカウント/プロセスがそれらを上書きしないようにするにはどうすればよいですか?
設定内容:
JOBOBJECT_BASIC_LIMIT_INFORMATION jobBasicInfo = {0};
jobBasicInfo.LimitFlags = JOB_OBJECT_LIMIT_AFFINITY;
jobBasicInfo.Affinity = (ULONG_PTR) (1); // affinitize to processor 1
jobBasicInfo.LimitFlags = JOB_OBJECT_LIMIT_SCHEDULING_CLASS;
jobBasicInfo.SchedulingClass = 4; // below normal priority class
SetInformationJobObject( hJob,
JobObjectBasicLimitInformation,
&jobBasicInfo,
sizeof(jobBasicInfo));
特権の低いプロセスによってどのようにオーバーライドされるか:
Process process = Process.GetCurrentProcess();
process.PriorityClass = ProcessPriorityClass.High;
// all processors mask
process.ProcessorAffinity = new IntPtr((int)Math.Pow(2, Environment.ProcessorCount) - 1);