仮想ポートの削除

上にあるドライバーは、ネットワーク アダプターの NIC スイッチの既定以外の仮想ポート (VPort) を削除する OID_NIC_SWITCH_DELETE_VPORT のオブジェクト識別子 (OID) セット要求を発行します。 上にあるドライバーは、 OID_NIC_SWITCH_CREATE_VPORT の OID メソッド要求を発行することによって、以前に作成した VPort のみを削除できます。

NDIS_OID_REQUEST 構造体の InformationBuffer メンバーには、 NDIS_NIC_SWITCH_DELETE_VPORT_PARAMETERS 構造体を指すポインターが含まれています。

仮想化スタックなどの上にあるドライバーは、以前に作成した既定以外の VPort を削除できます。 上部のドライバーは、 OID_NIC_SWITCH_CREATE_VPORT の OID メソッド要求を発行して、 VPort を作成します。

OID_NIC_SWITCH_DELETE_VPORT の OID セット要求を発行する前に、上にあるドライバーで次の操作を行う必要があります。

  • 上にあるドライバーは、VPort を削除する前に、ドライバーが以前に VPort に設定したすべての受信フィルターをクリアまたは移動する必要があります。 受信フィルターは OID_RECEIVE_FILTER_SET_FILTER の OID 要求を通じて設定され、 OID_RECEIVE_FILTER_MOVE_FILTER の OID 要求を介して移動されます。

  • 上にあるドライバーは、 NDIS_NIC_SWITCH_DELETE_VPORT_PARAMETERS 構造体の VPortId メンバーを、削除する既定以外の VPort の識別子に設定します。

    上にあるドライバーは、 VPortId メンバーを NDIS_DEFAULT_PORT_NUMBER に設定することはできません。 この VPort 識別子は、ネットワーク アダプター上の PCI Express (PCIe) 物理機能 (PF) に接続されている既定の VPort 用に予約されています。 既定の VPort は常に存在し、 OID_NIC_SWITCH_DELETE_VPORT の OID セット要求では明示的に削除されません。

上にあるドライバーは、下にある PF ミニポート ドライバーに OID_NIC_SWITCH_DELETE_VPORT 要求を発行する NdisOidRequest を呼び出します。 ミニポート ドライバーは、OID_NIC_SWITCH_DELETE_VPORT 要求を受信すると、ドライバーは、次の操作を行う必要があります。

  • ドライバーは、指定された VPort に割り当てられたハードウェア リソースとソフトウェア リソースを解放する必要があります。

  • ドライバーは、PF または PCIe 仮想関数 (VF) から指定された VPort をデタッチする必要があります。

    VPort が VF に接続されている場合、仮想化スタックは、ゲスト オペレーティング システムで実行されている VF ミニポート ドライバーが以前に一時停止され、停止していることを確認します。 その結果、以前に示されたすべての VPort からの受信パケットが VF ミニポート ドライバーに返されるはずです。

    VPort が PF に接続されている場合、PF ミニポート ドライバーは、VPort に関連付けられている共有メモリへの追加 DMA を停止する必要があります。 PF ミニポート ドライバーは、VPort から以前に割り当てられたすべての受信パケットがミニポートに返されることを確認する必要があります。 PF ミニポート ドライバーは、パケットの NET_BUFFER_LIST 構造体で VPort の識別子を指定する NDIS に追加の受信指示を行うことはできません。 VPort からの指定されたすべての受信パケットが PF ミニポート ドライバーに返された後、 NdisFreeSharedMemory を呼び出すことによって、VPort に関連付けられている共有メモリを解放する必要があります。

VPort の削除には、次のポイントが適用されます。

  • 上にあるプロトコル ドライバーは、 NdisCloseAdapterEx を呼び出す前に作成したすべての既定以外の VPort を削除する必要があります。

  • 上にあるフィルター ドライバーは、 FilterDetach 関数内で作成したすべての既定以外の VPort を削除する必要があります。

  • NDIS がネットワーク アダプターの NIC スイッチを削除する OID_NIC_SWITCH_DELETE_SWITCH のセット要求を発行する前に、既定以外のすべての VPort がそのスイッチから削除されることを保証します。

  • OID_NIC_SWITCH_DELETE_SWITCH の OID 要求を使用して明示的に削除できるのは、既定以外の VPorts だけです。 既定の VPort は、PF ミニポート ドライバーが既定の NIC スイッチを削除するときに暗黙的に削除されます。 詳細については、「NIC スイッチの削除」を参照してください。