共用方式為


釋放 VM 佇列

若要釋放接收佇列,過度處理驅動程式會發出 OID_RECEIVE_FILTER_FREE_QUEUE 設定的 OID 要求。 NDIS_OID_REQUEST結構的InformationBuffer成員包含具有NDIS_RECEIVE_QUEUE_ID類型的佇列識別碼之NDIS_RECEIVE_QUEUE_FREE_PARAMETERS結構的指標。

OID_RECEIVE_FILTER_FREE_QUEUE 釋放使用 OID_RECEIVE_FILTER_ALLOCATE_QUEUE OID 配置過度配置驅動程式的接收佇列。 如需配置接收佇列的詳細資訊,請參閱 配置 VM 佇列

注意 預設佇列具有 NDIS_DEFAULT_RECEIVE_QUEUE_ID佇列識別碼,一律會配置且無法釋放。

過度配置驅動程式必須先釋放它在佇列上設定的所有篩選,才能釋放佇列。 此外,過度配置驅動程式必須先釋放它在網路介面卡上配置的所有接收佇列,才能呼叫 NdisCloseAdapterEx 函式,以關閉與網路介面卡的系結。 NDIS 會在呼叫迷你埠驅動程式 的 MiniportHaltEx 函式之前,釋放網路介面卡上配置的所有佇列。

當迷你埠驅動程式收到釋放佇列的要求時,它會執行下列動作:

  • 必須立即停止 DMA 至與佇列相關聯的共用記憶體資源。

  • 產生狀態指示,指出 DMA 已停止。

  • 等候所有與佇列相關聯的未完成 NET_BUFFER_LIST 結構,以傳回。

  • 釋放相關聯的共用記憶體和硬體資源。

當迷你埠驅動程式收到 OID_RECEIVE_FILTER_FREE_QUEUE 集要求時,佇列必須進入 Stop DMA 狀態,它會停止佇列上的 DMA,而迷你埠驅動程式必須使用 NDIS_STATUS_RECEIVE_QUEUE_STATE 狀態指示來指出狀態變更。 如需佇列狀態的詳細資訊,請參閱 佇列狀態和作業

迷你埠驅動程式發出 NDIS_STATUS_RECEIVE_QUEUE_STATE 狀態指示之後,必須先等候所有擱置的接收指示完成,才能釋放相關聯的共用記憶體。 如需釋放共用記憶體的詳細資訊,請參閱 共用記憶體資源配置