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

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

[in] NumberOfDescriptors

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

[in] NumberOfOverflowDescriptors

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

[in] ProtocolReservedLength

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

傳回值

備註

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

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

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

NdisAllocatePacketPoolEx 以靜態方式只配置足夠的記憶體,以容納 NumberOfDescriptors 所指定的封包描述元數目。 可從集區配置呼叫 NdisAllocatePacket 的封包描述元總數是較少的0xFFFF,或最初傳遞至 NdisAllocatePacketPoolExNumberOfDescriptors 和 NumberOfOverflowDescriptors 的總和。 溢位描述元只會在溢位狀況期間動態配置,也就是當指定的 NumberOfDescriptors 已配置且仍在使用中時。

NumberOfDescriptorsNumberOfOverflowDescriptors 的總和是驅動程式在呼叫 NdisAllocatePacket 之前可以呼叫 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

另請參閱