Función StorPortAllocateHostMemoryBuffer (storport.h)
StorPortAllocateHostMemoryBuffer asigna uno o varios intervalos de memoria físicamente contiguos que se usarán como búfer de memoria de host (HMB).
ULONG StorPortAllocateHostMemoryBuffer(
[in] PVOID HwDeviceExtension,
[in] SIZE_T MinimumBytes,
[in] SIZE_T PreferredBytes,
[in] ULONGLONG UtilizationBytes,
[in] ULONG AlignmentBytes,
[in] PHYSICAL_ADDRESS LowestAcceptableAddress,
[in] PHYSICAL_ADDRESS HighestAcceptableAddress,
[in, optional] PHYSICAL_ADDRESS BoundaryAddressMultiple,
[in, out] PACCESS_RANGE PhysicalAddressRanges,
[in, out] PULONG PhysicalAddressRangeCount
);
[in] HwDeviceExtension
Puntero a la extensión de dispositivo de hardware para el adaptador de bus host (HBA).
[in] MinimumBytes
Cantidad mínima de memoria que será útil para el dispositivo, en bytes. Un valor de 0 indica que cualquier tamaño de memoria hasta el tamaño preferido es aceptable.
[in] PreferredBytes
Cantidad de memoria que prefiere el dispositivo, en bytes. Debe ser un múltiplo del tamaño de página.
[in] UtilizationBytes
Número total de bloques asignados en el dispositivo, en bytes.
[in] AlignmentBytes
Requisito de alineación del búfer de memoria del host del dispositivo.
[in] LowestAcceptableAddress
Dirección física más baja válida para la asignación. Por ejemplo, si el dispositivo solo puede hacer referencia a la memoria física en el intervalo de 8 MB a 16 MB, este valor se establecería en 0x800000 (8 MB).
[in] HighestAcceptableAddress
Dirección física más alta que es válida para la asignación. Por ejemplo, si el dispositivo solo puede hacer referencia a la memoria física inferior a 16 MB, este valor se establecería en 0xFFFFFF (16 MB - 1).
[in, optional] BoundaryAddressMultiple
Dirección física múltiple que esta asignación no debe cruzar. Este parámetro no se usa actualmente y debe establecerse en 0.
[in, out] PhysicalAddressRanges
Matriz de intervalos de direcciones físicos que componen el búfer de memoria del host. El autor de la llamada debe proporcionar una matriz asignada previamente. storPortAllocateHostMemoryBuffer rellenará la matriz con uno o varios intervalos de direcciones físicos.
[in, out] PhysicalAddressRangeCount
Número de entradas de PhysicalAddressRanges. Esta función actualizará este parámetro para indicar cuántos intervalos de direcciones físicos ha rellenado.
storPortAllocateHostMemoryBuffer devuelve uno de los siguientes códigos de estado:
Código devuelto | Descripción |
---|---|
STOR_STATUS_SUCCESS | La matriz de PhysicalAddressRanges contiene uno o varios intervalos de direcciones físicos válidos que representan el búfer de memoria del host. |
STOR_STATUS_INVALID_PARAMETER | Esto podría indicar un valor mínimo mayor que un valor máximo, un tamaño no alineado con páginas o que PhysicalAddressRanges está vacío. |
STOR_STATUS_INSUFFICIENT_RESOURCES | No se pudo asignar el búfer de memoria del host. |
HMB es la memoria que el dispositivo puede usar directamente y exclusivamente. Sin embargo, el dispositivo puede usar esta memoria, pero debe asegurarse de que no haya pérdida de datos o daños en los datos en caso de una eliminación sorpresa o pérdida de energía inesperada.
En función de la directiva de asignación, esta función puede asignar tanto como el tamaño preferido del dispositivo, tan poco como el tamaño mínimo del dispositivo o ninguna memoria en absoluto.
Esta función intentará asignar tan pocos intervalos de direcciones físicamente contiguos como sea posible, pero puede que tenga que usar varios intervalos de direcciones físicos para satisfacer el tamaño de HMB deseado.
El autor de la llamada debe llamar posteriormente a storPortFreeHostMemoryBuffer cuando se realiza con el búfer de memoria del host.
Requisito | Valor |
---|---|
de la plataforma de destino de | Universal |
encabezado de | storport.h (incluya Storport.h) |