共用方式為


接收緩衝區中的共享記憶體

本節描述 VMQ 接收緩衝區中共用記憶體的配置。如需在接收指示中使用緩衝區的詳細資訊,請參閱 VMQ 接收路徑

如果上層通訊協定驅動程式在 Flags 成員中設定了 NDIS_RECEIVE_QUEUE_PARAMETERS_LOOKAHEAD_SPLIT_REQUIRED 旗標,則在 NDIS_RECEIVE_QUEUE_PARAMETERS 結構的 成員中,網路適配器應將接收到的封包按照等於或大於請求的預視大小的位移進行分割,並使用 DMA 將預視數據和後置數據傳輸到不同的共享記憶體區段。

迷你埠驅動程式會在配置共用記憶體時指定 lookahead 類型的設定(NdisSharedMemoryUsageReceiveLookahead) 或其他共用記憶體類型。 例如,迷你埠驅動程式會呼叫 NdisAllocateSharedMemory 函式,並將 NDIS_SHARED_MEMORY_PARAMETERS 結構中的 Usage 成員設定為 NdisSharedMemoryUsageReceiveLookahead。 當佇列配置完成時,迷你埠驅動程序應該為佇列配置共用記憶體。 如需配置和釋放佇列共用記憶體資源的相關信息,請參閱 共用記憶體資源配置

下圖顯示當傳入數據分割成兩個共用記憶體緩衝區時,網路數據的關聯性。

圖表顯示網路數據關聯性與傳入數據分割成兩個共用記憶體緩衝區。

NET_BUFFER_SHARED_MEMORY 結構會指定共用記憶體資訊。 這些共用記憶體緩衝區可以形成與 NET_BUFFER 結構相關聯的串連清單。

使用 NET_BUFFER_SHARED_MEM_NEXT_SEGMENTNET_BUFFER_SHARED_MEM_FLAGSNET_BUFFER_SHARED_MEM_HANDLENET_BUFFER_SHARED_MEM_OFFSET,以及 NET_BUFFER_SHARED_MEM_LENGTH 巨集來存取 NET_BUFFER 結構中的 NET_BUFFER_SHARED_MEMORY。 SharedMemoryInfo 是 NET_BUFFER 結構中的一個成員,它包含了連結清單中的第一個 NET_BUFFER_SHARED_MEMORY 結構。

注意 從 NDIS 6.30 開始,不再支援將封包數據分割成個別的前置緩衝區。 從 Windows Server 2012 開始,重疊協定驅動程式將不會在 NDIS_RECEIVE_QUEUE_PARAMETERS 結構 Flags 成員中設定 NDIS_RECEIVE_QUEUE_PARAMETERS_LOOKAHEAD_SPLIT_REQUIRED 旗標。