Freigeben über


NdisAllocatePacketPoolEx-Funktion (ndis.h)

Hinweis NDIS 5. x ist veraltet und wird von NDIS 6 ersetzt. x. Informationen zur neuen NDIS-Treiberentwicklung finden Sie unter Netzwerktreiber ab Windows Vista. Informationen zum Portieren von NDIS 5. x Treiber auf NDIS 6. xfinden Sie unter Portieren von NDIS 5.x-Treibern zu NDIS 6.0.

Diese Funktion reserviert und initialisiert einen Speicherblock für einen Pool von Paketdeskriptoren.

Syntax

void NdisAllocatePacketPoolEx(
  [out] PNDIS_STATUS Status,
  [out] PNDIS_HANDLE PoolHandle,
  [in]  UINT         NumberOfDescriptors,
  [in]  UINT         NumberOfOverflowDescriptors,
  [in]  UINT         ProtocolReservedLength
);

Parameter

[out] Status

Verweist auf eine vom Aufrufer bereitgestellte Variable, in der diese Funktion den Status der Paketpoolzuordnung zurückgibt.

[out] PoolHandle

Verweist auf eine vom Aufrufer bereitgestellte Variable, in der diese Funktion ein Handle an den Paketpool zurückgibt. Dieses Handle ist ein erforderlicher Parameter für die NdisXXXPacket Funktionen, die der Treiber anschließend aufruft.

[in] NumberOfDescriptors

Gibt die Anzahl der Paketdeskriptoren an, die der Pool für die erwartete normale Verwendung enthalten soll. Die NumberOfDescriptors, die zugewiesen werden können, ist 0xFFFF. Wenn versucht wird, mehr zuzuweisen, gibt NdisAllocatePacketPoolEx einen Status- von NDIS_STATUS_RESOURCES zurück.

[in] NumberOfOverflowDescriptors

Gibt die Anzahl der Paketdeskriptoren an, die für eine Überlaufsituation reserviert sind, d. h., wenn alle von NumberOfDescriptors angegebenen Deskriptoren verwendet werden, verwendet werden. Wenn die Summe dieses Parameters und NumberOfDescriptors 0xFFFF überschreitet, reduziert NdisAllocatePacketPoolEx den als parameter angegebenen Wert, sodass die Summe NumberOfDescriptors und NumberOfOverflowDescriptors entspricht 0xFFFF.

[in] ProtocolReservedLength

Gibt die Anzahl der Bytes an, die für das ProtocolReserved Array jedes Paketdeskriptors zugeordnet werden sollen. Für Paketdeskriptoren, die in Empfangsanzeigen verwendet werden sollen, beträgt dieser Parameter 4*Größe (PVOID).

Rückgabewert

Nichts

Bemerkungen

In der folgenden Tabelle sind die möglichen Rückgabewerte für diese Funktion aufgeführt.

Status Beschreibung
NDIS_STATUS_SUCCESS Der Treiber kann Aufrufe an NdisAllocatePacket durchführen, wenn es Paketdeskriptoren benötigt, um Hinweise auf Treiber höherer Ebene zu machen oder Pakete an Treiber niedrigerer Ebene zu senden.
NDIS_STATUS_RESOURCES Der Versuch, paketpools zuzuordnen, ist möglicherweise aufgrund eines Speichermangels fehlgeschlagen. Diese Rückgabe bedeutet nicht unbedingt, dass ein nachfolgender Aufruf fehlschlägt. Der Aufrufer kann jedoch versuchen, die NumberOfDescriptors zu verringern und sofort erneut aufzurufen.

Ein erfolgreicher Aufruf von NdisAllocatePacketPoolEx gibt ein Handle an den Paketpool zurück, den der Aufrufer speichern soll. Normalerweise ruft der Treiber NdisAllocatePacket mindestens ein Mal mit diesem Handle auf, um eine Reihe von Paketdeskriptoren zuzuweisen.

NdisAllocatePacketPoolEx nur genügend Arbeitsspeicher zuweist, um die Anzahl der paketdeskriptoren aufzunehmen, die von NumberOfDescriptorsangegeben werden. Die Gesamtanzahl der Paketdeskriptoren, die aus dem Pool mit Aufrufen von NdisAllocatePacket zugewiesen werden können, ist der geringere 0xFFFF oder die Summe der NumberOfDescriptors und NumberOfOverflowDescriptors ursprünglich an NdisAllocatePacketPoolExübergeben. Überlaufdeskriptoren werden dynamisch nur während einer Überlaufsituation zugeordnet, d. h., wenn die angegebenen NumberOfDescriptors bereits zugewiesen wurden und noch verwendet werden.

Die Summe der NumberOfDescriptors und NumberOfOverflowDescriptors ist der effektive Grenzwert für die Anzahl der Aufrufe NdisAllocatePacket-, bevor NdisFreePacket aufgerufen werden muss, um einen Paketdeskriptor an die kostenlose Liste für den Paketpool zurückzugeben. Wenn noch kein Überlaufdeskriptor zugewiesen wurde, gibt NdisFreePacket den Paketdeskriptor an den statisch zugeordneten Pool zurück. Wenn mindestens ein Überlaufdeskriptor bereits zugewiesen wurde, gibt NdisFreePacket den Paketdeskriptor an den Systemspeicher zurück , nicht an den Pool.

Der Aufrufer von NdisAllocatePacketPoolEx- sollte NumberOfDescriptors auf die Anzahl der Paketbeschreibungen festlegen, die für erwartete normale Lasten erforderlich sind. Der Treiber sollte NumberOfOverflowDescriptors auf die Anzahl zusätzlicher Deskriptoren festlegen, die erforderlich sind, um die erwarteten Spitzenlasten zu berücksichtigen. Wenn die gesamt mögliche Anzahl von Paketdeskriptoren (NumberOfDescriptors plus NumberOfOverflowDescriptors) vom Pool zugewiesen wurde, wird ein Aufruf von NdisAllocatePacket NDIS_STATUS_RESOURCES zurückgegeben.

Wenn pakete gesendet oder angegeben an den zugeordneten Treiber zurückgegeben werden, kann er jeden Paketdeskriptor nach dem Aufrufen NdisReinitializePacket wiederverwenden und erneut mit einer Kette von Pufferdeskriptoren einrichten, oder der Treiber kann NdisFreePacket aufrufen, um dieses Paket an die kostenlose Liste zurückzugeben. Das Erneute Initialisieren und Wiederverwenden von Paketen, die aus dem Paketpool zugewiesen werden, ist viel schneller als freizugeben und muss sie dann erneut neu zuordnen. Bevor ein Treiber NdisReinitializePacket mit einem Paketdeskriptor aufruft, muss er die Zeiger in Pufferdeskriptoren speichern, die an den Paketdeskriptor verkettet sind, da NdisReinitializePacket den Kopf der Pufferkette auf NULL festlegt.

Wenn ein Treiber keine Paketdeskriptoren mehr benötigt, ruft er [(nf-ndis-ndisfreepacketpool.md) auf, um den Speicher freizugeben, den er NdisAllocatePacketPoolExzugewiesen hat.

Betriebssystemversionen: Windows CE .NET 4.0 und höher.

Anforderungen

Anforderung Wert
Header- ndis.h
Library Ndis.lib
IRQL- IRQL-<= DISPATCH_LEVEL

Siehe auch