KeSetBasePriorityThread 函数 (ntddk.h)

KeSetBasePriorityThread 例程为给定线程设置相对于当前进程的运行时优先级。

语法

LONG KeSetBasePriorityThread(
  [in, out] PKTHREAD Thread,
  [in]      LONG     Increment
);

参数

[in, out] Thread

指向 KTHREAD 类型的调度程序对象的指针。

[in] Increment

指定要添加到 线程进程的基优先级的值。 此值可以是正值或负值。

有效范围取决于进程的优先级类:

  • 对于可变优先级类进程:生成的优先级必须保持在 1 到 (LOW_REALTIME_PRIORITY - 1)
  • 对于实时优先级类进程:生成的优先级必须保留在LOW_REALTIME_PRIORITYHIGH_PRIORITY

如果 Increment 的绝对值大于或等于 (HIGH_PRIORITY + 1) / 2,则会发生优先级饱和,这意味着对父进程基优先级的后续更改不会影响此线程的基本优先级。

返回值

KeSetBasePriorityThread 返回给定线程以前的基优先级增量。 上一个基本优先级增量定义为指定线程的旧基优先级与线程进程的基优先级之间的差异。

特殊返回值:

  • 当尝试更改空闲线程(初始内核进程中的线程)的优先级时,此函数将返回 0。 该函数不允许更改空闲线程优先级。

  • 对于饱和线程,此函数返回 ((HIGH_PRIORITY + 1) / 2) * saturation_value 而不是简单的优先级差异,其中saturation_value为 +1 或 -1,具体取决于线程是高优先级还是低优先级饱和。

言论

通过将给定 增量(可以是负值)添加到指定线程进程的基优先级来计算新的基优先级。 生成的值作为指定线程的基优先级存储。

使用可变优先级属性设置设备专用线程的驱动程序可以调用此例程来设置此类线程相对于在其中创建线程的系统进程的优先级。

新的基优先级限制为给定线程进程的优先级类。 因此,不允许基优先级从变量优先级类交叉到实时优先级类,反之亦然。

KeSetBasePriorityThread 是一个相对昂贵的作,应该谨慎使用。 避免频繁调用此函数,因为重复的优先级更改(如每分钟一次)可能会显著影响系统性能,并防止计划程序高效运行。 仅当需要持久优先级更改时,才使用此函数,而不是临时调整或定期更新。

要求

要求 价值
最低支持的客户端 Windows 2000
目标平台 普遍
标头 ntddk.h (包括 Ntddk.h)
NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL

另请参阅

KeGetCurrentThread

KeQueryPriorityThread

KeSetPriorityThread