共用方式為


實作網路提供者

網路提供者是一種 DLL,可讓 Windows作系統支援特定的網路協定。 它會藉由實作網路提供者 API 來執行這項作業。 此 API 是一組函式,多提供者路由器(MPR)呼叫以與網路通訊。 然後,網路提供者會將這些呼叫轉譯成網路特定的 API 呼叫,以執行 MPR 所指定的動作。 如此一來,Windows作系統就可以與新的網路協議互動,而不需要瞭解其網路特定 API。

若要建立網路提供者,請撰寫 DLL 以匯出 NPGetCaps 函式。

網路提供者 API 中其他函式的支持是選擇性的。 如果您的網路提供者不需要函式,您的 DLL 就不需要實作它或提供存根實作。 如需詳細資訊,請參閱 網路提供者函式中的個別函式主題

例外狀況是,如果您支援下列其中一個列舉函式,您也必須支援其他兩個函式:NPOpenEnumNPEnumResource,以及 NPCloseEnum

下列指導方針說明如何撰寫與 MPR 和 Windows 作業系統互動良好的網路提供者。 在可能的情況下,您的提供者應遵循下列指導方針,以取得速度、驗證及路由。

速度

網路提供者應該快速判斷網路資源是否為自己的資源。 這是因為 MPR 可能必須多次遍歷許多提供者,以便找到資源的擁有者。

如果網路提供者沒有資源,它應該會立即傳回WN_BAD_NETNAME狀態代碼。

此外,支援 的提供者應快速傳回 NPGetDirectoryType 函式的結果,因為在 WinFile 繪製目錄樹狀結構時會呼叫該函式。

驗證

驗證順序很重要。 網路提供者應該先判斷其網路是否已啟動,然後判斷網路和網路提供者是否支持作業。 如果在這些檢查之後,網路提供者會收到任何網路資源,它應該判斷它是否擁有它們。 最後,它應該驗證其他參數。

路由

如果 MPR 必須循環通過網路提供者,它會嘗試所有提供者,直到一個接受呼叫為止。 換句話說,MPR 一律會繼續嘗試尋找網路提供者。

不過,它會記下提供者所報告的第一個重大錯誤。 ERROR_BAD_NETPATH、ERROR_BAD_NET_NAME、ERROR_INVALID_PARAMETER、ERROR_INVALID_LEVEL等錯誤被視為微不足道,因為它們只是表示提供者不會管理資源。 不過,如果提供者因發生 ERROR_INVALID_PASSWORD 或其他重大錯誤而失敗,MPR 會記錄此錯誤並繼續循環過其他網路提供者。 一般而言,在路由選擇過程中,如果沒有提供者接受呼叫,MPR 會報告遍歷網路提供者時遇到的第一個重大錯誤。

當決定要傳回的錯誤訊息時,您的網路提供者應該考慮 MPR 的這個行為。

實作注意事項

實作網路提供者 DLL 時,提供者不得呼叫其他 Windows 網路函式殼層 API或其他可能導致重新進入 MPR 子系統的 UNC 路徑型查詢。 如果您從網路提供者 DLL 進行這類呼叫,應用程式或其他作業系統元件可能會遇到資源爭用、效能不佳或 MPR 子系統內的死鎖。