KeSetTargetProcessorDpcEx 函数 (wdm.h)

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

语法

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

参数

[in, out] Dpc

指向调用方 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 及更高版本中使用任何面向组的功能的驱动程序应调用 KeSetTargetProcessorDpcEx,而不是 KeSetTargetProcessorDpc

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

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

要求

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

另请参阅

IoRequestDpc

KDPC

KeInitializeDpc

KeInsertQueueDpc

KeSetTargetProcessorDpc

PROCESSOR_NUMBER