Функция SetProcessAffinityMask (winbase.h)
Задает маску сходства процессора для потоков указанного процесса.
Синтаксис
BOOL SetProcessAffinityMask(
[in] HANDLE hProcess,
[in] DWORD_PTR dwProcessAffinityMask
);
Параметры
[in] hProcess
Дескриптор процесса, для которого необходимо задать маску сходства. Этот дескриптор должен иметь право доступа PROCESS_SET_INFORMATION . Дополнительные сведения см. в разделе Обработка прав на безопасность и доступ.
[in] dwProcessAffinityMask
Маска сходства для потоков процесса.
В системе с более чем 64 процессорами маска сходства должна указывать процессоры в одной группе процессоров.
Возвращаемое значение
Если функция выполняется успешно, возвращается ненулевое значение.
Если функция выполняется неудачно, возвращается нулевое значение. Дополнительные сведения об ошибке можно получить, вызвав GetLastError.
Если маска сопоставления процессов запрашивает процессор, который не настроен в системе, последний код ошибки ERROR_INVALID_PARAMETER.
В системе с более чем 64 процессорами, если вызывающий процесс содержит потоки в нескольких группах процессоров, последний код ошибки ERROR_INVALID_PARAMETER.
Комментарии
Маска сходства процессов — это битовый вектор, в котором каждый бит представляет логический процессор, на котором разрешено выполнять потоки процесса. Значение маски сходства процесса должно быть подмножеством значений маски сходства системы, полученных функцией GetProcessAffinityMask . Процесс может выполняться только на процессорах, настроенных в системе. Таким образом, маска сходства процессов не может указать 1 бит для процессора, если системная маска сходства указывает 0 бит для этого процессора.
Сходство процессов наследуется любым дочерним процессом или новым экземпляром локального процесса.
Не вызывайте SetProcessAffinityMask в библиотеке DLL, которую могут вызывать процессы, отличные от ваших.
В системе с более чем 64 процессорами функция SetProcessAffinityMask может использоваться для задания маски сходства процессов только для процессов с потоками в одной группе процессоров. Используйте функцию SetThreadAffinityMask , чтобы задать маску сходства для отдельных потоков в нескольких группах. Это фактически изменяет назначение группы процесса.
Начиная с Windows 11 и Windows Server 2022, в системе с более чем 64 процессорами сходство процессов и потоков по умолчанию охватывает все процессоры в системе во всех группах процессоров. Вместо того чтобы всегда завершалось сбоем в случае, если вызывающий процесс содержит потоки в нескольких группах процессоров, функция SetProcessAffinityMask завершается ошибкой (возвращает ноль с ERROR_INVALID_PARAMETER последним кодом ошибки), если процесс явно установил сходство одного или нескольких своих потоков за пределами основной группы процесса.
Требования
Минимальная версия клиента | Windows XP [классические приложения | Приложения UWP] |
Минимальная версия сервера | Windows Server 2003 [классические приложения | Приложения UWP] |
Целевая платформа | Windows |
Header | winbase.h (включая Windows.h) |
Библиотека | Kernel32.lib |
DLL | Kernel32.dll |