Função KeSetSystemAffinityThreadEx (wdm.h)

A rotina KeSetSystemAffinityThreadEx define a afinidade do sistema do thread atual.

Sintaxe

KAFFINITY KeSetSystemAffinityThreadEx(
  [in] KAFFINITY Affinity
);

Parâmetros

[in] Affinity

Uma variável do tipo KAFFINITY que especifica a nova afinidade de sistema do thread atual.

Retornar valor

KeSetSystemAffinityThreadEx retorna a afinidade de sistema anterior do thread atual ou zero para indicar que não havia afinidade anterior do sistema.

Comentários

KeSetSystemAffinityThreadEx altera a máscara de afinidade do thread atual. A máscara de afinidade 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 neste conjunto.

Os chamadores de KeSetSystemAffinityThreadEx devem salvar o valor retornado e, posteriormente, passar esse valor para a rotina KeRevertToUserAffinityThreadEx para restaurar a máscara de afinidade anterior.

Em um sistema multiprocessador, uma rotina de driver no modo kernel que é executada no contexto de um thread no modo de usuário pode precisar chamar KeSetSystemAffinityThreadEx para alterar temporariamente a máscara de afinidade do thread. Antes que a rotina seja encerrada, ela deve chamar KeRevertToUserAffinityThreadEx para restaurar a máscara de afinidade do thread para seu valor original.

O termo afinidade de usuário refere-se à afinidade original do thread do modo de usuário. A afinidade definida pelo driver do modo kernel é conhecida como afinidade do sistema. Se uma chamada para KeSetSystemAffinityThreadEx substituir a afinidade de usuário de um thread por uma afinidade do sistema, a chamada retornará zero. Posteriormente, o driver restaura a afinidade do usuário chamando KeRevertToUserAffinityThreadEx e passando esse valor retornado (zero) como o valor Affinity .

Além disso, uma rotina de driver no modo kernel que requer uma máscara de afinidade específica pode chamar outra rotina de modo kernel que requer uma máscara de afinidade diferente. Cada rotina pode chamar KeSetSystemAffinityThreadEx para definir uma nova máscara de afinidade e, em seguida, chamar KeRevertToUserAffinityThreadEx para restaurar a máscara de afinidade anterior antes de retornar.

A rotina KeSetSystemAffinityThreadEx altera 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 KeSetSystemAffinityThreadEx 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 KeSetSystemGroupAffinityThread , que especifica um grupo de processadores, em vez de KeSetSystemAffinityThreadEx, o que não acontece. No entanto, a implementação de KeSetSystemAffinityThreadEx no Windows 7 e versões posteriores do Windows fornece compatibilidade para drivers que foram gravados para versões anteriores do Windows, que não dão suporte a grupos de processadores. Nesta implementação, KeSetSystemAffinityThreadEx atribui o thread ao grupo 0 e usa a máscara de afinidade para especificar um conjunto de processadores lógicos nesse grupo no qual o thread pode ser executado. A rotina retorna a máscara de afinidade relativa ao grupo anterior, mas não o grupo anterior.

Se KeSetSystemAffinityThreadEx for chamado em IRQL <= APC_LEVEL e a chamada for bem-sucedida, a nova máscara de afinidade 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 KeSetSystemAffinityThreadEx 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).

Confira também

KAFFINITY

KeRevertToUserAffinityThreadEx

KeSetSystemAffinityThread

KeSetSystemGroupAffinityThread