_RxAllocatePoolWithTag función
_RxAllocatePoolWithTag asigna memoria de un grupo con una etiqueta de cuatro bytes al principio del bloque que se puede usar para ayudar a detectar instancias de la papelera de memoria.
Sintaxis
VOID* _RxAllocatePoolWithTag(
ULONG Type,
ULONG Size,
ULONG Tag,
PSZ FileName,
ULONG LineNumber
);
Parámetros
Tipo
Tipo del grupo que se va a asignar. Este parámetro puede ser uno de los siguientes valores de enumeración para POOL_TYPE:
NonPagedPool
Memoria del sistema no paginable a la que se puede acceder desde cualquier IRQL. La memoria NonPagedPool es un recurso insuficiente y los controladores solo deben asignarlo cuando sea necesario. El sistema solo puede asignar búferes mayores que PAGE_SIZE de NonPagedPool en múltiplo de PAGE_SIZE. Solicitudes de búferes mayores que PAGE_SIZE, pero no una PAGE_SIZE memoria no paginable múltiple.
PagedPool
Memoria del sistema paginable a la que solo se puede asignar y acceder en IRQL < DISPATCH_LEVEL.
Tamaño
Tamaño del bloque de memoria, en bytes, que se va a asignar.
Tag
Etiqueta de cuatro bytes que se va a usar para marcar el búfer asignado. Para obtener una descripción de cómo usar etiquetas, vea ExAllocatePoolWithTag. El valor ASCII de cada carácter de la etiqueta debe estar comprendido entre 0 y 127.
FileName
Puntero al nombre del archivo de origen donde se produjo la asignación de memoria. Este parámetro no se usa actualmente.
LineNumber
Número de línea del archivo de origen donde se produjo la asignación de memoria. Este parámetro no se usa actualmente.
Valor devuelto
RxAllocatePoolWithTag devuelve NULL si no hay memoria suficiente en el grupo libre para satisfacer la solicitud. De lo contrario, la rutina devuelve un puntero a la memoria asignada.
Comentarios
Se recomienda llamar a la macro RxAllocatePoolWithTag en lugar de usar esta rutina directamente. En las compilaciones comerciales, esta macro se define para llamar a ExAllocatePoolWithTag. En las compilaciones activadas, esta macro se define para llamar a _RxAllocatePoolWithTag.
La rutina _RxAllocatePoolWithTag llama a ExAllocatePoolWithTagPriority con la prioridad (importancia de la solicitud) establecida en LowPoolPriority. El sistema puede producir un error en la solicitud de LowPoolPriority cuando se ejecuta bajo en recursos. Un controlador debe estar preparado para recuperarse de un error de asignación al usar esta rutina.
Cuando el sistema asigna un búfer de la memoria del grupo de PAGE_SIZE o superior, alinea el búfer en un límite de página. Las solicitudes de memoria menores que PAGE_SIZE no se alinean necesariamente en los límites de página, pero siempre caben dentro de una sola página y se alinean en un límite de 8 bytes. Cualquier asignación correcta que solicite un bloque mayor que PAGE_SIZE que no sea un múltiplo de PAGE_SIZE desperdicia todos los bytes no usados en la página asignada por última vez.
El sistema asocia la etiqueta de grupo a la memoria asignada. Las herramientas de programación, como WinDbg, pueden mostrar la etiqueta de grupo asociada a cada búfer asignado. El valor de Tag se muestra normalmente en orden inverso. Por ejemplo, si un autor de la llamada pasa "Fred" como una etiqueta, aparecerá como "derF" si se volca la memoria o al realizar el seguimiento del uso de memoria en el depurador.
La memoria asignada con _RxAllocatePoolWithTag debe liberarse llamando a _RxFreePool.
Los autores de llamadas de _RxAllocatePoolWithTag deben ejecutarse en IRQL <= DISPATCH_LEVEL. Un llamador que se ejecuta en DISPATCH_LEVEL debe especificar un valor NonPagedPool para el parámetro Type . Un llamador que se ejecuta en IRQL <= APC_LEVEL puede especificar cualquier valor de POOL_TYPE para el parámetro Type .
Requisitos
Plataforma de destino |
Escritorio |
Encabezado |
Ntrxdef.h (incluye Ntrxdef.h) |
IRQL |
vea la sección Comentarios. |