Função SetProcessAffinityMask (winbase.h)

Define uma máscara de afinidade de processador para os threads do processo especificado.

Sintaxe

BOOL SetProcessAffinityMask(
  [in] HANDLE    hProcess,
  [in] DWORD_PTR dwProcessAffinityMask
);

Parâmetros

[in] hProcess

Um identificador para o processo cuja máscara de afinidade deve ser definida. Esse identificador deve ter o acesso PROCESS_SET_INFORMATION correto. Para obter mais informações, consulte Direitos de Acesso e Segurança do Processo.

[in] dwProcessAffinityMask

A máscara de afinidade para os threads do processo.

Em um sistema com mais de 64 processadores, a máscara de afinidade deve especificar processadores em um único grupo de processadores.

Valor retornado

Se a função for bem-sucedida, o valor retornado será diferente de zero.

Se a função falhar, o valor retornado será zero. Para obter informações de erro estendidas, chame GetLastError.

Se a máscara de afinidade de processo solicitar um processador que não esteja configurado no sistema, o último código de erro será ERROR_INVALID_PARAMETER.

Em um sistema com mais de 64 processadores, se o processo de chamada contiver threads em mais de um grupo de processadores, o último código de erro será ERROR_INVALID_PARAMETER.

Comentários

Uma máscara de afinidade de processo é um vetor de bits no qual cada bit representa um processador lógico no qual os threads do processo têm permissão para serem executados. O valor da máscara de afinidade de processo deve ser um subconjunto dos valores de máscara de afinidade do sistema obtidos pela função GetProcessAffinityMask . Um processo só tem permissão para ser executado nos processadores configurados em um sistema. Portanto, a máscara de afinidade de processo não pode especificar um bit de 1 bit para um processador quando a máscara de afinidade do sistema especifica um bit de 0 para esse processador.

A afinidade do processo é herdada por qualquer processo filho ou processo local recém-instanciado.

Não chame SetProcessAffinityMask em uma DLL que possa ser chamada por processos diferentes dos seus.

Em um sistema com mais de 64 processadores, a função SetProcessAffinityMask pode ser usada para definir a máscara de afinidade de processo apenas para processos com threads em um único grupo de processadores. Use a função SetThreadAffinityMask para definir a máscara de afinidade para threads individuais em vários grupos. Isso altera efetivamente a atribuição de grupo do processo.

A partir do Windows 11 e do Windows Server 2022, em um sistema com mais de 64 processadores, afinidades de processo e thread abrangem todos os processadores do sistema, em todos os grupos de processadores, por padrão. Em vez de sempre falhar caso o processo de chamada contenha threads em mais de um grupo de processadores, a função SetProcessAffinityMask falhará (retornando zero com ERROR_INVALID_PARAMETER último código de erro) se o processo tiver definido explicitamente a afinidade de um ou mais de seus threads fora do grupo primário do processo.

Requisitos

   
Cliente mínimo com suporte Windows XP [aplicativos da área de trabalho | Aplicativos UWP]
Servidor mínimo com suporte Windows Server 2003 [aplicativos da área de trabalho | Aplicativos UWP]
Plataforma de Destino Windows
Cabeçalho winbase.h (inclua Windows.h)
Biblioteca Kernel32.lib
DLL Kernel32.dll

Confira também

CreateProcess

GetProcessAffinityMask

Vários processadores

Funções de thread e processo

Processos

Grupos de processadores

SetThreadAffinityMask