Compartilhar via


Função KeSetTargetProcessorDpcEx (wdm.h)

A rotina KeSetTargetProcessorDpcEx especifica o processador no qual uma rotina de DPC será executada.

Sintaxe

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

Parâmetros

[in, out] Dpc

Um ponteiro para o objeto DPC do chamador. Esse parâmetro aponta para uma estrutura KDPC , que é uma estrutura de sistema opaca que representa o objeto DPC. Esse objeto deve ter sido inicializado anteriormente pela rotina KeInitializeDpc .

[in] ProcNumber

Um ponteiro para uma estrutura de PROCESSOR_NUMBER alocada pelo chamador que identifica o processador de destino no qual o DPC será enfileirado e executado. Essa estrutura especifica um grupo e um processador dentro desse grupo.

Retornar valor

KeSetTargetProcessorDpcEx retornará STATUS_SUCCESS se a chamada for bem-sucedida. Caso contrário, ele retornará o seguinte:

Código de retorno Descrição
STATUS_INVALID_PARAMETER
O parâmetro ProcNumber aponta para um número de processador inválido.

Comentários

Cada processador em um sistema multiprocessador tem sua própria fila de DPC. KeSetTargetProcessorDpcEx especifica qual fila do processador o sistema deve usar quando o driver chama a rotina KeInsertQueueDpc ou IoRequestDpc para enfileirar um DPC a ser executado posteriormente.

KeSetTargetProcessorDpcEx pode especificar o processador de destino para DPCs comuns e DPCs encadeados. Um DPC comum não pode ser precedido por um thread de alta prioridade, mas um DPC encadeado pode ser precedido por threads críticos de tempo que têm prioridades suficientemente altas.

Uma rotina relacionada, KeSetTargetProcessorDpc, especifica um processador de destino para um DPC, mas essa rotina, ao contrário de KeSetTargetProcessorDpcEx, não especifica um grupo para o processador de destino. A partir do Windows 7, KeSetTargetProcessorDpc pressupõe que o processador de destino pertence ao grupo 0. Esse comportamento garante que os drivers existentes que chamam KeSetTargetProcessorDpc e que não usam recursos orientados a grupo sejam executados corretamente em sistemas multiprocessadores que têm dois ou mais grupos. No entanto, os drivers que usam quaisquer recursos orientados a grupos no Windows 7 e versões posteriores do sistema operacional Windows devem chamar KeSetTargetProcessorDpcEx em vez de KeSetTargetProcessorDpc.

Uma chamada para KeSetTargetProcessorDpcEx que ocorre depois que um objeto DPC foi enfileirado não tem efeito na seleção de um processador para a rotina DPC a ser executada. Para controlar a seleção do processador de destino, uma chamada KeSetTargetProcessorDpcEx deve ocorrer antes da chamada para KeInsertQueueDpc ou IoRequestDpc que enfileira o objeto DPC.

Para obter mais informações sobre filas DPC, consulte Organização de Filas DPC.

Requisitos

Requisito Valor
Cliente mínimo com suporte Disponível a partir do Windows 7.
Plataforma de Destino Universal
Cabeçalho wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Biblioteca NtosKrnl.lib
DLL NtosKrnl.exe
IRQL Qualquer nível

Confira também

IoRequestDpc

KDPC

KeInitializeDpc

KeInsertQueueDpc

KeSetTargetProcessorDpc

PROCESSOR_NUMBER