Função WdfInterruptSetExtendedPolicy (wdfinterrupt.h)
[Aplica-se a KMDF e UMDF]
O método WdfInterruptSetExtendedPolicy especifica a prioridade de interrupção, a afinidade do processador, a política de afinidade e o grupo de processadores para uma interrupção especificada.
Sintaxe
void WdfInterruptSetExtendedPolicy(
[in] WDFINTERRUPT Interrupt,
[in] PWDF_INTERRUPT_EXTENDED_POLICY PolicyAndGroup
);
Parâmetros
[in] Interrupt
Um identificador para um objeto de interrupção de estrutura.
[in] PolicyAndGroup
Um ponteiro para uma estrutura WDF_INTERRUPT_EXTENDED_POLICY que o chamador aloca e inicializa.
Valor de retorno
Nenhum
Observações
Uma verificação de bug ocorre se o driver fornece um identificador de objeto inválido.
O Windows Vista e versões posteriores do sistema operacional permitem que os drivers usem o método WdfInterruptSetPolicy para especificar a prioridade, a afinidade do processador e a política de afinidade de uma interrupção. Além disso, as versões 1.9 e posteriores do KMDF permitem que os drivers usem o método WdfInterruptSetExtendedPolicy para especificar a prioridade, a afinidade do processador, a política de afinidade e o grupo de processadores de uma interrupção.
Para obter informações sobre como usar o registro para substituir os valores que conjuntos de WdfInterruptSetExtendedPolicy, consulte de afinidade e prioridade de interrupção.
Se um driver estiver em execução em uma versão do sistema operacional anterior ao Windows 7, a estrutura ignorará o valor especificado pelo driver para o número do grupo de processadores ao chamar WdfInterruptSetExtendedPolicy.
Se um driver estiver em execução em uma versão do sistema operacional anterior ao Windows Vista, a estrutura ignorará todos os valores especificados pelo driver ao chamar WdfInterruptSetPolicy ou WdfInterruptSetExtendedPolicy.
Para obter mais informações sobre valores do Registro e seções INF que especificam a prioridade, a afinidade do processador e a política de afinidade de uma interrupção, consulte interromper a afinidade e a prioridade.
Se um driver chama WdfInterruptSetExtendedPolicy, ele normalmente faz isso em seu função de retorno de chamada EvtDriverDeviceAdd, depois de chamar WdfInterruptCreate.
Se o driver criar interrupções no EvtDevicePrepareHardware, não use WdfInterruptSetPolicy ou WdfInterruptSetExtendedPolicy . Em vez disso, você pode aplicar a política em EvtDeviceFilterAddResourceRequirements, manipulando diretamente o requisito de recurso de interrupção que essa função de retorno de chamada recebe em seu parâmetro IoResourceRequirementsList.
Para obter mais informações sobre como lidar com interrupções em drivers baseados em estrutura, consulte Tratando interrupções de hardware.
Exemplos
O exemplo de código a seguir chama WDF_INTERRUPT_EXTENDED_POLICY_INIT para inicializar uma estrutura de WDF_INTERRUPT_EXTENDED_POLICY; define valores para a política, a prioridade e o conjunto de processadores de destino; e chama WdfInterruptSetExtendedPolicy . O exemplo define a prioridade normal para a interrupção e atribui a interrupção ao processador 0 no grupo de processadores 2.
#define AFFINITY_MASK(n) ((ULONG_PTR)1 << (n))
WDF_INTERRUPT_EXTENDED_POLICY myExtendedPolicy;
WDF_INTERRUPT_EXTENDED_POLICY_INIT(&myExtendedPolicy);
myExtendedPolicy.Policy = WdfIrqPolicySpecifiedProcessors;
myExtendedPolicy.Priority = WdfIrqPriorityNormal;
myExtendedPolicy.TargetProcessorSetAndGroup.Mask = AFFINITY_MASK(0);
myExtendedPolicy.TargetProcessorSetAndGroup.Group = 2;
WdfInterruptSetExtendedPolicy(
Interrupt,
&myExtendedPolicy
);