共用方式為


回送 NDIS 封包

如果已設定NET_BUFFER_LIST結構 之 NblFlags 成員中的 NDIS_NBL_FLAGS_IS_LOOPBACK_PACKET 旗標,封包會是回送封包。 通訊協定驅動程式和篩選驅動程式可以檢查此旗標,以判斷封包是否為回送封包。

如果滿足下列三個條件,NDIS 會迴圈封包回頭:

  1. 基礎迷你埠介面卡媒體類型 NdisMedium802_3NdisMedium802_5

  2. 符合下列三個條件之一:

    1. 通訊協定系結會使用 OID_GEN_CURRENT_PACKET_FILTER OID 來設定 NDIS_PACKET_TYPE_PROMISCUOUS 設定,以指定其封包篩選 (,而且針對 Windows 8 和更新版本,未在相同的 OID) 中設定NDIS_PACKET_TYPE_NO_LOCAL,且下列任一項成立:

      • 迷你埠配接器有多個系結。
      • 有一個附加至迷你埠配接器的篩選模組,而篩選模組已註冊接收處理常式。
    2. 通訊協定系結會使用 OID_GEN_CURRENT_PACKET_FILTER OID 來設定 NDIS_PACKET_TYPE_ALL_LOCAL 設定,以指定其封包篩選準則,且下列任一項成立。

      • 迷你埠配接器有多個系結。
      • 有一個附加至迷你埠配接器的篩選模組,而篩選模組已註冊接收處理常式。
    3. 呼叫端會在NdisSendNetBufferLists函式的SendFlags參數中設定NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK旗標。

  3. 封包可由使用迷你埠介面卡 的 OID_GEN_CURRENT_PACKET_FILTER OID 所決定的封包篩選準則所決定。 以下是一些範例:

    • 如果封包是直接封包,封包中的目的地位址必須符合迷你埠配接器的 MAC 位址。
    • 如果封包是多播封包,封包篩選器必須設定NDIS_PACKET_TYPE_ALL_MULTICAST,或目的地位址符合迷你埠配接器多播地址清單中的其中一個多播位址,而且封包篩選器已設定NDIS_PACKET_TYPE_MULTICAST。
    • 如果封包是廣播封包,迷你埠配接器的封包篩選器必須設定NDIS_PACKET_TYPE_BROADCAST。
    • 迷你埠配接器的封包篩選器已設定NDIS_PACKET_TYPE_PROMISCUOUS或NDIS_PACKET_TYPE_ALL_LOCAL。

如果下列任一項成立,通訊協定系結就會接收回送封包:

  1. 通訊協定系結是封包的原始傳送者,且已設定NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK。

  2. 通訊協定系結不會在封包篩選中設定NDIS_PACKET_TYPE_NO_LOCAL。

如果下列任一項成立,通訊協定系結將不會收到回送封包:

  1. 通訊協定系結會在封包篩選中設定NDIS_PACKET_TYPE_NO_LOCAL,而不是封包的原始傳送者。

  2. 通訊協定系結是原始傳送者,但在呼叫 NdisSendNetBufferLists函式時,不會在 SendFlags參數中設定NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK。

下圖顯示回送演算法邏輯流程。

顯示回送演算法邏輯流程的流程圖。