Compartir a través de


Función StorPortSetSystemGroupAffinityThread (storport.h)

StorPortSetSystemGroupAffinityThread cambia el número de grupo y la máscara de afinidad del subproceso que llama.

Sintaxis

ULONG StorPortSetSystemGroupAffinityThread(
  [in]           PVOID                HwDeviceExtension,
  [in/optional]  PVOID                ThreadContext,
  [in]           PSTOR_GROUP_AFFINITY Affinity,
  [out/optional] PSTOR_GROUP_AFFINITY PreviousAffinity
);

Parámetros

[in] HwDeviceExtension

Puntero a la extensión de dispositivo de hardware del miniporte.

[in/optional] ThreadContext

Puntero al contexto del subproceso recibido en una llamada anterior a StorPortCreateSystemThread.

[in] Affinity

Puntero a una estructura de STOR_GROUP_AFFINITY asignada por el autor de la llamada que especifica el nuevo número de grupo y la máscara de afinidad relativa al grupo para el subproceso de llamada.

[out/optional] PreviousAffinity

Puntero a una estructura de STOR_GROUP_AFFINITY en la que esta rutina escribe el número de grupo y la máscara de afinidad para el subproceso que llama antes de la llamada. Este parámetro es opcional y puede ser NULL.

Valor devuelto

StorPortSetSystemGroupAffinityThread devuelve uno de los siguientes valores:

Código devuelto Descripción
STOR_STATUS_SUCCESS La afinidad de grupo especificada se estableció correctamente.
STOR_STATUS_INVALID_PARAMETER Uno o varios de los parámetros proporcionados no son válidos.
STOR_STATUS_UNSUCCESSFUL Se devuelve por otros motivos internos del sistema.

Comentarios

Un miniport puede llamar a StorPortSetSystemGroupAffinityThread para cambiar el número de grupo y la máscara de afinidad de nivel de grupo del subproceso que llama.

El número de grupo y la máscara de afinidad en la estructura de STOR_GROUP_AFFINITY a la que apunta Affinity identifican un conjunto de procesadores en los que se puede ejecutar el subproceso. Si se ejecuta correctamente, StorPortSetSystemGroupAffinityThread programa el subproceso para que se ejecute en un procesador de este conjunto.

Si el parámetro PreviousAffinity no es NULL, StorPortSetSystemGroupAffinityThread guarda información sobre la afinidad de grupo anterior, que estaba en vigor al principio de la llamada, en la estructura de STOR_GROUP_AFFINITY a la que apunta PreviousAffinity . Para restaurar la afinidad de subproceso anterior, el autor de la llamada puede proporcionar el puntero a esta estructura como parámetro de entrada a la rutina StorPortRevertToUserGroupAffinityThread .

Si una minipuerta llama a esta función para cambiar temporalmente la afinidad de grupo del subproceso, debe llamar a StorPortRevertToUserGroupAffinityThread para revertir la afinidad de subproceso a su valor original antes de que se cierre el subproceso.

Un subproceso solo se puede asignar a una afinidad de grupo en cualquier momento. Ese grupo siempre está en la afinidad del proceso del subproceso. Un subproceso puede cambiar el grupo al que está asignado llamando a esta rutina.

StorPortSetSystemGroupAffinityThread cambia el número de grupo y la máscara de afinidad a los valores especificados en Affinity 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 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, el número de grupo y la máscara de afinidad del subproceso permanecen sin cambios. Si PreviousAffinity no es NULL, la rutina escribe cero en el número de grupo y la máscara de afinidad en PreviousAffinity.

Antes de que la nueva máscara de afinidad en Affinity surta efecto, StorPortSetSystemGroupAffinityThread quita (establece en cero) los bits de máscara de afinidad que corresponden a los procesadores que no están activos actualmente. En una llamada posterior a StorPortSetSystemGroupAffinityThread , el valor que la rutina escribe en PreviousAffinity podría contener una máscara de afinidad que se ha modificado de esta manera.

Si se llama a StorPortSetSystemGroupAffinityThread en IRQL <= APC_LEVEL y la llamada se realiza correctamente, la nueva afinidad de grupo surte efecto inmediatamente. Cuando la llamada vuelve, el subproceso que realiza la llamada ya se está ejecutando en un procesador especificado en la nueva afinidad de grupo. Si se llama a StorPortSetSystemGroupAffinityThread 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 Value
Servidor mínimo compatible Windows Server 2022
Encabezado storport.h
IRQL <= DISPATCH_LEVEL

Consulte también

**KeSetSystemGroupAffinityThread **

STOR_GROUP_AFFINITY

StorPortCreateSystemThread

StorPortGetCurrentIrql

StorPortRevertToUserGroupAffinityThread