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 de una llamada correcta a RtlCreateHeap .
[in, optional] Flags
Aspectos controlables de la asignación del montón. Al especificar 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 más de los siguientes valores.
Marca | Significado |
---|---|
HEAP_GENERATE_EXCEPTIONS | El sistema generará una excepción para indicar un error de función, como una condición de memoria insuficiente, en lugar de devolver NULL. |
HEAP_NO_SERIALIZE | La exclusión mutua no se usará mientras RtlAllocateHeap tiene acceso 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 van a asignar. 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 produjo un error en la asignación.
Comentarios
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 es extraíble. Puesto que la memoria no es extraíble, 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. Hay un pequeño costo de rendimiento para la serialización, pero debe usarse siempre que varios subprocesos asignen y liberen memoria del mismo montón. Establecer el valor de HEAP_NO_SERIALIZE elimina la exclusión mutua en el montón. Sin 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 causaría daños en el montón. Por lo tanto, el valor de HEAP_NO_SERIALIZE solo se puede usar de forma segura 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 a 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 o lea desde un montón. Para obtener más información sobre el control estructurado de excepciones con accesos a memoria, consulte Control de excepciones.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows XP |
Plataforma de destino | Universal |
Encabezado | ntifs.h (incluya Ntifs.h) |
Library | NtosKrnl.lib |
Archivo DLL | NtosKrnl.exe |
IRQL | < DISPATCH_LEVEL |