Rutinas gratuitas y asignación de grupos
RDBSS proporciona una serie de rutinas que se usarán para la asignación de grupos. Normalmente, estas rutinas se llaman mediante macros, no llamando directamente a estas rutinas. Las macros controlan automáticamente las diferencias entre las compilaciones comerciales y comprobadas.
En una compilación comprobada, estas rutinas se diseñaron para agregar contenedores alrededor de la asignación normal del kernel y rutinas libres. Estos contenedores para la asignación de grupos y las rutinas gratuitas proporcionan información adicional de depuración y llaman a un conjunto de rutinas que realizan varios tipos de comprobación y protección antes de llamar a la asignación del grupo de kernel y rutinas gratuitas. Sin embargo, estas características no se implementan actualmente en estas rutinas gratuitas y de asignación, pero se pueden agregar en futuras versiones.
En una compilación gratuita, estas rutinas se convierten en llamadas directas a la asignación del kernel y rutinas gratuitas, ExAllocatePoolWithTag y ExFreePool.
En la tabla siguiente se enumeran las rutinas gratuitas y la asignación de grupos de RDBSS.
Rutina | Descripción |
---|---|
Esta rutina asigna memoria de un grupo con una etiqueta de cuatro bytes al principio del bloque que puede ayudar a detectar problemas de memoria. Se recomienda llamar a la macro RxAllocatePoolWithTag en lugar de usar esta rutina directamente. |
|
Esta rutina comprueba un bloque de memoria para una firma de encabezado RX_POOL_HEADER especial. Tenga en cuenta que un controlador minidirector de red tendría que agregar este bloque de firma especial a la memoria asignada para poder usar la rutina. Esta rutina no debe usarse porque no se ha implementado este bloque de encabezado especial. |
|
Esta rutina libera un grupo de memoria. Se recomienda llamar a la macro RxFreePool en lugar de usar esta rutina directamente. |
Una serie de macros, que se definen en el archivo de encabezado ntrxdef.h , llaman a estas rutinas. En lugar de llamar directamente a las rutinas enumeradas en la tabla anterior, normalmente se usan las siguientes macros.
Macro | Descripción |
---|---|
RxAllocatePoolWithTag (tipo, tamaño, etiqueta) |
En las compilaciones activadas, esta macro asigna memoria de un grupo con una etiqueta de cuatro bytes al principio del bloque que puede ayudar a detectar instancias de recolección de memoria. En las compilaciones comerciales, esta macro se convierte en una llamada directa a ExAllocatePoolWithTag. |
RxCheckMemoryBlock (ptr) |
En las compilaciones activadas, esta macro comprueba un bloque de memoria para una firma de encabezado RX_POOL_HEADER especial. En las compilaciones comerciales, esta macro no hace nada. |
RxFreePool (ptr) |
En las compilaciones activadas, esta macro libera un grupo de memoria. En las compilaciones comerciales, esta macro se convierte en una llamada directa a ExFreePool. |
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de