實作網路提供者
網路提供者是一種 DLL,可讓 Windows 作業系統支援特定的網路通訊協定。 它會藉由實作網路提供者 API 來執行這項作業。 此 API 是 多個提供者路由器 (MPR) 呼叫來與網路通訊的一組函式。 然後,網路提供者會將這些呼叫轉譯為網路特定的 API 呼叫,以執行 MPR 所指定的動作。 如此一來,Windows 作業系統就可以與新的網路通訊協定互動,而不需要瞭解其網路特定 API。
若要建立網路提供者,請撰寫匯出 NPGetCaps 函式的 DLL。
網路提供者 API 中的其他函式支援是選擇性的。 如果您的網路提供者不需要函式,您的 DLL 就不需要實作它或提供存根實作。 如需詳細資訊,請參閱 網路提供者函式中的個別函式主題。
例外狀況是,如果您支援下列其中一個列舉函數,您也必須支援其他兩個函式: NPOpenEnum、 NPEnumResource和 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 子系統內的死結。