接收緩衝區中的共用記憶體
本節說明 VMQ 接收緩衝區中共用記憶體的配置。如需在接收指示中使用緩衝區的詳細資訊,請參閱 VMQ 接收路徑。
如果過度配置通訊協定驅動程式在NDIS_RECEIVE_QUEUE_PARAMETERS結構的 Flags 成員中設定 NDIS_RECEIVE_QUEUE_PARAMETERS_LOOKAHEAD_SPLIT_REQUIRED 旗標,則網路介面卡應該將接收的封包分割成等於或大於所要求的外觀大小,並使用 DMA 來傳輸外觀資料和後置外觀資料,以分隔共用記憶體區段。
迷你埠驅動程式會指定配置共用記憶體時, (NdisSharedMemoryUsageReceiveLo) 或其他共用記憶體類型的設定。 例如,迷你埠驅動程式會呼叫NdisAllocateSharedMemory函式,並將NDIS_SHARED_MEMORY_PARAMETERS結構中的Usage成員設定為NdisSharedMemoryUsageReceiveLoganhead。 當佇列配置完成時,迷你埠驅動程式應該為佇列配置共用記憶體。 如需為佇列配置和釋放共用記憶體資源的相關資訊,請參閱 共用記憶體資源配置。
下圖顯示當傳入資料分割成兩個共用記憶體緩衝區時,網路資料的關聯性。
NET_BUFFER_SHARED_MEMORY結構會指定共用記憶體資訊。 這類共用記憶體緩衝區的連結清單可以與 NET_BUFFER 結構相關聯。
使用 NET_BUFFER_SHARED_MEM_NEXT_SEGMENT、 NET_BUFFER_SHARED_MEM_FLAGS、 NET_BUFFER_SHARED_MEM_HANDLE、 NET_BUFFER_SHARED_MEM_OFFSET和 NET_BUFFER_SHARED_MEM_LENGTH 宏來存取NET_BUFFER結構中的NET_BUFFER_SHARED_MEMORY。 NET_BUFFER 結構的 SharedMemoryInfo 成員包含連結清單中的第一個NET_BUFFER_SHARED_MEMORY結構。
注意 從 NDIS 6.30 開始,不再支援將封包資料分割成個別的外觀緩衝區。 從 Windows Server 2012 開始,過度配置通訊協定驅動程式將不會在 NDIS_RECEIVE_QUEUE_PARAMETERS 結構的 Flags 成員中設定 NDIS_RECEIVE_QUEUE_PARAMETERS_LOOKAHEAD_SPLIT_REQUIRED 旗標。