Función KeRevertToUserGroupAffinityThread (wdm.h)

El KeRevertToUserGroupAffinityThread rutina restaura la afinidad de grupo del subproceso que llama a su valor original en el momento en que se creó el subproceso.

Sintaxis

C++
void KeRevertToUserGroupAffinityThread(
  [in] PGROUP_AFFINITY PreviousAffinity
);

Parámetros

[in] PreviousAffinity

Puntero a la afinidad de grupo que se va a restaurar. Este parámetro apunta a una estructura de GROUP_AFFINITY que contiene un número de grupo y una máscara de afinidad. La máscara de afinidad especifica el conjunto de procesadores lógicos en los que se puede ejecutar el subproceso de usuario.

Valor devuelto

Ninguno

Observaciones

Esta rutina cambia el número de grupo y la máscara de afinidad relativa al grupo del subproceso que llama. El número de grupo y la máscara de afinidad identifican 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.

El parámetro PreviousAffinity apunta a una estructura de GROUP_AFFINITY que especifica el nuevo número de grupo (miembro Group) y la máscara de afinidad (Mask miembro) para el subproceso. Si PreviousAffinity:>Mask es distinto de cero, KeRevertToUserGroupAffinityThread establece el número de grupo y la máscara de afinidad del subproceso que realiza la llamada a los valores de la estructura. Si PreviousAffinity:>Mask es cero, la rutina restaura el número de grupo y la máscara de afinidad a sus valores originales en el momento en que se inicializó el subproceso.

Un proceso puede tener afinidad para más de un grupo a la vez. Sin embargo, un subproceso solo se puede asignar a un grupo en cualquier momento y ese grupo siempre está en la afinidad del proceso del subproceso.

Un subproceso puede cambiar el grupo al que se asigna llamando a la rutina KeSetSystemGroupAffinityThread. Después de una o varias llamadas a KeSetSystemGroupAffinityThread, el subproceso puede restaurar la afinidad de grupo original que tenía cuando se creó el subproceso llamando a KeRevertToUserGroupAffinityThread.

Una vez creado el subproceso, una llamada a KeRevertToUserGroupAffinityThread no tiene ningún efecto (es decir, el número de grupo y la máscara de afinidad del subproceso permanecen sin cambios), a menos que el subproceso llame primero a KeSetSystemGroupAffinityThread. Después de una llamada a KeRevertToUserGroupAffinityThread, una segunda llamada a KeRevertToUserGroupAffinityThread no tiene ningún efecto a menos que el subproceso llame primero a KeSetSystemGroupAffinityThread.

La rutina cambia el número de grupo y la máscara de afinidad a los valores especificados en *PreviousAffinity solo si se cumple lo siguiente:

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

Una rutina relacionada, KeRevertToUserAffinityThreadEx, cambia la máscara de afinidad del subproceso de llamada, pero esta rutina, a diferencia de KeRevertToUserGroupAffinityThread, no acepta un número de grupo como parámetro de entrada. En Windows 7 y versiones posteriores del sistema operativo Windows, KeRevertToUserAffinityThreadEx supone que la máscara de afinidad hace referencia a los procesadores del grupo 0, que es compatible con el comportamiento de esta rutina en versiones anteriores de Windows que no admiten grupos. Este comportamiento garantiza que los controladores existentes que llaman a KeRevertToUserAffinityThreadEx y que no usen características orientadas a grupos se ejecutarán correctamente en sistemas multiprocesador que tengan dos o más grupos. Sin embargo, los controladores que usan las características orientadas a grupos en Windows 7 y versiones posteriores del sistema operativo Windows deben llamar a KeRevertToUserGroupAffinityThread en lugar de KeRevertToUserAffinityThreadEx.

Si keRevertToUserGroupAffinityThread se llama en IRQL <= APC_LEVEL y la llamada se realiza correctamente, la nueva afinidad de grupo (revertida) 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 afinidad de grupo. Si se llama KeRevertToUserGroupAffinityThread 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 7 y versiones posteriores de Windows.
de la plataforma de destino de Universal
encabezado de wdm.h (include Ntddk.h, Wdm.h, Ntddk.h)
biblioteca de NtosKrnl.lib
DLL de NtosKrnl.exe
irQL <= DISPATCH_LEVEL (consulte la sección Comentarios).

Consulte también

GROUP_AFFINITY

keRevertToUserAffinityThreadEx

KeSetSystemGroupAffinityThread