Compartir a través de


Función KeSetSystemAffinityThreadEx (wdm.h)

La rutina KeSetSystemAffinityThread Ex establece la afinidad del sistema del subproceso actual.

Sintaxis

KAFFINITY KeSetSystemAffinityThreadEx(
  [in] KAFFINITY Affinity
);

Parámetros

[in] Affinity

Variable KAFFINITYcon tipo que especifica la nueva afinidad del sistema del subproceso actual.

Valor devuelto

KeSetSystemAffinityThreadEx devuelve la afinidad del sistema anterior del subproceso actual o cero para indicar que no había ninguna afinidad del sistema anterior.

Observaciones

KeSetSystemAffinityThreadEx cambia la máscara de afinidad del subproceso actual. La máscara de afinidad identifica un conjunto de procesadores en los que se puede ejecutar el subproceso. Si se ejecuta correctamente, la rutina programa el subproceso para que se ejecute en un procesador de este conjunto.

Los autores de llamadas de KeSetSystemAffinityThreadEx deben guardar el valor devuelto y, posteriormente, pasar este valor al KeRevertToUserAffinityThreadEx rutina para restaurar la máscara de afinidad anterior.

En un sistema multiprocesador, una rutina de controlador en modo kernel que se ejecuta en el contexto de un subproceso en modo de usuario podría necesitar llamar a KeSetSystemAffinityThreadEx para cambiar temporalmente la máscara de afinidad del subproceso. Antes de que se cierre la rutina, debe llamar a KeRevertToUserAffinityThreadEx para restaurar la máscara de afinidad del subproceso a su valor original.

El término afinidad de usuario hace referencia a la afinidad original del subproceso en modo de usuario. La afinidad establecida por el controlador en modo kernel se conoce como la afinidad del sistema . Si una llamada a KeSetSystemAffinityThreadEx reemplaza la afinidad de usuario de un subproceso por una afinidad del sistema, la llamada devuelve cero. Más adelante, el controlador restaura la afinidad de usuario llamando a KeRevertToUserAffinityThreadEx y pasando este valor devuelto (cero) como valor Affinity.

Además, una rutina de controlador en modo kernel que requiere una máscara de afinidad determinada podría llamar a otra rutina de modo kernel que requiera una máscara de afinidad diferente. Cada rutina puede llamar a KeSetSystemAffinityThreadEx para establecer una nueva máscara de afinidad y, a continuación, llamar a KeRevertToUserAffinityThreadEx para restaurar la máscara de afinidad anterior antes de volver.

La rutina KeSetSystemAffinityThreadEx cambia la máscara de afinidad del subproceso actual al valor de Affinity solo si se cumplen ambas de las siguientes condiciones:

  • El valor affinity es válido (es decir, solo se establecen los bits de máscara que corresponden a los procesadores lógicos).
  • Al menos uno de los procesadores especificados en el valor affinity está activo.
Si no se cumple alguna de estas condiciones, la llamada a KeSetSystemAffinityThreadEx no tiene ningún efecto.

Windows 7 y versiones posteriores de Windows admiten grupos de procesadores. Los controladores diseñados para controlar la información sobre los grupos de procesadores deben usar la rutina KeSetSystemGroupAffinityThread, que especifica un grupo de procesadores, en lugar de KeSetSystemAffinityThreadEx, que no. Sin embargo, la implementación de KeSetSystemAffinityThreadEx en Windows 7 y versiones posteriores de Windows proporciona compatibilidad con controladores escritos para versiones anteriores de Windows, que no admiten grupos de procesadores. En esta implementación, KeSetSystemAffinityThreadEx asigna el subproceso al grupo 0 y usa la máscara de afinidad para especificar un conjunto de procesadores lógicos en este grupo en el que se puede ejecutar el subproceso. La rutina devuelve la máscara de afinidad relativa al grupo anterior, pero no el grupo anterior.

Si se llama KeSetSystemAffinityThreadEx en IRQL <= APC_LEVEL y la llamada se realiza correctamente, la nueva máscara de afinidad surte efecto inmediatamente. Cuando se devuelve la llamada, el subproceso que realiza la llamada ya se está ejecutando en un procesador especificado en la nueva máscara de afinidad. Si se llama a keSetSystemAffinityThreadEx en IRQL = DISPATCH_LEVEL y la llamada se realiza correctamente, el cambio de procesador pendiente se aplaza hasta que el autor de la llamada reduce el IRQL por debajo de DISPATCH_LEVEL.

Requisitos

Requisito Valor
cliente mínimo admitido Disponible en Windows Vista y versiones posteriores de Windows.
de la plataforma de destino de Universal
encabezado de wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
biblioteca de NtosKrnl.lib
DLL de NtosKrnl.exe
irQL <= DISPATCH_LEVEL (consulte la sección Comentarios).

Consulte también

KAFFINITY

keRevertToUserAffinityThreadEx

KeSetSystemAffinityThread

KeSetSystemGroupAffinityThread