NdisMAllocateSharedMemoryAsyncEx 函式 (ndis.h)
謹慎
針對 ARM 和 ARM64 處理器,強烈建議 NDIS 驅動程式寫入器使用 WDF DMA 或 WDM DMA,而不是 NDIS 散佈/收集 DMA。
如需 WDF DMA 的詳細資訊,請參閱 處理 KMDF 驅動程式中的 DMA 作業。
如需 WDM DMA 的詳細資訊,請參閱 管理驅動程式輸入/輸出的 DMA 相關子主題。
迷你埠驅動程式會呼叫 NdisMAllocateSharedMemoryAsyncEx 函式,以配置驅動程式與其總線主機 DMA NIC 之間共用的額外記憶體,通常是在可用的 NIC 接收緩衝區上執行不足時。
語法
NDIS_STATUS NdisMAllocateSharedMemoryAsyncEx(
[in] NDIS_HANDLE MiniportDmaHandle,
[in] ULONG Length,
[in] BOOLEAN Cached,
[in] PVOID Context
);
參數
[in] MiniportDmaHandle
NDIS 用來管理 DMA 資源之內容區域的句柄。 呼叫者藉由呼叫 取得此句柄 NdisMRegisterScatterGatherDma 函式。
[in] Length
要配置的位元元組數目。
[in] Cached
忽略此參數 (快取記憶體一律用於 x86 和 x64 系統上)。
[in] Context
呼叫 MiniportSharedMemoryAllocateComplete 函式時,要傳遞至 驅動程式決定內容的指標。
傳回值
NdisMAllocateSharedMemoryAsyncEx 可以傳回下列其中一項:
傳回碼 | 描述 |
---|---|
|
NDIS 會呼叫 MiniportSharedMemoryAllocateComplete 函式,並提供描述配置共用記憶體的資訊。 如果嘗試配置共用記憶體失敗,NDIS 會呼叫 MiniportSharedMemoryAllocateComplete,並傳遞 NULL 指標。 |
|
目前無法配置要求的記憶體。 如果 NdisMAllocateSharedMemoryAsyncEx 傳回此狀態,則後續具有相同參數的呼叫可能會成功,視系統資源是否可用而定。 |
言論
這類迷你埠驅動程式通常會維護一或多個狀態變數,以追蹤可供傳入傳輸的共用記憶體緩衝區數目。 當可用的緩衝區數目達到驅動程式決定的低時,迷你埠驅動程式會呼叫 NdisMAllocateSharedMemoryAsyncEx 在共用記憶體中配置更多緩衝區空間。 當可用的緩衝區數目攀升至驅動程序決定的高點時,迷你埠驅動程式會呼叫 NdisMFreeSharedMemory 一或多次,以釋放其先前的動態配置。
通常,這類迷你埠驅動程式會保留其 MiniportInitializeEx 函式所配置的共用記憶體區塊,NdisMAllocateSharedMemory,直到移除 NIC 為止。 拿掉 NIC 時,NDIS 會呼叫迷你埠驅動程式的 MiniportHaltEx 函式。 此配置足以處理透過 NIC 進行傳輸的平均需求。
迷你埠驅動程式應設定可配置多少共用記憶體的限制。 此限制是驅動程式特定的,而且應該夠高,因此驅動程式不會用盡緩衝區。 請勿使用過高的限制,因為這可能會浪費共用記憶體來降低系統效能。
任何呼叫 NdisMAllocateSharedMemoryAsyncEx 或 NdisMAllocateSharedMemory 的迷你埠驅動程式,都必須在移除 NIC 時釋放一或多個呼叫 NdisMFreeSharedMemory 的所有未完成配置。
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | NDIS 6.0 和更新版本支援。 |
目標平臺 | 普遍 |
標頭 | ndis.h (包括 Ndis.h) |
IRQL | <= DISPATCH_LEVEL |
DDI 合規性規則 | Irql_Gather_DMA_Function(ndis) |