进程(线程)的优先级越高,那么就可以分占越多的CPU时间片,每个进程都有相应的优先级,优先级决定它何时运行和占用CPU的时间。最终的优先级共分 32 级,是从 0 到 31 的数值,称为基本优先级别。
线程32个优先级,16~31是实时类别 1~15是动态类别 0是系统类别
KPROCESS.BasePriority是线程创建之后的KTHREAD.BasePriority值(线程的基本、静态优先级),这个值基本不变,KTHREAD.Priority是动态优先级。
KiComputeNewPriority 用来计算非实时优先级线程的优先级(优先级值要小于16),而且这个优先级不能超过基本优先级的值。
R3可以调节进程的基本优先级(如任务管理器),但只能调节 EPROCESS.PriorityClass ,分为未知,Idle,普通,高,实时,低于普通高于普通这几种,分别对应的基本优先级是8 4 8 13 24 6 10。而NtSetInFormationProcess可以对优先级进行微调。
SetPriorityClass(设置进程优先级)
function SetPriorityClass(hProcess: THandle; dwPriorityClass: DWORD): BOOL;
优先级 | 标志 | 优先级值 |
idle (低) |