ワイヤレス ホスト型ネットワークの使用、インターネット接続の共有

ワイヤレス ホステッド ネットワークは、Windows 7 および Windows 8 でサポートされる新しい WLAN 機能です。 また、ワイヤレス LAN サービスがインストールされたWindows Server 2012および Windows Server 2008 R2 でもサポートされます。 この機能は、次の 2 つの主要な関数を実装します。

  • 複数の仮想ワイヤレス アダプターへの物理ワイヤレス アダプターの仮想化は、仮想 Wi-Fi と呼ばれることもあります。
  • ソフトウェア ベースのワイヤレス アクセス ポイント (AP) は、指定された仮想ワイヤレス アダプターを使用する SoftAP と呼ばれることもあります。

インターネット接続共有 (ICS) は、SharedAccess サービスを通じて提供される Windows の機能です。 厳密に言えば、SharedAccess は、共有ネットワーク アクセスが必ずしもインターネットへのアクセスを提供しないコンピューターを介したネットワーク共有を可能にします。 インターネット接続共有はワイヤレス ホステッド ネットワークの主要なシナリオであり、ICS 用語はユーザー コミュニティによりよく知られているため、このセクションでは ICS と SharedAccess という用語を同じ意味で使用します。

ワイヤレス ホステッド ネットワークは ICS に密接に関連付けられており、ワイヤレス パーソナル エリア ネットワーク (PAN) とインターネット共有の両方のシナリオを可能にします。 このセクションでは、パブリック ワイヤレス ホステッド ネットワークと ICS API を使用してワイヤレス ホステッド ネットワークと ICS を統合する方法に関する一般的な推奨事項をアプリケーション開発者に提供します。

インターネット接続の共有

ICS サービスは、次の 2 つのモードのいずれかで動作します。

  • スタンドアロン モード

    ICS サービスが呼び出されると、DHCPv4 サーバー関数のみが動作します。 これは ICS の特別な動作モードであり、ワイヤレスホステッド ネットワーク経由でのみ使用できます。 ユーザーまたはアプリケーションは、パブリック ICS API または netsh コマンドを介してスタンドアロン ICS を直接開始および停止することはできません。 ワイヤレス ホステッド ネットワークを開始するには、通常、DHCPv4 サーバー機能を使用して接続されているデバイスにプライベート IPv4 アドレスを提供するために、スタンドアロン モードで ICS を開始する必要があります。 接続されたデバイスのネットワーク通信は、接続されているデバイスと、ワイヤレスホスト型ネットワークをホストするローカル コンピューターと、接続されているデバイス間のネットワーク パケットの送受信に制限されます。 これにより、ワイヤレス ホステッド ネットワークのワイヤレス パーソナル エリア ネットワーク シナリオが効果的に有効になります。

  • フル モード

    ICS のすべての機能は、IPv4 と IPv6 の両方のネットワーク アドレス変換や DHCP サーバー機能など、サービスが呼び出されたときに動作します。 これは ICS の通常の動作モードです。 ユーザーまたはアプリケーションは、パブリック API または netshell コマンドを使用して、完全な ICS モードを開始および停止できます。 たとえば、管理者特権のコマンド プロンプトから net stop sharedaccess を使用して、このサービスを停止できます。 ワイヤレス ホステッド ネットワークと完全な ICS を組み合わせることで、接続されたデバイスのネットワーク通信はワイヤレス PAN に限定されません。 接続されているデバイスは、ワイヤレス ホスト型ネットワークを実行しているコンピューターからの共有ネットワーク接続を介してネットワーク (インターネットなど) にアクセスできます。 これにより、ワイヤレス ホステッド ネットワークのネットワーク共有シナリオが効果的に有効になります。

このセクションでは、完全な ICS という用語を使用して、すべての ICS 機能が ICS サービスで呼び出され、ワイヤレス ホステッド ネットワークを使用してすべての ICS 機能にアクセスできるようにする場合を意味します。

2 つの ICS 動作モードは相互に排他的であり、完全な ICS の方が優先されます。 ICS サービスはスタンドアロン モードからフル モードに移行できますが、フル モードからスタンドアロン モードには切り替えられません。 ICS スタンドアロン モードは、Windows 7 と Windows Server 2008 R2 で導入され、ワイヤレス ホスト型ネットワーク機能と組み合わせてワイヤレス LAN サービスがインストールされました。 以前のバージョンの Windows では使用できません。

完全な ICS 操作には、システム内に 2 つの異なるネットワーク アダプターが含まれます。

  • パブリック インターフェイス。 これは、インターネットにアクセスできるネットワーク インターフェイスです。 これは、ICS を実行しているローカル コンピューターが、SoftAP 経由で接続しているクライアントおよびデバイスとインターネットを共有するために使用するインターフェイスです。
  • プライベート インターフェイス。 これは、ICS を実行しているローカル コンピューターへの接続に他のデバイスが使用するネットワーク インターフェイスです。 DHCPv4 サーバーは、他のリモート コンピューターにプライベート ローカル IP アドレスを提供するために、このプライベート インターフェイスで実行されています。

パブリック インターフェイスにインターネット アクセス権がない場合、プライベート インターフェイス上の DHCP サーバーは、接続されているデバイスにローカル IP アドレスを引き続き提供します。 スタンドアロン ICS には、SoftAP が実行されているプライベート インターフェイスのみが含まれます。パブリック インターフェイスは含まれません。

ローカル コンピューターで実行されている完全な ICS のインスタンスは、いつでも 1 つまでです。 完全な ICS が既にローカル コンピューターで実行されている場合、別の完全な ICS を起動すると、次の機能動作が実行されます。

  • 新しいフル ICS のパブリック インターフェイスとプライベート インターフェイスが既存のフル ICS と同じである場合、2 つ目のフル ICS の開始は no-op に相当します。
  • 新しいパブリック インターフェイスが古いパブリック インターフェイスと異なるが、新しいプライベート インターフェイスが古いプライベート インターフェイスと同じ場合、2 つ目の完全な ICS を起動すると、同じプライベート インターフェイス上の接続されたデバイスにほとんど影響を与えはありません。 新しいパブリック インターフェイスでは、インターネットにアクセスする機能が変更される可能性があります。
  • 新しいプライベート インターフェイスが古いプライベート インターフェイスと異なる場合、ICS 関数は古いプライベート インターフェイスで動作を停止し、新しいプライベート インターフェイスへの適用を開始します。 古いプライベート インターフェイスを使用してローカル コンピューターに接続しているリモート デバイスは、ローカル コンピューターへの IP 接続を失います。

完全な ICS が既に実行されている場合、2 つ目の ICS 統合で別の新しいプライベート インターフェイスが使用されている限り、2 つ目の完全な 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 サービスが開始され、ワイヤレス ホステッド ネットワーク インターフェイス上の接続されたデバイスの IP アドレスを割り当てるための DHCPv4 サーバー機能のみが使用されます。 スタンドアロン 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 では、複数の同時アプリケーションでワイヤレス ホステッド ネットワークを同時に管理できるプラットフォームが提供されます。 具体的には、各アプリケーションは、他のアプリケーションに関する事前の知識がなくても、それ自体でワイヤレスホステッド ネットワークを開始および停止できます。

ホステッド ネットワークを開始および停止する機能のセットは 2 つあります。

複数のアプリケーションで、ワイヤレスホステッド ネットワークの使用が必要になる場合があります。 WlanHostedNetworkStartUsing および WlanHostedNetworkStopUsing 関数は、他の同時実行アプリケーションと互換性のある方法で、ワイヤレスホステッド ネットワークを開始および停止します。 WlanHostedNetworkStartUsing 関数と WlanHostedNetworkStopUsing 関数を使用すると、アプリケーションはワイヤレスホステッド ネットワークへの参照を持つことができます。 このメカニズムは、少なくとも 1 つの他のアプリケーションがワイヤレス ホステッド ネットワークへの現在の参照を持っている場合に、ワイヤレス ホステッド ネットワークを実行し続けます。 どのユーザーでもこれらの関数を呼び出すことができます。 WlanHostedNetworkStartUsing への正常な呼び出しは、WlanHostedNetworkStopUsing 関数の呼び出しと一致する必要があります。 呼び出し元のアプリケーションが呼び出しハンドルを閉じた場合 (WlanHostedNetworkStartUsing に渡されたのと同じ hClientHandle パラメーターを使用して WlanCloseHandle を呼び出すことによって) またはプロセスが終了した場合、WlanHostedNetworkStartUsing 関数によって発生したホストされたネットワーク状態の変更は自動的に元に戻されます。

WlanHostedNetworkForceStart 関数と WlanHostedNetworkForceStop 関数は、ワイヤレスホステッド ネットワークの開始と停止を強制します。 これらの関数は、ユーザーが適切な昇格された特権を持っている場合にのみ呼び出すことができます。 WlanHostedNetworkForceStart への正常な呼び出しは、最終的には、アプリケーションの設計に応じて、WlanHostedNetworkForceStop 関数の呼び出しによって一致する可能性があります。 これらの関数は、要求をアプリケーションの呼び出しハンドルに関連付けることなく、ワイヤレスホステッド ネットワークの状態を切り替えます。 呼び出し元アプリケーションが呼び出しハンドルを閉じた場合 (WlanHostedNetworkStartUsing に渡されたのと同じ hClientHandle パラメーターを使用して WlanCloseHandle を呼び出す)、またはプロセスが終了した場合、WlanHostedNetworkForceStart 関数によって発生する Hosted Network 状態の変更は自動的に元に戻されません。 WlanHostedNetworkForceStart 関数を呼び出したアプリケーションが、いずれかの関数を呼び出さずに閉じてワイヤレス ホステッド ネットワークを停止した場合、Hosted Network は実行したままになります。 アプリケーションは、管理者特権のシステム ユーザーがワイヤレス ホスト型ネットワークの実行に伴う増加した電力要件を長期間受け入れるようにした後、 WlanHostedNetworkForceStart 関数を呼び出す場合があります。

ワイヤレス ホステッド ネットワークを開始および停止するために呼び出す関数に関する一般的な推奨事項は次のとおりです。

  • アプリケーション内で WlanHostedNetworkStartUsing 関数と WlanHostedNetworkStopUsing 関数を 使用して、ワイヤレスホステッド ネットワークを開始および停止します。
  • WlanHostedNetworkForceStart 関数を使用して、ワイヤレスホスト型ネットワークを起動しないでください。ただし、アプリケーションで絶対に必要な場合を除きます。 WlanHostedNetworkForceStart 関数には、昇格された特権も必要です。
  • WlanHostedNetworkForceStop 関数のみを回復方法として使用します。 WlanHostedNetworkForceStop 関数を使用すると、ワイヤレスホステッド ネットワークが直ちに停止します。 ワイヤレスホスト型ネットワーク通知をリッスンする他のアプリケーションでは、復旧アクションを実行する必要がある場合があります。 詳細については、ワイヤレス ホステッド ネットワークの復旧シーケンスに関する以下の説明を参照してください。

ワイヤレス ホスト型ネットワークの開始シーケンス

完全な ICS を使用してワイヤレス ホステッド ネットワークを起動するアプリケーションの場合は、ワイヤレスホステッド ネットワークを開始してから、完全な ICS を開始することをお勧めします。 ワイヤレス ホステッド ネットワークが既に実行されている場合、アプリケーションは WlanHostedNetworkForceStop 関数を使用して、完全な ICS が必要であるが、ホストネットワークが開始される前に有効になっていない場合にのみ、ワイヤレスホステッド ネットワークを停止する必要があります。 これにより、他のアプリケーションは、完全な ICS の開始によって引き起こされる潜在的な中断から回復できます。 詳細については、ワイヤレス ホステッド ネットワークの復旧シーケンスに関する以下の説明を参照してください。 結合された操作は成功し、全体として失敗します。

Note

IEnumNetSharingEveryConnection インターフェイスを使用して対応するアダプターを列挙する前に、ワイヤレスホスト型ネットワークを起動する必要があります。

 

次の順序付けされた手順は、完全な ICS を備えたワイヤレス ホステッド ネットワークを使用するアプリケーションで推奨される開始シーケンスです。

  • WlanHostedNetworkInitSettings 関数を呼び出して、ワイヤレスホスト型ネットワークが構成され、使用する準備ができていることを確認します。
  • WlanHostedNetworkQueryStatus 関数と WlanHostedNetworkQueryProperty 関数を呼び出して、ワイヤレスホスト型ネットワークが許可され、使用可能かどうかを判断します。 ワイヤレスホスト型ネットワークが許可されておらず、使用できない場合は、エラーを返します。
  • 完全な ICS に使用される ICS サービスが許可されているかどうかを確認するテスト。 ICS サービスを開始できない場合は、エラーを返します。
  • WlanHostedNetworkForceStop 関数を呼び出して、ワイヤレスホステッド ネットワークを強制的に停止します。
  • WlanHostedNetworkStartUsing 関数を呼び出して、ワイヤレスホステッド ネットワークを開始します。
  • ワイヤレスホステッド ネットワークの起動に失敗した場合は、エラーを返します。
  • 完全な ICS が既に実行されていて、現在のパブリックまたはプライベート インターフェイスが使用される新しいインターフェイスと異なる場合は、現在のパブリック インターフェイスとプライベート インターフェイスをキャッシュします。 アプリケーションでは、エラーを返すか、ICS 統合が既に実行されている場合にユーザーにプロンプトを表示することもできます。
  • パブリック インターフェイスとプライベート インターフェイスの新しい設定を使用して、完全な ICS を開始します。
  • これらの設定で完全な ICS を開始できない場合は、以前に完全な ICS が実行されていた場合は、キャッシュされたパブリック インターフェイスとプライベート インターフェイスを使用して完全な ICS サービスを開始してみてください。 WlanHostedNetworkForceStop 関数を呼び出して、ワイヤレスホステッド ネットワークを停止し、エラーを返します。
  • ワイヤレスホステッド ネットワークと完全な ICS が成功したことを返します。

ワイヤレス ホスト型ネットワークの停止シーケンス

完全な ICS でワイヤレス ホステッド ネットワークを使用する場合、その作業を完了したアプリケーションは、完全な ICS に使用されるワイヤレスホステッド ネットワークと ICS サービスを停止する必要がある場合があります。 この場合は、 WlanHostedNetworkStopUsing 関数を呼び出すのではなく、ホストされたネットワークを停止するために WlanHostedNetworkForceStop 関数を 呼び出することをお勧めします。 WlanHostedNetworkForceStop 関数は、ワイヤレスホステッド ネットワークを停止し、他のアプリケーションの回復を許可する機能も提供します。 詳細については、ワイヤレス ホステッド ネットワークの復旧シーケンスに関する以下の説明を参照してください。

ワイヤレス ホステッド ネットワークとフル ICS を使用するアプリケーションで推奨される停止シーケンスは、次に示す順序付けされた手順です。

  • 完全な ICS を停止します。
  • WlanHostedNetworkForceStop 関数を呼び出して、ワイヤレスホステッド ネットワークを停止します。

完全な ICS を使用せずにワイヤレス ホステッド ネットワークを使用するアプリケーションは、 WlanHostedNetworkStopUsing または WlanHostedNetworkForceStop 関数を呼び出して、ワイヤレスホスト型ネットワークを停止するだけで済みます。 WlanHostedNetworkStartUsing 関数がワイヤレス ホステッド ネットワークを開始するために呼び出された場合、アプリケーションは WlanHostedNetworkStopUsing 関数を呼び出してワイヤレスホステッド ネットワークを停止する必要があります。 ワイヤレス Hosted Network が既に起動されている場合、または WlanHostedNetworkForceStart 関数を呼び出してワイヤレス Hosted Network を強制的に起動するアプリケーションの前に、アプリケーションは WlanHostedNetworkForceStop 関数を呼び出してワイヤレス ホステッド ネットワークを停止するか、シナリオに応じて何もしない (ワイヤレスホステッド ネットワークを開始したままにする) ことができます。

ワイヤレス ホステッド ネットワークの回復シーケンス

ワイヤレス ホステッド ネットワークを使用するアプリケーションは、他のアプリケーションのアクションの影響を受ける可能性があります。 ICS サービスと ICS を管理するためのインターフェイスは、アプリケーションが ICS 変更通知に登録する方法を提供しません。 別のアプリケーションが INetSharingConfiguration インターフェイスで EnableSharing メソッドまたは DisableSharing メソッドを呼び出して接続での共有を有効または無効にした場合、メッセージはローカル コンピューター上のユーザー インターフェイス (画面) に送信され、他のアプリケーションには送信されません。 そのため、アプリケーションは、ICS またはワイヤレス ホステッド ネットワークの変更が発生したときに回復アクションを実行するために、ワイヤレスホスト型ネットワーク通知に依存する必要があります。

ワイヤレス ホステッド ネットワークを使用するアプリケーションは、 WlanRegisterNotification を呼び出してワイヤレス ホスト型ネットワーク通知に登録する必要があります。 ワイヤレス ホステッド ネットワークのみの通知が必要な場合、アプリケーションは WlanRegisterNotification に渡される dwNotifSource パラメーターでWLAN_NOTIFICATION_SOURCE_HNWKを渡す必要があります。 他のワイヤレス通知も必要な場合は、必要な他 種類のワイヤレス通知の通知ソース定数とWLAN_NOTIFICATION_SOURCE_HNWKを組み合わせて、 dwNotifSource パラメーターでこの値を渡す必要があります。

回復シーケンスは、アプリケーションが ICS サービスを再び開始したくないと想定して、完全な ICS があるアプリケーションとないアプリケーションでも同じです。 ホストされたネットワークが停止したことを示すワイヤレスホスト型ネットワーク通知を受信したら、次の操作を行います。

  • WlanHostedNetworkForceStart というアプリケーションがワイヤレス Hosted Network を起動する場合は、WlanHostedNetworkForceStart を呼び出して Hosted Network を再起動します。 それ以外の場合 は、WlanHostedNetworkStartUsing を 呼び出して、ワイヤレスホスト型ネットワークを再起動します。

接続されているデバイスの回復シーケンス

ワイヤレスホスト型ネットワークに接続されているリモート デバイスまたはコンピューターは、ICS とワイヤレス ホステッド ネットワークに影響を与える他のアプリケーションのアクションの影響を受ける可能性があります。 幸いなことに、ほとんどのデバイスには、信号またはローミングの一時的な損失に対処するために、デバイス アプリケーションに再試行ロジックが組み込まれています。

ワイヤレス Hosted Network に接続されているデバイスまたはコンピューターで、接続が失われる可能性のある回復シーケンスは次のとおりです。

  • ワイヤレス デバイス ドライバーは、デバイス上のネットワーク スタックの上位層へのメディア切断を示します。
  • デバイス アプリケーションは、ワイヤレスホステッド ネットワークの可用性の定期的なチェックを開始します。
  • デバイス アプリケーションがワイヤレス Hosted Network を再度検出すると、デバイスはワイヤレス接続を開始します。
  • ワイヤレス ホステッド ネットワークとの接続に成功すると、デバイス アプリケーションはそれに応じて IP 設定を更新します。

ワイヤレス ホステッド ネットワークについて

ワイヤレス ホスト型ネットワークのサンプル

WlanHostedNetworkForceStart

WlanHostedNetworkInitSettings

WlanHostedNetworkQueryProperty

WlanHostedNetworkQuerySecondaryKey

WlanHostedNetworkQueryStatus

WlanHostedNetworkRefreshSecuritySettings

WlanHostedNetworkSetProperty

WlanHostedNetworkSetSecondaryKey

WlanHostedNetworkStartUsing

WlanHostedNetworkStopUsing

WlanRegisterVirtualStationNotification