Функция 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 указывает очередь процессора, которую система должна использовать, когда драйвер вызывает подпрограмму KeInsertQueueDpc или IoRequestDpc для постановки DPC в очередь для последующего запуска.

KeSetTargetProcessorDpcEx может указать целевой процессор как для обычных DPC, так и для потоковых DPC. Обычный DPC не может быть вытесняется даже потоком с высоким приоритетом, но потоковые DPC могут быть вытесняются потоками, критически важными по времени, имеющими достаточно высокие приоритеты.

Связанная подпрограмма KeSetTargetProcessorDpc указывает целевой процессор для DPC, но эта подпрограмма, в отличие от KeSetTargetProcessorDpcEx, не задает группу для целевого процессора. Начиная с Windows 7, KeSetTargetProcessorDpc предполагает, что целевой процессор принадлежит к группе 0. Это гарантирует, что существующие драйверы, вызывающие KeSetTargetProcessorDpc и не использующие функции, ориентированные на группу, будут правильно работать в многопроцессорных системах с двумя или более группами. Однако драйверы, использующие все функции, ориентированные на группу в Windows 7 и более поздних версиях операционной системы Windows, должны вызывать KeSetTargetProcessorDpcEx вместо KeSetTargetProcessorDpc.

Вызов KeSetTargetProcessorDpcEx , который происходит после постановки объекта DPC в очередь, не влияет на выбор процессора для выполнения подпрограммы DPC. Чтобы управлять выбором целевого процессора, вызов KeSetTargetProcessorDpcEx должен произойти перед вызовом KeInsertQueueDpc или IoRequestDpc , который помещает объект DPC в очередь.

Дополнительные сведения об очередях 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