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 |