Função KeRevertToUserGroupAffinityThread (wdm.h)

A rotina KeRevertToUserGroupAffinityThread restaura a afinidade de grupo do thread de chamada para seu valor original no momento em que o thread foi criado.

Sintaxe

void KeRevertToUserGroupAffinityThread(
  [in] PGROUP_AFFINITY PreviousAffinity
);

Parâmetros

[in] PreviousAffinity

Um ponteiro para a afinidade de grupo a ser restaurada. Esse parâmetro aponta para uma estrutura GROUP_AFFINITY que contém um número de grupo e uma máscara de afinidade. A máscara de afinidade especifica o conjunto de processadores lógicos em que o thread do usuário pode ser executado.

Retornar valor

Nenhum

Comentários

Essa rotina altera o número do grupo e a máscara de afinidade relativa ao grupo do thread de chamada. O número do grupo e a máscara de afinidade identificam 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.

O parâmetro PreviousAffinity aponta para uma estrutura GROUP_AFFINITY que especifica o novo número de grupo (membro do grupo) e a máscara de afinidade (membro Mask ) para o thread. Se PreviousAffinity-Mask for diferente de> zero, KeRevertToUserGroupAffinityThread definirá o número do grupo e a máscara de afinidade do thread de chamada para os valores na estrutura. Se PreviousAffinity-Mask> for zero, a rotina restaurará o número do grupo e a máscara de afinidade para seus valores originais no momento em que o thread foi inicializado.

Um processo pode ter afinidade para mais de um grupo por vez. No entanto, um thread pode ser atribuído a apenas um grupo a qualquer momento e esse grupo está sempre na afinidade do processo do thread.

Um thread pode alterar o grupo ao qual ele é atribuído chamando a rotina KeSetSystemGroupAffinityThread . Após uma ou mais chamadas para KeSetSystemGroupAffinityThread, o thread pode restaurar a afinidade de grupo original que tinha quando o thread foi criado chamando KeRevertToUserGroupAffinityThread.

Depois que o thread é criado, uma chamada para KeRevertToUserGroupAffinityThread não tem efeito (ou seja, o número do grupo e a máscara de afinidade do thread permanecem inalterados), a menos que o thread primeiro chame KeSetSystemGroupAffinityThread. Após uma chamada para KeRevertToUserGroupAffinityThread, uma segunda chamada para KeRevertToUserGroupAffinityThread não terá efeito, a menos que o thread primeiro chame KeSetSystemGroupAffinityThread.

A rotina altera o número do grupo e a máscara de afinidade para os valores especificados em *PreviousAffinity somente se o seguinte for verdadeiro:

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

Uma rotina relacionada, KeRevertToUserAffinityThreadEx, altera a máscara de afinidade do thread de chamada, mas essa rotina, ao contrário de KeRevertToUserGroupAffinityThread, não aceita um número de grupo como um parâmetro de entrada. No Windows 7 e versões posteriores do sistema operacional Windows, KeRevertToUserAffinityThreadEx pressupõe que a máscara de afinidade se refere a processadores no grupo 0, que é compatível com o comportamento dessa rotina em versões anteriores do Windows que não dão suporte a grupos. Esse comportamento garante que os drivers existentes que chamam KeRevertToUserAffinityThreadEx e que não usam recursos orientados a grupos sejam executados corretamente em sistemas multiprocessadores que têm dois ou mais grupos. No entanto, os drivers que usam recursos orientados a grupos no Windows 7 e versões posteriores do sistema operacional Windows devem chamar KeRevertToUserGroupAffinityThread em vez de KeRevertToUserAffinityThreadEx.

Se KeRevertToUserGroupAffinityThread for chamado em IRQL <= APC_LEVEL e a chamada for bem-sucedida, a nova afinidade de grupo (revertida) entrará em vigor imediatamente. Quando a chamada retorna, o thread de chamada já está em execução em um processador especificado na nova afinidade de grupo. Se KeRevertToUserGroupAffinityThread 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 7 e versões posteriores do Windows.
Plataforma de Destino Universal
Cabeçalho wdm.h (inclua Ntddk.h, Wdm.h, Ntddk.h)
Biblioteca NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL (consulte a seção Comentários).

Confira também

GROUP_AFFINITY

KeRevertToUserAffinityThreadEx

KeSetSystemGroupAffinityThread