閱讀英文

共用方式為


使用無線託管網路、網路連線共享

無線託管網路是 Windows 7 和 Windows 8 上支援的全新 WLAN 功能。 也支援已安裝無線 LAN 服務的 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 中推出,且需要安裝無線 LAN 服務以及無線主機網路功能。 舊版 Windows 中無法使用。

任何完整的ICS作業都牽涉到系統中的兩個不同的網路適配器:

  • 公用介面。 這是可存取因特網的網路介面。 執行ICS的本機電腦會使用此介面,與透過SoftAP連線到它的客戶端和裝置共用因特網。
  • 私人介面。 這是其他裝置用來連線到執行ICS之本機電腦的網路介面。 DHCPv4 伺服器正在此私人介面上執行,以提供私人本機 IP 位址給其他遠端電腦。

當公用介面沒有因特網存取權時,私人介面上的 DHCP 伺服器會繼續為連線的裝置提供本機 IP 位址。 獨立ICS只牽涉到SoftAP執行所在的私人介面;它不包含任何公用介面。

在任何時候,本機電腦上最多會有一個完整 ICS 實例。 如果完整ICS已在本機電腦上執行,啟動另一個完整的ICS會表現出下列功能行為:

  • 如果新完整 ICS 的公用和私用介面與現有的完整 ICS 相同,則從第二個完整 ICS 開始相當於 no-op。
  • 如果新的公用介面與舊的公用介面不同,但新的私人介面與舊的私用介面相同,則啟動第二個完整的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 提供一個平臺,其中允許多個並行應用程式同時管理無線託管網路。 具體來說,每個應用程式都可以自行啟動和停止無線託管網路,而不需要事先知道其他應用程式。

有兩組函式可啟動和停止託管網路。

多個應用程式可能需要使用無線託管網路。 WlanHostedNetworkStartUsingWlanHostedNetworkStopUsing 函式會以與其他並行應用程式相容的方式啟動和停止無線託管網路。 WlanHostedNetworkStartUsingWlanHostedNetworkStopUsing 函式可讓應用程式參考無線託管網路。 此機制會讓無線託管網路保持執行,前提是至少有一個其他應用程式具有無線託管網路的目前參考。 任何使用者都可以呼叫這些函式。 成功呼叫 WlanHostedNetworkStartUsing 必須符合對 WlanHostedNetworkStopUsing 函式的呼叫。 任何由 WlanHostedNetworkStartUsing 函數引起的託管網路狀態變更,如果呼叫應用程式關閉其句柄(透過呼叫 WlanCloseHandle,並用相同的 hClientHandle 參數傳遞給 WlanHostedNetworkStartUsing)或行程結束時,將自動恢復。

WlanHostedNetworkForceStartWlanHostedNetworkForceStop 函式會強制啟動和停止無線託管網路。 只有在使用者具有適當的提高許可權時,才能呼叫這些函式。 WlanHostedNetworkForceStart 的成功呼叫最終可能會與呼叫 WlanHostedNetworkForceStop 函式相符,視應用程式設計而定。 這些函式會轉換無線託管網路狀態,而不會將要求與應用程式的呼叫句柄產生關聯。 如果呼叫應用程式關閉其呼叫句柄(藉由呼叫 WlanCloseHandle,且相同 hClientHandle 參數傳遞至 WlanHostedNetworkStartUsing)或行程結束時,WlanHostedNetworkForceStart 函式所造成的任何託管網路狀態變更都不會自動還原。 如果呼叫 WlanHostedNetworkForceStart 的應用程式 函式關閉,而不呼叫其中一個函式來停止無線託管網路,則主機網路會保持執行狀態。 應用程式可能會在確保具有提升權限的系統使用者已經接受因長時間執行無線託管網路而增加的電源需求後,呼叫 WlanHostedNetworkForceStart 函式。

啟動和停止無線託管網路所需呼叫的功能的一般建議如下:

  • 使用 WlanHostedNetworkStartUsingWlanHostedNetworkStopUsing 應用程式內的函式來啟動和停止無線託管網路。
  • 除非應用程式絕對需要,否則請勿使用 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服務。 在此情況下,建議呼叫 WlanHostedNetworkForceStop 函式來停止託管網路,而不是呼叫 WlanHostedNetworkStopUsing 函式。 WlanHostedNetworkForceStop 函式會停止無線託管網路,也可讓其他應用程式復原。 如需詳細資訊,請參閱以下關於無線託管網路的復原順序的討論。

下列已排序步驟是使用無線託管網路和完整ICS的應用程式建議停止順序:

不使用完整ICS、使用無線託管網路的應用程式在完成其工作後,只需要呼叫 WlanHostedNetworkStopUsingWlanHostedNetworkForceStop 函式來停止無線託管網路。 如果呼叫 WlanHostedNetworkStartUsing 函式來啟動無線託管網路,則應用程式應該呼叫 WlanHostedNetworkStopUsing 函式來停止無線託管網路。 如果無線主機網路已在應用程式之前啟動,或應用程式稱為 WlanHostedNetworkForceStart 函式來強制啟動無線託管網路,則應用程式可以呼叫 WlanHostedNetworkForceStop 函式來停止無線託管網路或不執行任何動作(讓無線託管網路啟動),視案例而定。

無線托管網路的恢復順序

使用無線託管網路的應用程式可能會受到其他應用程式的動作影響。 ICS 服務和管理ICS的介面沒有方法可讓應用程式註冊ICS變更通知。 如果另一個應用程式呼叫 EnableSharingDisableSharing 方法,INetSharingConfiguration 介面上啟用或停用連線上的共用,則會將訊息傳送至本機計算機上的使用者介面(畫面),而不是傳送給其他應用程式。 因此,當ICS或無線託管網路變更發生時,應用程式必須依賴無線託管網路通知來執行復原動作。

使用無線託管網路的應用程式應該呼叫 WlanRegisterNotification註冊無線託管網路通知。 如果只需要無線託管網路的通知,則應用程式應在傳遞給 WlanRegisterNotificationdwNotifSource 參數中,傳遞 WLAN_NOTIFICATION_SOURCE_HNWK。 如果需要其他無線通知,則 WLAN_NOTIFICATION_SOURCE_HNWK 需與所需的其他類型的無線通知來源常數結合,並在 dwNotifSource 參數中傳遞此值。

如果應用程式不想再次啟動ICS服務,則復原順序與具有或沒有完整ICS的應用程式相同。 收到主機網路已停止的無線託管網路通知時,請執行下列動作:

聯機裝置的復原順序

線上到無線託管網路的遠端裝置或電腦可能會受到影響ICS和無線託管網路之其他應用程式動作的影響。 幸運的是,大部分裝置在裝置應用程式中都內建了重試邏輯,以處理暫時遺失訊號或漫遊。

連接到無線託管網路的裝置或電腦如果失去聯繫,可能的復原步驟如下:

  • 無線設備驅動程式向設備的上層網路堆疊指示媒體斷線。
  • 裝置應用程式會定期檢查無線託管網路的可用性。
  • 一旦裝置應用程式再次偵測到無線託管網路,裝置就會起始無線連線。
  • 成功與無線託管網路連線時,裝置應用程式會據以更新其IP設定。

關於無線託管網路

無線託管網路範例

WlanHostedNetworkForceStart

WlanHostedNetworkInitSettings

WlanHostedNetworkQueryProperty

WlanHostedNetworkQuerySecondaryKey

WlanHostedNetworkQueryStatus

無線網路承載網路更新安全性設定

WlanHostedNetworkSetProperty

WlanHostedNetworkSetSecondaryKey

WlanHostedNetworkStartUsing

停止使用Wlan託管網路

WlanRegisterVirtualStationNotification (無線區域網註冊虛擬設備通知)