次の方法で共有


MB ミニポート ドライバー IP アドレス通知のガイドライン

INF ファイルで EnableDhcp を 0 に指定する MB ミニポート ドライバーは、IP Helper と関連するカーネル モードの 関数 を使用して、IP アドレスを作成、変更、削除できます:

カーネル モードで IP ヘルパー関数を使用するには、ミニポート ドライバーに、Netioapi.h ヘッダー ファイルと Netio.lib に対するリンクを含める必要があります。

ミニポート ドライバーが 0 に等しい EnableDhcp を指定すると、MB サービスに次のいずれかのイベントについて通知する、以下の操作を実行する必要があります:

  • MB インターフェイスの IP アドレスを設定する

  • 既定のゲートウェイ アドレスを設定する

  • DNS アドレスを更新する

IP ヘルパー API を使用して設定された IP アドレスと既定のゲートウェイは、ネットワーク接続または切断イベント、またはその両方を保持します。 したがって、新しい IP アドレスまたは既定のゲートウェイ、またはその両方の値が現在設定されている値と異なる場合、ミニポート ドライバーは、ネットワーク接続イベントで新しい値を設定する前に、最初に前の値をクリアする必要があります。

メモ ミニポート ドライバーは、ミニポート ドライバーの MiniportInitializeEx 関数に渡される NDIS_MINIPORT_INIT_PARAMETERS 構造体の NetLuid または IfIndex メンバーから、MB インターフェイスの LUIDインデックス を見つけることができます。

IP アドレスとゲートウェイ アドレスのリセット

必須フィルター ドライバーの読み込みなど、TCP/IP スタックに対する特定の変更により、IP ヘルパー関数によって設定された IP アドレスとゲートウェイ アドレスを削除できます。 TCP/IP スタックの変更により設定が削除される場合、ミニポート ドライバーは、IP アドレスとゲートウェイ アドレスをリセットする必要があります。

アドレスが削除されたときに通知を受け取るために、ミニポート ドライバーは次の手順を使用する必要があり、再びリセットする必要があります。

  1. ドライバーの初期化中に、ミニポート ドライバーは、NotifyIpInterfaceChange を使用して IP インターフェイス変更通知に登録するコールバック関数を指定する必要があります。 WINDOWS は、IP インターフェイスが追加、削除、または変更されるたびに関数を呼び出します。

  2. アダプターの初期化中に、ミニポート ドライバーはミニポート ドライバーのローカル アダプター コンテキストに、ミニポート ドライバーの MiniportInitializeEx 関数に渡される NDIS_MINIPORT_INIT_PARAMETERS 構造体の LUID 値を保存する必要があります。 値には、通知コールバックで使用されるアダプターのインターフェイスを識別する NetLuid が含まれています。

  3. 通知コールバックでは、Windows は NotifyIpInterfaceChange で登録された通知関数に次のパラメーターを渡します:

    • ミニポート アダプターのインターフェイスの NetLuid を含む MIB_IPINTERFACE_ROW 構造体へのポインター。
    • 通知の種類、MibAddInstanceMibDeleteInstanceMibParameterNotification のいずれか。

    アダプターが接続状態で、通知の種類が MibAddInstance であり、MIB_IPINTERFACE_ROWNetLuid はアダプターの初期化中に保存されたミニポート ドライバーのアダプターのいずれかに対応する場合、ミニポート ドライバーは IP アドレスとゲートウェイ アドレスをリセットする必要があります。

    それからミニポート ドライバーは、MB インターフェイスの IP アドレスの設定と既定のゲートウェイ アドレスの設定の手順に従って、それぞれのアドレスをリセットする必要があります。

  4. ドライバーのアンロード中に、ミニポート ドライバーは CancelMibChangeNotify2 IP ヘルパー関数を使用して、通知コールバック関数の登録を解除する必要があります。

MB インターフェイスの IP アドレスの設定

IPv4 アドレスを設定するには、次の手順に従います。 同様の IP ヘルパー機能を使用して、IPv6 アドレスを設定できます。

  1. GetUnicastIpAddressTable IP ヘルパー関数を使用して、システム内のすべての IP アドレス エントリを検索します。

  2. InterfaceLuid 値が MB インターフェイスの InterfaceLuid と一致するエントリごとに、次の手順を実行します:

    1. 前の接続で使用した IP アドレスと一致する IP アドレス エントリを見つけます。 初回接続の場合、以前の IP アドレスはありません。
    2. 新しい IP アドレスが以前の IP アドレスと異なる場合は、DeleteUnicastIpAddressEntry IP ヘルパー関数を使用して、以前の接続 IP アドレスの IP アドレス エントリを削除します。
    3. 新しい IP アドレスが以前の IP アドレスと同じ場合は、目的のエントリが既に存在することを確認します。
  3. ミニポート ドライバーが前のループで目的の IP アドレス エントリを見つけられなかった場合は、新しいエントリを追加する必要があります。

    1. InitializeUnicastIpAddressEntry IP ヘルパー関数を使用して、MIB_UNICASTIPADDRESS_ROW 構造体を初期化し、構造体の次のメンバーを設定します。

      1. 必要に応じて、InterfaceLuid または InterfaceIndex メンバーを設定します。
      2. OnlinePrefixLength メンバーを設定します。 これは、サブネット マスク内の 1 の値を持つビット数です。 たとえば、サブネット マスクが 255.255.255.0 の場合、OnlinePrefixLength は 24 である必要があります。
      3. Address メンバーを設定します。
      4. PrefixOrigin メンバーを IpPrefixOriginManual に設定します。
    2. 初期化された MIB_UNICASTADDRESS_ROW 構造体を CreateUnicastIpAddressEntry IP ヘルパー関数に渡して、IP アドレス エントリを作成します。

既定のゲートウェイ アドレスの設定

IPv4 ゲートウェイ アドレスを設定するには、次の手順に従います。 同様の IP ヘルパー機能を使用して、IPv6 ゲートウェイ アドレスを設定できます。

  1. GetIpForwardTable2 IP ヘルパー関数を使用して、システム内のすべてのルーティング エントリを取得します。

  2. InterfaceLuid 値が MB インターフェイスの InterfaceLuid 値と一致し、DestinationPrefix が "0.0.0.0/0"であるエントリごとに、DeleteIpForwardEntry2 IP ヘルパー関数を呼び出して、NextHop が新しいゲートウェイ アドレスと等しくない場合にルートを削除します。 それ以外の場合、ルーティング エントリはシステムに既に存在します。

  3. ミニポート ドライバーが前のループで目的のルーティング エントリを見つけられなかった場合は、InitializeIpForwardEntry IP ヘルパー関数を使用して新しいエントリを追加して、MIB_IPFORWARD_ROW2 構造体を初期化する必要があります。 構造体の次のメンバーを初期化します。

    InterfaceLuid または InterfaceIndex

    既定のゲートウェイの DestinationPrefix を 0.0.0.0/0 に設定します。 (Prefix = 0.0.0.0 および PrefixLength = 0)

    NextHop を既定のゲートウェイの IP アドレスに設定します。

    他のメンバーは、初期化中に既定値に設定されます。 ミニポート ドライバーは、これらのメンバーの既定値を使用する必要があります。

  4. MIB_IPFORWARD_ROW2 構造体を CreateIpForwardEntry2 IP ヘルパー関数に渡して、新しい既定のゲートウェイ アドレスを設定します。

DNS アドレスを設定するには

  • MB DNS 更新」の説明に従って NameServer レジストリ キーを設定して、更新された DNS アドレスについて Windows に通知します。