共用方式為


NdisAllocatePacketPoolEx 函式 (ndis.h)

附註 NDIS 5。 x 已被取代,且已被 NDIS 6 取代。 x。 如需新的 NDIS 驅動程式開發,請參閱從 Windows Vista 開始網路驅動程式。 如需移植 NDIS 5 的相關信息。 x 驅動程式至 NDIS 6。 x,請參閱 將 NDIS 5.x 驅動程式移植到 NDIS 6.0

此函式會配置和初始化封包描述元集區的記憶體區塊。

語法

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

參數

[out] Status

指向呼叫端提供的變數,在此變數中,此函式會傳回封包集區配置的狀態。

[out] PoolHandle

指向呼叫端提供的變數,在此變數中,此函式會將句柄傳回封包集區。 此句柄是驅動程式後續呼叫的 NdisXXXPacket 函式的必要參數。

[in] NumberOfDescriptors

指定集區應該包含的封包描述項數目,以供預期正常使用。 可配置的最大 NumberOfDescriptors 為 0xFFFF。 如果嘗試配置超過這個值,NdisAllocatePacketPoolEx 會傳回NDIS_STATUS_RESOURCES 狀態

[in] NumberOfOverflowDescriptors

指定保留給溢位情況的封包描述項數目,也就是當 NumberOfDescriptors 所指定的所有描述項都使用時,。 如果此參數和 NumberOfDescriptors 的總和超過0xFFFF,NdisAllocatePacketPoolEx 會減少以此參數提供的值,讓 numberOfDescriptorsNumberOfOverflowDescriptors 的總 等於 0xFFFF。

[in] ProtocolReservedLength

指定要配置給每個封包描述元之 ProtocolReserved 陣列的位元組數目。 若要在接收指示中使用封包描述項,此參數的大小為 4*大小(PVOID)。

傳回值

沒有

言論

下表顯示此函式的可能傳回值。

地位 描述
NDIS_STATUS_SUCCESS 當驅動程式需要封包描述元來指示最高層級驅動程式或將封包傳送至較低層級驅動程式時,驅動程式可以呼叫 NdisAllocatePacket
NDIS_STATUS_RESOURCES 配置封包集區的嘗試失敗,可能是因為記憶體不足。 此傳回不一定表示後續呼叫將會失敗。 不過,呼叫端可能會嘗試減少 NumberOfDescriptors,然後立即再次呼叫。

成功呼叫 NdisAllocatePacketPoolEx 會傳回封包集區的句柄,呼叫端應該儲存此句柄。 通常,驅動程式接下來會呼叫 NdisAllocatePacket 一或多次使用此句柄來配置一組封包描述元。

NdisAllocatePacketPoolEx 靜態配置足夠的記憶體,以容納 numberOfDescriptors 所指定的封包描述項數目。 可以使用呼叫 NdisAllocatePacket 從集區配置的封包描述元總數,是小於 0xFFFF 或 NumberOfDescriptorsNumberOfOverflowDescriptors 的總和, 原本傳遞至 NdisAllocatePacketPoolEx。 溢位描述元只會在溢位情況下動態配置,也就是說,當指定的 NumberOfDescriptors 已配置且仍在使用中時。

NumberOfDescriptorsNumberOfOverflowDescriptors 的總和,是驅動程式在呼叫 NdisAllocatePacket 之前,必須先呼叫 NdisFreePacket,才能將封包描述元傳回封包集區的免費列表的有效限制。 當尚未配置溢位描述元時,NdisFreePacket 會將封包描述元傳回靜態配置集區。 如果已配置一或多個溢位描述元,NdisFreePacket 會將封包描述元傳回至系統記憶體,而不是傳回集區。

NdisAllocatePacketPoolEx 的呼叫端應該將 numberOfDescriptors 設定為預期正常負載所需的封包描述項數目。 驅動程式應將 numberOfOverflowDescriptors 設定為容納預期尖峰負載所需的額外描述項數目。 如果封包描述項總數(NumberOfDescriptors 加上 numberOfOverflowDescriptors )已從集區配置,則呼叫 NdisAllocatePacket 會傳回NDIS_STATUS_RESOURCES。

當傳送或指示的封包傳回給配置驅動程式時,它可以在呼叫 NdisReinitializePacket 之後重複使用每個封包描述元, 並使用緩衝區描述項鍊結再次設定,或者驅動程式可以呼叫 NdisFreePacket,以將該封包傳回免費清單。 重新初始化和重複使用從封包集區配置的封包比釋放快得多,然後,必須重新配置它們。 在驅動程式使用封包描述元呼叫 NdisReinitializePacket 之前,它必須先將指標儲存至鏈結至封包描述元的緩衝區描述元,因為 NdisReinitializePacket 將緩衝區鏈結的前端設定為 NULL。

當驅動程式不再需要封包描述元時,它會呼叫 [(nf-ndis-ndisfreepacketpool.md) 來釋放配置給 NdisAllocatePacketPoolEx的記憶體。

作系统版本: Windows CE .NET 4.0 和更新版本。

要求

要求 價值
標頭 ndis.h
連結庫 Ndis.lib
IRQL IRQL <= DISPATCH_LEVEL

另請參閱