KeSetImportanceDpc 函数 (ntddk.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 队列,请立即开始处理队列。 MediumImportanceImportance 的默认值。

MediumHighImportance

将 DPC 放在 DPC 队列的末尾,然后立即开始处理队列。 MediumHighImportance 仅在 Windows Vista 和更高版本的 Windows 上可用。

HighImportance

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

返回值

备注

KeSetImportanceDpc 例程通过确定以下因素影响 DPC 在排队后运行多长时间:

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

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

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

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

要求

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

另请参阅

IoRequestDpc

KeInitializeDpc

KeInsertQueueDpc

KeSetTargetProcessorDpc

KeSynchronizeExecution