Compartilhar via


Função KeRevertToUserAffinityThreadEx (wdm.h)

A rotina KeRevertToUserAffinityThreadEx restaura a afinidade anterior do thread atual.

Sintaxe

void KeRevertToUserAffinityThreadEx(
  [in] KAFFINITY Affinity
);

Parâmetros

[in] Affinity

Uma variável do tipo KAFFINITY que especifica a nova afinidade de sistema do thread atual. Defina esse parâmetro como o valor retornado por uma chamada anterior para a rotina KeSetSystemAffinityThreadEx .

Retornar valor

Nenhum

Comentários

KeRevertToUserAffinityThreadEx altera a afinidade do thread atual. O valor de afinidade é uma máscara que identifica um conjunto de processadores no qual o thread pode ser executado. Se tiver êxito, a rotina agenda o thread para ser executado em um processador nesse conjunto.

Se o valor affinity for diferente de zero, KeRevertToUserAffinityThreadEx definirá a máscara de afinidade do thread como o valor Affinity . Se o valor affinity for zero, KeRevertToUserAffinityThreadEx restaurará a máscara de afinidade de usuário original do thread. Essa máscara de afinidade de usuário original foi salva no objeto thread por uma chamada anterior para KeSetSystemAffinityThreadEx. Uma chamada para KeRevertToUserAffinityThreadEx não tem efeito, a menos que seja precedida por uma chamada para KeSetSystemAffinityThreadEx.

Se o valor affinity for diferente de zero, a rotina alterará a máscara de afinidade do thread atual para o valor affinity somente se ambos os seguintes forem verdadeiros:

  • O valor affinity é válido (ou seja, somente os bits de máscara que correspondem aos processadores lógicos são definidos).
  • Pelo menos um dos processadores especificados no valor Affinity está ativo.
Se qualquer uma dessas condições não for atendida, a chamada para KeRevertToUserAffinityThreadEx não terá efeito.

O Windows 7 e versões posteriores do Windows dão suporte a grupos de processadores. Os drivers projetados para lidar com informações sobre grupos de processadores devem usar a rotina KeRevertToUserGroupAffinityThread , que especifica um grupo de processadores, em vez de KeRevertToUserAffinityThreadEx, o que não acontece. No entanto, a implementação de KeRevertToUserAffinityThreadEx no Windows 7 e versões posteriores do Windows fornece compatibilidade para drivers que foram escritos para versões anteriores do Windows, que não dão suporte a grupos de processadores. Nessa implementação, um valor affinity diferente de zero é uma máscara de afinidade que especifica um conjunto de processadores lógicos no grupo 0 no qual o thread pode ser executado. Se Affinity for zero, o thread será revertido para seu número de grupo de modo de usuário original e máscara de afinidade.

Se KeRevertToUserAffinityThreadEx for chamado em IRQL <= APC_LEVEL e a chamada for bem-sucedida, a nova máscara de afinidade (revertida) entrará em vigor imediatamente. Quando a chamada retorna, o thread de chamada já está em execução em um processador especificado na nova máscara de afinidade. Se KeRevertToUserAffinityThreadEx for chamado em IRQL = DISPATCH_LEVEL e a chamada for bem-sucedida, a alteração pendente do processador será adiada até que o chamador reduza o IRQL abaixo DISPATCH_LEVEL.

Requisitos

Requisito Valor
Cliente mínimo com suporte Disponível no Windows Vista e versões posteriores do Windows.
Plataforma de Destino Universal
Cabeçalho wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Biblioteca NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL (consulte a seção Comentários).
Regras de conformidade da DDI HwStorPortProhibitedDDIs(storport), PowerIrpDDis(wdm)

Confira também

KAFFINITY

KeRevertToUserGroupAffinityThread

KeSetSystemAffinityThreadEx