Función RtlAllocateHeap (ntifs.h)
La rutina RtlAllocateHeap asigna un bloque de memoria de un montón.
Sintaxis
NTSYSAPI PVOID RtlAllocateHeap(
[in] PVOID HeapHandle,
[in, optional] ULONG Flags,
[in] SIZE_T Size
);
Parámetros
[in] HeapHandle
Identificador de un montón privado desde el que se asignará la memoria. Este parámetro es un identificador devuelto por una llamada correcta a RtlCreateHeap .
[in, optional] Flags
Aspectos controlables de la asignación del montón. Si se especifica cualquiera de estos valores, se invalidará el valor correspondiente especificado cuando se creó el montón con RtlCreateHeap. Este parámetro puede ser uno o varios de los valores siguientes.
| Marca | Significado |
|---|---|
| HEAP_GENERATE_EXCEPTIONS | El sistema producirá una excepción para indicar un error de función, como una condición de memoria fuera de memoria, en lugar de devolver NULL. |
| HEAP_NO_SERIALIZE | No se usará la exclusión mutua mientras RtlAllocateHeap acceda al montón. |
| HEAP_ZERO_MEMORY | La memoria asignada se inicializará en cero. De lo contrario, la memoria no se inicializa en cero. |
[in] Size
Número de bytes que se asignarán. Si el montón, especificado por el parámetro HeapHandle , es un montón no crecimiento, Size debe ser menor o igual que el umbral de memoria virtual del montón. (Para obtener más información, vea el miembro VirtualMemoryThreshold del parámetro Parameters en RtlCreateHeap).
Valor devuelto
Si la llamada a RtlAllocateHeap se realiza correctamente, el valor devuelto es un puntero al bloque recién asignado. El valor devuelto es NULL si se ha fallado la asignación.
Observaciones
RtlAllocateHeap asigna un bloque de memoria del tamaño especificado del montón especificado.
Para liberar un bloque de memoria asignado por RtlAllocateHeap, llame a RtlFreeHeap.
La memoria asignada por RtlAllocateHeap no se puede mover. Puesto que la memoria no se puede mover, es posible que el montón se fragmente.
La serialización garantiza la exclusión mutua cuando dos o más subprocesos intentan asignar o liberar bloques simultáneamente del mismo montón. La serialización tiene un pequeño costo de rendimiento, pero se debe usar cada vez que varios subprocesos asignan y liberan memoria del mismo montón. Al establecer HEAP_NO_SERIALIZE valor, se elimina la exclusión mutua en el montón. Sin la serialización, dos o más subprocesos que usan el mismo identificador de montón podrían intentar asignar o liberar memoria simultáneamente, lo que probablemente provocaría daños en el montón. Por HEAP_NO_SERIALIZE, el valor de HEAP_NO_SERIALIZE se puede usar de forma segura solo en las situaciones siguientes:
El proceso solo tiene un subproceso.
El proceso tiene varios subprocesos, pero solo un subproceso llama a las funciones del montón para un montón específico.
El proceso tiene varios subprocesos y la aplicación proporciona su propio mecanismo para la exclusión mutua en un montón específico.
Nota
Para protegerse contra una infracción de acceso, use el control estructurado de excepciones para proteger cualquier código que escriba en un montón o que lea desde él. Para obtener más información sobre el control estructurado de excepciones con accesos a memoria, vea Control de excepciones.
Requisitos
| Cliente mínimo compatible | Esta rutina está disponible en Microsoft Windows XP y versiones posteriores. |
| Plataforma de destino | Universal |
| Encabezado | ntifs.h (incluir Ntifs.h) |
| Library | NtosKrnl.lib |
| Archivo DLL | NtosKrnl.exe |
| IRQL | < DISPATCH_LEVEL |
Consulte también
Comentarios
Enviar y ver comentarios de