Функция 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, если вызов выполнен успешно. В противном случае возвращается следующее:
Код возврата | Описание |
---|---|
|
Параметр 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 | Любой уровень |