KeSetImportanceDpc 函数 (wdm.h)

KeSetImportanceDpc 例程指定运行 DPC 例程的运行时间。

语法

void KeSetImportanceDpc(
  [in, out] PRKDPC          Dpc,
  [in]      KDPC_IMPORTANCE Importance
);

参数

[in, out] Dpc

指向调用方 DPC 对象的指针,该对象 KeInitializeDpc 已初始化。

[in] Importance

指定以下系统定义值之一,以确定使用任一例程对 DPC 进行排队时,KeInsertQueueDpcIoRequestDpc 的行为。

LowImportance

将 DPC 置于 DPC 队列的末尾,并且不开始处理队列。

MediumImportance

将 DPC 置于 DPC 队列的末尾。 如果将 DPC 分配到当前处理器的 DPC 队列,请立即开始处理队列。 MediumImportance重要性的默认值。

MediumHighImportance

将 DPC 置于 DPC 队列的末尾,然后立即开始处理队列。 MediumHighImportance 仅适用于 Windows Vista 和更高版本的 Windows。

HighImportance

将 DPC 置于 DPC 队列的开头,然后立即开始处理队列。

返回值

没有

言论

KeSetImportanceDpc 例程会影响 DPC 在排队后运行时间,方法是确定:

  • DPC 队列中 DPC 的位置。 通常,KeInsertQueueDpcIoRequestDpc 例程将 DPC 置于队列末尾。 如果驱动程序首先调用 KeSetImportanceDpcImportance = HighImportanceKeInsertQueueDpcIoRequestDpc 会将 DPC 置于队列的开头。
  • 系统开始处理 DPC 队列时。 通常,KeInsertQueueDpcIoRequestDpc 立即开始处理当前处理器的 DPC 队列。 驱动程序可以为 重要性 指定不同的值来更改此行为。
默认情况下,DPC 分配给当前处理器的 DPC 队列,因此为 重要性 指定 MediumImportanceMediumHighImportance 具有相同的效果。 但是,驱动程序可以使用 KeSetTargetProcessorDpc 更改 DPC 将分配到的处理器。

对于 Windows Vista 和更高版本的 Windows作系统,可以将 KeSetImportanceDpc 用于线程 DPC。 如果调用方将重要性 设置为 HighImportance,则 DPC 将置于队列的开头;否则,它放置在末尾。 处理线程 DPC 队列时,例程不会影响该例程。 线程化 DPC 始终由 IRQL = PASSIVE_LEVEL 的专用线程处理。 有关线程式 DPC 的详细信息,请参阅 线程式 DPC简介。

请注意,驱动程序必须先调用 KeSetImportanceDpc,然后才能调用 KeInsertQueueDpcIoRequestDpc 才能产生任何影响。

有关系统如何处理 DPC 队列的详细信息,请参阅 DPC 队列的组织

要求

要求 价值
最低支持的客户端 从 Windows 2000 开始可用。
目标平台 普遍
标头 wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h)
NtosKrnl.lib
DLL NtosKrnl.exe
IRQL 任何级别

另请参阅

IoRequestDpc

KeInitializeDpc

KeInsertQueueDpc

KeSetTargetProcessorDpc

KeSynchronizeExecution