KeSetSystemAffinityThreadEx 함수(wdm.h)

KeSetSystemAffinityThreadEx 루틴은 현재 스레드의 시스템 선호도를 설정합니다.

구문

KAFFINITY KeSetSystemAffinityThreadEx(
  [in] KAFFINITY Affinity
);

매개 변수

[in] Affinity

현재 스레드의 새 시스템 선호도를 지정하는 KAFFINITY 형식 변수입니다.

반환 값

KeSetSystemAffinityThreadEx 는 현재 스레드의 이전 시스템 선호도를 반환하거나 0을 반환하여 이전 시스템 선호도가 없음을 나타냅니다.

설명

KeSetSystemAffinityThreadEx 는 현재 스레드의 선호도 마스크를 변경합니다. 선호도 마스크는 스레드를 실행할 수 있는 프로세서 집합을 식별합니다. 성공하면 루틴은 스레드가 이 집합의 프로세서에서 실행되도록 예약합니다.

KeSetSystemAffinityThreadEx의 호출자는 반환 값을 저장하고 나중에 이 값을 KeRevertToUserAffinityThreadEx 루틴에 전달하여 이전 선호도 마스크를 복원해야 합니다.

다중 프로세서 시스템에서 사용자 모드 스레드의 컨텍스트에서 실행되는 커널 모드 드라이버 루틴은 KeSetSystemAffinityThreadEx 를 호출하여 스레드의 선호도 마스크를 일시적으로 변경해야 할 수 있습니다. 루틴이 종료되기 전에 KeRevertToUserAffinityThreadEx 를 호출하여 스레드의 선호도 마스크를 원래 값으로 복원해야 합니다.

사용자 선호도라는 용어는 사용자 모드 스레드의 원래 선호도를 나타냅니다. 커널 모드 드라이버에서 설정한 선호도를 시스템 선호도라고 합니다. KeSetSystemAffinityThreadEx 호출이 스레드의 사용자 선호도를 시스템 선호도로 바꾸는 경우 호출은 0을 반환합니다. 나중에 드라이버는 KeRevertToUserAffinityThreadEx 를 호출하고 이 반환 값(0)을 선호도 값으로 전달하여 사용자 선호도를 복원합니다.

또한 특정 선호도 마스크가 필요한 커널 모드 드라이버 루틴은 다른 선호도 마스크가 필요한 다른 커널 모드 루틴을 호출할 수 있습니다. 각 루틴 은 KeSetSystemAffinityThreadEx 를 호출하여 새 선호도 마스크를 설정한 다음 , KeRevertToUserAffinityThreadEx 를 호출하여 반환하기 전에 이전 선호도 마스크를 복원할 수 있습니다.

KeSetSystemAffinityThreadEx 루틴은 다음 두 가지가 모두 true인 경우에만 현재 스레드의 선호도 마스크를 선호도 값으로 변경합니다.

  • 선호도 값은 유효합니다(즉, 논리 프로세서에 해당하는 마스크 비트만 설정됨).
  • 선호도 값에 지정된 프로세서 중 하나 이상이 활성화되어 있습니다.
이러한 조건 중 하나가 충족되지 않으면 KeSetSystemAffinityThreadEx 에 대한 호출은 적용되지 않습니다.

Windows 7 이상 버전의 Windows는 프로세서 그룹을 지원합니다. 프로세서 그룹에 대한 정보를 처리하도록 설계된 드라이버는 그렇지 않은 KeSetSystemAffinityThreadEx 대신 프로세서 그룹을 지정하는 KeSetSystemGroupAffinityThread 루틴을 사용해야 합니다. 그러나 Windows 7 이상 버전의 Windows에서 KeSetSystemAffinityThreadEx 구현은 프로세서 그룹을 지원하지 않는 이전 버전의 Windows용으로 작성된 드라이버에 대한 호환성을 제공합니다. 이 구현에서 KeSetSystemAffinityThreadEx 는 스레드를 그룹 0에 할당하고 선호도 마스크를 사용하여 스레드를 실행할 수 있는 이 그룹의 논리 프로세서 집합을 지정합니다. 루틴은 이전 그룹 상대 선호도 마스크를 반환하지만 이전 그룹은 반환하지 않습니다.

KeSetSystemAffinityThreadEx가 IRQL <= APC_LEVEL 호출되고 호출이 성공하면 새 선호도 마스크가 즉시 적용됩니다. 호출이 반환되면 호출 스레드가 새 선호도 마스크에 지정된 프로세서에서 이미 실행되고 있습니다. KeSetSystemAffinityThreadEx가 IRQL = DISPATCH_LEVEL 호출되고 호출이 성공하면 호출자가 DISPATCH_LEVEL 아래 IRQL을 낮출 때까지 보류 중인 프로세서 변경이 지연됩니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows Vista 및 이후 버전의 Windows에서 사용할 수 있습니다.
대상 플랫폼 유니버설
헤더 wdm.h(Wdm.h, Ntddk.h, Ntifs.h 포함)
라이브러리 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL(설명 섹션 참조).

추가 정보

KAFFINITY

KeRevertToUserAffinityThreadEx

KeSetSystemAffinityThread

KeSetSystemGroupAffinityThread