網路驅動程式中的非同步 I/O 和完成函式
某些網路作業固有延遲。 由於此延遲,小型埠驅動程式所提供的許多上邊緣函式和通訊協定驅動程式的下邊緣函式是設計來支援非同步作業。 網路驅動程式不需要在迴圈中等候一些耗時的工作完成或硬體事件發出訊號,而是依賴以非同步方式處理大部分作業的能力。
使用 完成 函式支援非同步網路 I/O。 下列範例說明針對網路 傳送 作業使用完成函式,但通訊協定或迷你埠驅動程式所執行的其他許多作業存在這個相同機制。
當通訊協定驅動程式呼叫 NDIS 以傳送封包時,導致呼叫迷你埠驅動程式的 MiniportSendNetBufferLists 函式時,迷你埠驅動程式可以嘗試立即完成此要求,並傳回適當的狀態值作為結果。 針對同步作業,可能回應NDIS_STATUS_SUCCESS,以成功完成傳送、NDIS_STATUS_RESOURCES和NDIS_STATUS_FAILURE指出某種失敗。
但傳送作業可能需要一些時間才能完成,而迷你埠驅動程式 (或 NDIS) 會將封包排入佇列,並等候 NIC 指出傳送作業的結果。 迷你 埠驅動程式 MiniportSendNetBufferLists 函式可以傳回NDIS_STATUS_PENDING的狀態值,以非同步方式處理此作業。 當迷你埠驅動程式完成傳送作業時,它會呼叫完成函式 NdisMSendNetBufferListsComplete,並將指標傳遞至已傳送的封包描述元。 這項資訊會傳遞至通訊協定驅動程式,表示完成。
大部分可能需要延長時間的驅動程式作業,才能使用類似的完成函式來完成非同步作業。 這類函式具有 NdisMXxxComplete格式的名稱。
完成函式也會提供給:
設定和查詢組態。
重設硬體。
指出狀態。
表示已接收的資料。
傳送已接收的資料。