KeSetTargetProcessorDpcEx 函数 (wdm.h)

KeSetTargetProcessorDpcEx 例程指定运行 DPC 例程的处理器。

语法

NTSTATUS KeSetTargetProcessorDpcEx(
  [in, out] PKDPC             Dpc,
  [in]      PPROCESSOR_NUMBER ProcNumber
);

参数

[in, out] Dpc

指向调用方 DPC 对象的指针。 此参数指向 KDPC 结构,它是表示 DPC 对象的不透明系统结构。 此对象之前必须已由 KeInitializeDpc 例程初始化。

[in] ProcNumber

指向调用方分配 的PROCESSOR_NUMBER 结构的指针,该结构标识将对其排队和执行 DPC 的目标处理器。 此结构指定组和此组中的处理器。

返回值

如果调用成功,KeSetTargetProcessorDpcEx 将返回STATUS_SUCCESS。 否则,它将返回以下内容:

返回代码 说明
STATUS_INVALID_PARAMETER
ProcNumber 参数指向无效的处理器编号。

注解

多处理器系统中的每个处理器都有自己的 DPC 队列。 KeSetTargetProcessorDpcEx 指定当驱动程序调用 KeInsertQueueDpcIoRequestDpc 例程将 DPC 排入队列以便稍后运行时,系统应使用的处理器队列。

KeSetTargetProcessorDpcEx 可以为普通 DPC 和 线程 DPC 指定目标处理器。 普通 DPC 甚至不能被高优先级线程抢占,但线程 DPC 可由具有足够高优先级的时间关键线程抢占。

相关例程 KeSetTargetProcessorDpc 指定 DPC 的目标处理器,但此例程与 KeSetTargetProcessorDpcEx 不同,不会为目标处理器指定组。 从 Windows 7 开始, KeSetTargetProcessorDpc 假定目标处理器属于组 0。 此行为可确保调用 KeSetTargetProcessorDpc 且不使用面向组的功能的现有驱动程序将在具有两个或更多组的多处理器系统中正确运行。 但是,在 Windows 7 及更高版本的 Windows 操作系统中使用任何面向组的功能的驱动程序应调用 KeSetTargetProcessorDpcEx ,而不是 KeSetTargetProcessorDpc

在 DPC 对象排队后对 KeSetTargetProcessorDpcEx 的调用不会影响选择运行 DPC 例程的处理器。 若要控制目标处理器的选择,必须在调用将 DPC 对象排队的 KeInsertQueueDpcIoRequestDpc 之前进行 KeSetTargetProcessorDpcEx 调用。

有关 DPC 队列的详细信息,请参阅 DPC 队列的组织

要求

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

另请参阅

IoRequestDpc

KDPC

KeInitializeDpc

KeInsertQueueDpc

KeSetTargetProcessorDpc

PROCESSOR_NUMBER