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 direito de acesso PROCESS_SET_INFORMATION . 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 podem ser 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 1 bit para um processador quando a máscara de afinidade do sistema especifica um 0 bit para esse processador.

A afinidade de 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, as afinidades de processo e thread abrangem todos os processadores no 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 (incluir 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