Freigeben über


StorPortAllocateHostMemoryBuffer-Funktion (storport.h)

StorPortAllocateHostMemoryBuffer einem oder mehreren Bereichen von physisch zusammenhängendem Speicher zugeordnet wird, der als Hostspeicherpuffer (Host Memory Buffer, HMB) verwendet werden soll.

Syntax

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
);

Parameter

[in] HwDeviceExtension

Ein Zeiger auf die Hardwaregeräteerweiterung für den Hostbusadapter (HBA).

[in] MinimumBytes

Die minimale Menge an Arbeitsspeicher, die für das Gerät in Byte nützlich sein wird. Ein Wert von 0 gibt an, dass jede Größe des Arbeitsspeichers bis zur bevorzugten Größe akzeptabel ist.

[in] PreferredBytes

Der vom Gerät bevorzugte Arbeitsspeicher in Byte. Dies muss ein Vielfaches des Seitenformats sein.

[in] UtilizationBytes

Die Gesamtanzahl der auf dem Gerät zugewiesenen Blöcke in Byte.

[in] AlignmentBytes

Die Ausrichtung des Hostspeicherpuffers vom Gerät.

[in] LowestAcceptableAddress

Die niedrigste physische Adresse, die für die Zuordnung gültig ist. Wenn das Gerät beispielsweise nur auf physischen Speicher im Bereich von 8 MB bis 16 MB verweisen kann, wird dieser Wert auf 0x800000 (8 MB) festgelegt.

[in] HighestAcceptableAddress

Die höchste physische Adresse, die für die Zuordnung gültig ist. Wenn das Gerät beispielsweise nur auf physischen Speicher unter 16 MB verweisen kann, wird dieser Wert auf 0xFFFFFF (16 MB - 1) festgelegt.

[in, optional] BoundaryAddressMultiple

Die physische Adresse, die von dieser Zuordnung nicht überschritten werden darf. Dieser Parameter wird derzeit nicht verwendet und muss auf 0 festgelegt werden.

[in, out] PhysicalAddressRanges

Ein Array von physischen Adressbereichen, aus denen der Hostspeicherpuffer besteht. Der Aufrufer sollte ein vorab zugeordnetes Array bereitstellen. StorPortAllocateHostMemoryBuffer füllt das Array mit mindestens einem physischen Adressbereich aus.

[in, out] PhysicalAddressRangeCount

Die Anzahl der Einträge in PhysicalAddressRanges. Diese Funktion aktualisiert diesen Parameter, um anzugeben, wie viele physische Adressbereiche es ausgefüllt hat.

Rückgabewert

StorPortAllocateHostMemoryBuffer einen der folgenden Statuscodes zurück:

Rückgabecode Beschreibung
STOR_STATUS_SUCCESS Das PhysicalAddressRanges Array enthält mindestens einen gültigen physischen Adressbereich, der den Hostspeicherpuffer darstellt.
STOR_STATUS_INVALID_PARAMETER Dies könnte einen Minimalwert angeben, der größer als ein Maximalwert ist, eine nicht seitenausgeglichene Größe oder dass PhysicalAddressRanges leer ist.
STOR_STATUS_INSUFFICIENT_RESOURCES Der Hostspeicherpuffer konnte nicht zugeordnet werden.

Bemerkungen

HMB ist Speicher, den das Gerät direkt und ausschließlich verwenden kann. Das Gerät kann diesen Speicher jedoch verwenden, aber es muss sichergestellt werden, dass im Falle einer Überraschungsentfernung oder unerwartetem Stromausfall kein Datenverlust oder Datenbeschädigung vorhanden ist.

Je nach Zuweisungsrichtlinie kann diese Funktion so viel zuordnen wie die bevorzugte Größe des Geräts, so wenig wie die Mindestgröße des Geräts oder überhaupt kein Arbeitsspeicher.

Diese Funktion versucht so wenig physische zusammenhängende Adressbereiche wie möglich zuzuordnen, muss jedoch möglicherweise mehrere physische Adressbereiche verwenden, um die gewünschte HMB-Größe zu erfüllen.

Anschließend sollte der Aufrufer StorPortFreeHostMemoryBuffer aufrufen, wenn er mit dem Hostspeicherpuffer abgeschlossen ist.

Anforderungen

Anforderung Wert
Zielplattform- Universal
Header- storport.h (include Storport.h)

Siehe auch

StorPortFreeHostMemoryBuffer