使用無線託管網路、網際網路連線共用
無線裝載網路是 Windows 7 和 Windows 8 上支援的新 WLAN 功能。 在已安裝無線區域網路 服務的 Windows Server 2012 和 Windows Server 2008 R2 上也支援它。 這項功能會實作兩個主要功能:
- 將實體無線介面卡虛擬化成多個虛擬無線介面卡,有時稱為虛擬 Wi-Fi。
- 軟體型無線存取點 (AP) 有時稱為使用指定虛擬無線介面卡的 SoftAP。
網際網路連線共用 (ICS) 是透過 SharedAccess 服務提供的 Windows 功能。 嚴格來說,SharedAccess 可透過共用網路存取不一定提供網際網路存取的電腦進行網路共用。 我們會在本節中交替使用 ICS 和 SharedAccess 一詞,因為網際網路連線共用是無線託管網路的主要案例,而且 ICS 詞彙對使用者社群而言更清楚。
無線裝載網路與 ICS 緊密系結,可讓無線個人區域網路 (PAN) 和網際網路共用案例。 本節提供一般建議給應用程式開發人員,瞭解如何使用公用無線託管網路和 ICS API 整合無線託管網路和 ICS。
網際網路連線共用
ICS 服務會以兩種可能模式的其中一種運作:
獨立模式
只有在叫用 ICS 服務時,DHCPv4 伺服器函式才會運作。 這是 ICS 的特殊作業模式,只能透過無線託管網路來使用。 使用者或應用程式無法透過公用 ICS API 或 netsh 命令直接啟動和停止獨立 ICS。 啟動無線託管網路通常牽涉到以獨立模式啟動 ICS,以使用 DHCPv4 伺服器函式為連線的裝置提供私人 IPv4 位址。 連線裝置的網路通訊僅限於傳送和接收連線裝置與裝載無線託管網路之本機電腦之間的網路封包,以及連線裝置本身之間的網路封包。 這可有效地啟用無線託管網路的無線個人區域網路案例。
完整模式
叫用服務時,ICS 的所有功能都會運作,例如 IPv4 和 IPv6 的網路位址轉譯和 DHCP 伺服器功能。 這是 ICS 的正常作業模式。 使用者或應用程式可以透過公用 API 或 netshell 命令來啟動和停止完整的 ICS 模式。 例如,您可以從提升許可權的命令提示字元使用 net stop sharedaccess 來停止此服務。 結合無線裝載網路與完整的 ICS,連線裝置的網路通訊不限於無線 PAN。 任何連線的裝置都能夠存取網路 (,例如從執行無線託管網路的電腦透過共用網路連線的網際網路) 。 這可有效地啟用無線託管網路的網路共用案例。
在本節中,我們會使用完整 ICS 一詞來表示 ICS 服務中叫用所有 ICS 函式的情況,以提供具有無線裝載網路之所有完整 ICS 功能的存取權。
這兩種 ICS 作業模式會互斥,而完整 ICS 的優先順序較高。 ICS 服務可能會從獨立模式轉換為完整模式,但無法從完整模式轉換為獨立模式。 ICS 獨立模式是在 Windows 7 和 Windows Server 2008 R2 上引進,並已安裝無線區域網路 服務搭配無線託管網路功能。 在舊版 Windows 中無法使用。
任何完整的 ICS 作業都牽涉到系統中的兩個不同的網路介面卡:
- 公用介面。 這是可存取網際網路的網路介面。 執行 ICS 的本機電腦會使用此介面,與透過 SoftAP 連線的用戶端和裝置共用網際網路。
- 私人介面。 這是其他裝置用來連線到執行 ICS 之本機電腦的網路介面。 DHCPv4 伺服器正在此私人介面上執行,以提供私人本機 IP 位址給其他遠端電腦。
當公用介面沒有網際網路存取權時,私人介面上的 DHCP 伺服器會繼續提供本機 IP 位址給連線的裝置。 獨立 ICS 只牽涉到 SoftAP 執行所在的私人介面;它不包含任何公用介面。
在任何時間,本機電腦上最多都會有一個完整 ICS 實例。 如果完整 ICS 已在本機電腦上執行,啟動另一個完整的 ICS 會展現下列功能行為:
- 如果新完整 ICS 的公用和私人介面與現有的完整 ICS 相同,則啟動第二個完整 ICS 相當於無作業。
- 如果新的公用介面與舊的公用介面不同,但新的私人介面與舊的私人介面相同,則從第二個完整 ICS 開始,對相同私人介面上的連線裝置的影響很小。 存取網際網路的能力可能會隨著新的公用介面而變更。
- 如果新的私人介面與舊的私人介面不同,ICS 函式將會停止處理舊的私人介面,並開始套用至新的私人介面。 任何使用舊私人介面連線到本機電腦的遠端裝置,都會失去本機電腦的 IP 連線。
當完整 ICS 正在執行時,只要第二個 ICS 整合使用不同的新私人介面,叫用第二個完整 ICS 會干擾遠端連線的裝置。
若要管理和使用 ICS 服務來支援 ICS 與無線託管網路的整合,軟體應用程式必須先取得 INetSharingManager 介面。 INetSharingManager介面會直接或間接存取 ICS API 中所有其他 COM 介面。 INetSharingManager介面上的get_SharingInstalled方法會報告本機電腦是否支援連線共用。 INetSharingManager介面上的get_EnumEveryConnection方法會擷取 connections 資料夾中所有連線的列舉介面。 get_INetSharingConfigurationForINetConnection方法會擷取指定連線的INetSharingConfiguration介面。 INetSharingConfiguration介面上的方法可用來查詢和變更 ICS 設定。
必須先啟動無線裝載網路,才能在INetSharingManager介面上呼叫get_EnumEveryConnection方法,以列舉 connections 資料夾中的所有連線。
如需可用於查詢和變更 ICS 設定的 ICS 和公用介面和方法的相關資訊,請參閱 關於網際網路連線共用和網際網路連線防火牆的檔。
裝載的網路和 ICS 整合
當完整 ICS 未執行時,啟動無線託管網路也會在內部以獨立模式啟動 ICS 服務,只有 DHCPv4 伺服器功能才能為無線託管網路介面上的連線裝置配置 IP 位址。 獨立 DHCPv4 伺服器的子網位址範圍是 192.168.173.0/24。 這與搭配完整 ICS 使用的 192.168.137.0/24 子網範圍不同。
啟動具有完整 ICS 的無線裝載網路會採用下列邏輯:
- 如果完整 ICS 尚未執行,啟動無線託管網路也會啟動具有獨立 DHCPv4 伺服器的 ICS 服務。
- 如果完整 ICS 正在執行,且私人介面是無線託管網路介面,只要啟動無線託管網路即可。
- 如果完整的 ICS 已在執行,但私人介面不是無線託管網路介面,則無線託管網路將會啟動,而不需要無線託管網路介面上的 DHCPv4 伺服器功能。
上述邏輯的影響醒目提示下列事實:
- ICS 不會從完整模式轉換為獨立模式。
- 只有在 ICS 未以完整模式執行時,無線託管網路才能叫用獨立模式。
- 如果 ICS 是以獨立模式執行,如果使用者或應用程式以完整模式啟動 ICS,則會先占到完整模式。
- 如果完整 ICS 的私人介面與 SoftAP 的私人介面不同,從獨立模式轉換到 ICS 中的完整模式對無線 PAN 中的連線裝置會造成干擾。
需要一段時間,才能在本機電腦上以完整或獨立模式啟動或停止 ICS 服務。 應用程式應該使用 NotifyServiceStatusChange 函式檢查 ICS 服務的狀態,以確保 ICS 服務未處於啟動/停止擱置狀態,再啟動或停止無線託管網路,以便與 ICS 整合搭配使用。
啟動和停止無線託管網路
Windows 提供一個平臺,其中允許多個並行應用程式同時管理無線託管網路。 具體而言,每個應用程式都可以自行啟動和停止無線託管網路,而不需要事先瞭解其他應用程式。
有兩組函式可啟動和停止託管網路。
多個應用程式可能需要使用無線託管網路。 WlanHostedNetworkStartUsing和WlanHostedNetworkStopUsing函式會以與其他並行應用程式相容的方式啟動和停止無線託管網路。 WlanHostedNetworkStartUsing和WlanHostedNetworkStopUsing函式可讓應用程式參考無線託管網路。 這項機制會讓無線託管網路保持執行,前提是至少一個其他應用程式具有無線託管網路的目前參考。 任何使用者都可以呼叫這些函式。 對 WlanHostedNetworkStartUsing的成功呼叫必須符合WlanHostedNetworkStopUsing 函式的呼叫。 如果呼叫應用程式關閉其呼叫控制碼 (,則WlanHostedNetworkStartUsing函式所造成的任何裝載網路狀態變更都會自動復原,方法是呼叫具有相同 hClientHandle 參數的 WlanClientHandle參數傳遞至WlanHostedNetworkStartUsing) 或進程結束。
WlanHostedNetworkForceStart和WlanHostedNetworkForceStop函式會強制啟動和停止無線託管網路。 只有在使用者具有適當的提高許可權時,才能呼叫這些函式。 WlanHostedNetworkForceStart的成功呼叫最終可能會與WlanHostedNetworkForceStop函式的呼叫相符,視應用程式設計而定。 這些函式會轉換無線託管網路狀態,而不會將要求與應用程式的呼叫控制碼產生關聯。 如果呼叫應用程式關閉其呼叫控制碼,且具有相同hClientHandle參數傳遞至WlanHostedNetworkStartUsing) 或進程結束,則不會自動復原由 WlanHostedNetworkForceStart函式所造成的任何裝載網路狀態變更 (。 如果呼叫 WlanHostedNetworkForceStart 函式的應用程式關閉,而不呼叫其中一個函式來停止無線託管網路,則裝載的網路會保持執行狀態。 應用程式可能會在確保提升許可權的系統使用者接受長時間執行無線託管網路時涉及增加的電源需求之後,呼叫 WlanHostedNetworkForceStart 函式。
要呼叫以啟動和停止無線託管網路的函式的一般建議如下:
- 使用應用程式內的 WlanHostedNetworkStartUsing 和 WlanHostedNetworkStopUsing 函式來啟動和停止無線託管網路。
- 請勿使用 WlanHostedNetworkForceStart 函式來啟動無線託管網路,除非應用程式絕對需要它。 WlanHostedNetworkForceStart函式也需要提高的許可權。
- 僅使用 WlanHostedNetworkForceStop 函式作為復原方法。 WlanHostedNetworkForceStop函式會導致無線託管網路立即停止。 接聽無線託管網路通知的其他應用程式可能需要採取復原動作。 如需詳細資訊,請參閱以下有關無線託管網路的復原順序討論。
無線裝載網路的啟動順序
對於啟動具有完整 ICS 的無線託管網路的應用程式,建議啟動無線託管網路,然後啟動完整的 ICS。 如果無線託管網路已在執行中,則應用程式應該使用 WlanHostedNetworkForceStop 函式,只有在需要完整 ICS 但尚未在啟動託管網路之前啟用無線託管網路時,才停止無線託管網路。 這可讓其他應用程式從完整 ICS 開始所造成的潛在中斷中復原。 如需詳細資訊,請參閱以下有關無線託管網路的復原順序討論。 合併作業應該會成功且整體失敗。
注意
必須先啟動無線裝載網路,才能嘗試使用 IEnumNetSharingEveryConnection 介面列舉對應的介面卡。
下列已排序步驟是應用程式中使用具有完整 ICS 的無線託管網路的建議開始順序:
- 呼叫 WlanHostedNetworkInitSettings 函式,確定已設定無線託管網路並準備好使用。
- 呼叫 WlanHostedNetworkQueryStatus 和 WlanHostedNetworkQueryProperty 函式 ,以判斷是否允許並可使用無線裝載網路。 如果不允許且無法使用無線託管網路,則傳回錯誤。
- 測試以查看是否允許用於完整 ICS 的 ICS 服務。 如果無法啟動 ICS 服務,請傳回錯誤。
- 呼叫 WlanHostedNetworkForceStop 函式來強制停止無線託管網路。
- 呼叫 WlanHostedNetworkStartUsing 函 式以啟動無線託管網路。
- 如果無線託管網路無法啟動,請傳回錯誤。
- 如果完整 ICS 正在執行,且目前的公用或私人介面與要使用的新介面不同,請快取目前的公用和私人介面。 如果 ICS 整合已在執行中,應用程式也可能選擇傳回錯誤或提示使用者。
- 使用公用和私人介面的新設定來啟動完整的 ICS。
- 如果完整 ICS 無法從這些設定啟動,請在完整 ICS 之前執行時,嘗試使用快取的公用和私人介面啟動完整的 ICS 服務。 呼叫 WlanHostedNetworkForceStop 函式來停止無線託管網路並傳回錯誤。
- 傳回無線裝載網路和完整 ICS 成功的成功。
無線裝載網路的停止順序
搭配完整 ICS 使用無線託管網路時,已完成其工作的應用程式可能會想要停止無線託管網路和用於完整 ICS 的 ICS 服務。 在此情況下,建議您呼叫 WlanHostedNetworkForceStop 函式來停止託管網路,而不是呼叫 WlanHostedNetworkStopUsing 函 式。 WlanHostedNetworkForceStop函式會停止無線託管網路,也可用來允許其他應用程式復原。 如需詳細資訊,請參閱以下有關無線託管網路的復原順序討論。
下列已排序步驟是應用程式中使用無線託管網路和完整 ICS 的建議停止順序:
- 停止完整的 ICS。
- 呼叫 WlanHostedNetworkForceStop 函式來停止無線託管網路。
使用無線託管網路且未完成其工作的完整 ICS 的應用程式只需要呼叫 WlanHostedNetworkStopUsing 或 WlanHostedNetworkForceStop 函式來停止無線託管網路。 如果 呼叫 WlanHostedNetworkStartUsing 函式來啟動無線託管網路,則應用程式應該呼叫 WlanHostedNetworkStopUsing 函式來停止無線託管網路。 如果已在應用程式或稱為 WlanHostedNetworkForceStart 函式的應用程式之前啟動無線託管網路,則應用程式可以呼叫 WlanHostedNetworkForceStop 函式來停止無線託管網路,或不執行任何動作, (視案例而定,將無線託管網路保持啟動) 。
無線裝載網路的復原順序
使用無線託管網路的應用程式可能會受到其他應用程式的動作影響。 ICS 服務和管理 ICS 的介面,不會為應用程式註冊 ICS 變更通知提供任何方法。 如果另一個應用程式在INetSharingConfiguration介面上呼叫EnableSharing或DisableSharing方法以啟用或停用連線上的共用,則會將訊息傳送至使用者介面, (本機電腦上的畫面) ,而不是其他應用程式。 因此,當 ICS 或無線託管網路變更發生時,應用程式必須依賴無線託管網路通知來執行復原動作。
使用無線託管網路的應用程式應該藉由呼叫 WlanRegisterNotification來註冊無線託管網路通知。 如果只需要無線託管網路的通知,則應用程式應該在傳遞至WlanRegisterNotification的dwNotifSource參數中傳遞WLAN_NOTIFICATION_SOURCE_HNWK。 如果需要其他無線標記法, 則WLAN_NOTIFICATION_SOURCE_HNWK 應該結合其他所需無線通知類型的通知來源常數,並在 dwNotifSource 參數中傳遞此值。
如果應用程式不想再次啟動 ICS 服務,則復原順序與具有或不含完整 ICS 的應用程式相同。 收到主機網路已停止的無線託管網路通知時,請執行下列動作:
- 如果名為 WlanHostedNetworkForceStart 的應用程式啟動無線託管網路,則呼叫 WlanHostedNetworkForceStart來重新開機託管的網路。 否則,請呼叫 WlanHostedNetworkStartUsing 重新開機無線託管網路。
連線裝置的復原順序
連線到無線託管網路的遠端裝置或電腦可能會受到影響 ICS 和無線託管網路之其他應用程式的動作所影響。 幸運的是,大部分裝置在裝置應用程式中都有內建的重試邏輯,以處理暫時遺失訊號或漫遊。
連線到無線託管網路的裝置或電腦可能復原順序,遺失連絡人如下:
- 無線設備磁碟機表示媒體與裝置上網路堆疊的上層中斷連線。
- 裝置應用程式會啟動定期檢查無線託管網路的可用性。
- 一旦裝置應用程式再次偵測到無線託管網路,裝置就會起始無線連線。
- 成功與無線託管網路連線時,裝置應用程式會據以更新其 IP 設定。
相關主題