Share via


Grupo especial

La característica Grupo especial configura Windows para solicitar asignaciones de memoria de un grupo de memoria reservado cuando la memoria se asigna con una etiqueta de grupo especificada o está dentro de un intervalo de tamaño especificado.

Abreviatura

Spp

Valor hexadecimal

(Ninguna)

Nombre simbólico

(Ninguna)

Destino

Entrada del Registro en todo el sistema

(Windows Vista y versiones posteriores) Entrada del Registro en todo el sistema, marca de kernel

Selección de una etiqueta de grupo

Al solicitar un grupo especial para una etiqueta de grupo determinada, asegúrese de que el controlador u otro programa en modo kernel usa una etiqueta de grupo única.

Además, al crear una etiqueta de grupo (por ejemplo, mediante ExAllocatePoolWithTag), considere la posibilidad de escribir los caracteres de etiqueta en orden inverso. Por ejemplo, si la etiqueta es Fred, considere la posibilidad de escribirla como derF (0x64657246). Las etiquetas de grupo se almacenan en el Registro y se muestran en el depurador y otras herramientas en orden inverso (lower endian). Si los escribe en orden inverso, se muestran en orden hacia delante (0x46726564)

Si sospecha que el controlador consume todo el grupo especial, considere la posibilidad de usar varias etiquetas de grupo en el código. A continuación, puede probar el controlador varias veces, asignando un grupo especial a una etiqueta de grupo en cada prueba.

Además, seleccione una etiqueta de grupo con un valor hexadecimal mayor que el tamaño de página del sistema. Para el código del modo kernel, si escribe una etiqueta de grupo que tiene un valor menor que PAGE_SIZE, Gflags solicita un grupo especial para todas las asignaciones cuyo tamaño se encuentra dentro del intervalo correspondiente y solicita un grupo especial para las asignaciones con una etiqueta de grupo equivalente. Por ejemplo, si selecciona un tamaño de 30, se usará un grupo especial para todas las asignaciones entre 17 y 32 bytes de tamaño y para las asignaciones con la etiqueta pool 0x0030.

Selección de un tamaño de asignación

Use las instrucciones siguientes para seleccionar un tamaño de asignación para la característica Grupo especial.

En un equipo con un procesador x86, PAGE_SIZE se 0x1000 y los intervalos de tamaño de asignación tienen una longitud de 8 bytes. Para configurar la característica Grupo especial para todas las asignaciones con tamaños en este intervalo, escriba un número igual al máximo de este intervalo más 8. (Este número siempre es un múltiplo de 8). En la tabla siguiente se muestran estos valores:

Intervalo de tamaño Escriba este número.

De 1 a 8 bytes

10 (decimal 16)

De 9 a 16 bytes

18 (decimal 24)

De 17 a 24 bytes

20 (decimal 32)

...

...

0xFE9 a 0xFF0 bytes

FF8 (decimal 4088)

En un equipo con un procesador AMD x86-64, PAGE_SIZE es 0x1000 y los intervalos de tamaño de asignación tienen una longitud de 16 bytes. Para configurar la característica Grupo especial para todas las asignaciones con tamaños en este intervalo, escriba un número igual al máximo de este intervalo más 16. (Este número siempre es un múltiplo de 16). En la tabla siguiente se muestran estos valores:

Intervalo de tamaño Escriba este número.

De 1 a 16 bytes

20 (decimal 32)

De 17 a 32 bytes

30 (decimal 48)

De 33 a 48 bytes

40 (decimal 64)

...

...

0xFD1 a 0xFE0 bytes

FF0 (decimal 4080)

En un equipo con cualquier procesador, puede usar un asterisco ( * ) o 0x2A (decimal 42) para configurar la característica Grupo especial para todas las asignaciones de memoria en el sistema.

Comentarios

Para obtener información sobre cómo configurar la característica Grupo especial en el cuadro de diálogo Marcas globales, vea Configurar un grupo especial. Para obtener información sobre cómo configurar la característica Grupo especial en la línea de comandos, vea Comandos GFlags. Para obtener un ejemplo, vea Ejemplo 14: Configuración del grupo especial.

La característica Grupo especial de Gflags dirige a Windows para solicitar asignaciones de memoria de un grupo de memoria reservado cuando la memoria se asigna con una etiqueta de grupo especificada o está dentro de un intervalo de tamaño especificado. Para solicitar un grupo especial para todas las asignaciones de un controlador determinado, use Comprobador de controladores. Para obtener más información, consulta el tema "Grupo especial" en la sección "Comprobador de controladores" del Kit de controladores de Windows (WDK).

Las características especiales del grupo de servidores de Gflags y el Comprobador de controladores le ayudan a detectar e identificar el origen de errores en el uso del grupo de kernel, como escribir más allá del espacio de memoria asignado o hacer referencia a la memoria que ya se ha liberado.

No se cumplen todas las solicitudes de grupo especiales. Cada asignación del grupo especial usa una página de memoria física no paginable y dos páginas del espacio de direcciones virtuales. Si se agota el grupo especial, la memoria se asigna desde el grupo estándar hasta que el grupo especial vuelva a estar disponible. Cuando se rellena una solicitud de grupo especial del grupo estándar, la función solicitante devuelve un estado correcto. No devuelve un error, porque la asignación se ha realizado correctamente, aunque no se haya rellenado del grupo especial.

El tamaño del grupo especial aumenta con la cantidad de memoria física en el sistema; idealmente, debe ser al menos 1 Gigabyte (GB). En las máquinas x86, dado que se consume espacio virtual (además de físico), no use la opción de arranque /3GB al usar un grupo especial. También es una buena idea aumentar las cantidades mínimas o máximas del archivo de página por un factor de dos o tres.

También puede configurar la característica Grupo especial para alinear la asignación de memoria para detectar referencias a la memoria que preceden a la asignación ("infraejecutaciones") o referencias a la memoria más allá de la asignación ("saturaciones"). Esta característica solo está disponible en el cuadro de diálogo Marcas globales en todas las versiones de Windows. Para obtener más información, consulte Detección de saturaciones y subejecutaciones.

En Windows Vista y versiones posteriores de Windows, puedes configurar la característica Grupo especial como una configuración del Registro que requiere un reinicio, pero sigue siendo efectiva hasta que la cambies, o como una configuración de marca de kernel que no requiera un reinicio, pero solo es efectiva hasta que reinicies o apagues Windows. En versiones anteriores de Windows, el grupo especial solo está disponible como configuración del Registro.

En Windows Vista y versiones posteriores de Windows, puede configurar la característica Grupo especial mediante el cuadro de diálogo Marcas globales o en la línea de comandos. En la versión anterior de Windows, esta característica solo está disponible en el cuadro de diálogo Marcas globales.