指定 EnableDhcp 等於零的 MB 迷你埠驅動程式,在 INF 檔案中,可以在核心模式中使用 IP 輔助工具 和相關的 函式 來建立、變更和刪除 IP 位址:
若要在核心模式下使用IP協助程式函式,微型埠驅動程式必須包含Netioapi.h頭檔,並連結Netio.lib。
當迷你埠驅動程式指定 EnableDhcp 等於零時,必須執行下列作業,以通知 MB 服務是否有下列任何事件:
設定 MB 介面的 IP 位址
設定預設閘道位址
更新 DNS 位址
使用IP協助程式 API 所設定的IP位址和預設閘道會保存網路連線或中斷連線事件,或兩者。 因此,如果新的IP位址或預設閘道,或兩者的值都與目前設定的值不同,迷你埠驅動程序應該先清除先前的值,再設定網路連線事件的新值。
注意 Miniport 驅動程式可以從傳遞給 miniport 驅動程式的 MiniportInitializeEx 函式中的 NDIS_MINIPORT_INIT_PARAMETERS 結構中,找到 MB 介面的 LUID 和 Index,這些都是來自 NetLuid 或 IfIndex 成員。
重設IP位址和閘道位址
TCP/IP 堆疊的某些變更,例如載入強制篩選驅動程式,可以移除IP協助程式函式所設定的IP和閘道位址。 如果 TCP/IP 堆疊的變更移除設定,迷你埠驅動程式必須重設 IP 和閘道位址。
迷你端口驅動程式應該使用以下程式,以在位址被移除時受到通知,並且必須再度重設。
在 驅動程式初始化期間,迷你埠驅動程式應指定回呼函式,以使用 notifyIpInterfaceChange 註冊 IP 介面變更通知。 每當新增、刪除或變更IP介面時,Windows就會呼叫 函式。
在 適配卡初始化期間,迷你埠驅動程式應將 NDIS_MINIPORT_INIT_PARAMETERS 結構中的 LUID 值儲存在迷你埠驅動程式的本機適配卡上下文中,然後傳遞給 MiniportInitializeEx 函式。 值包含 NetLuid,可識別通知回呼中使用的配接器介面。
在 通知回呼中,Windows 會將下列參數傳遞給在 NotifyIpInterfaceChange註冊的通知函式:
- 指向 MIB_IPINTERFACE_ROW 結構的指標,其中包含迷你埠配接器介面的 NetLuid。
- 通知類型,可以是 MibAddInstance、MibDeleteInstance 或 MibParameterNotification。
當適配卡處於連線狀態且通知類型為 MibAddInstance時,迷你埠驅動程式應重設 IP 和閘道位址。另外,在 MIB_IPINTERFACE_ROW 中的 NetLuid 必須與在適配卡初始化過程中儲存的迷你埠驅動程式其中一個適配卡相對應。
接著,迷你埠驅動程式應遵循設定 MB 介面的 IP 位址和設定預設網關位址程式來重設個別位址。
在 驅動程式卸載期間,迷你埠驅動程式應該使用 CancelMibChangeNotify2 IP 輔助函式取消註冊通知回呼函式。
設定 MB 介面的 IP 位址
若要設定 IPv4 位址,請使用下列程式。 您可以使用類似的IP協助程式功能來設定IPv6位址。
使用 GetUnicastIpAddressTable IP 幫助函式來尋找系統中的所有 IP 位址條目。
對於其 InterfaceLuid 值符合 MB 介面的 InterfaceLuid 的每個專案:
- 找出符合上一個連線所用IP位址的IP位址條目。 第一次連線不會有先前的IP位址。
- 如果新的IP位址與先前的IP位址不同,請使用 DeleteUnicastIpAddressEntry IP協助程式函數刪除先前連線中IP位址的專案。
- 如果新的IP位址與先前的IP位址相同,請確認所需的項目已經存在。
如果迷你埠驅動程式在上一次的迴圈中找不到所需的IP位址條目,它應該新增一個新條目。
使用 InitializeUnicastIpAddressEntry IP Helper 函式來初始化 MIB_UNICASTIPADDRESS_ROW 結構,並設定結構的下列成員:
- 視需要設定 InterfaceLuid 或 InterfaceIndex 成員。
- 設定 OnlinePrefixLength 成員。 這是子網掩碼中值為一的位元數目。 例如,如果子網掩碼是 255.255.255.0,OnlinePrefixLength 應該是 24。
- 設定 位址 成員。
- 將 PrefixOrigin 成員設定為 IpPrefixOriginManual。
將初始化的 MIB_UNICASTADDRESS_ROW 結構傳遞至 CreateUnicastIpAddressEntry IP 助手函式以建立 IP 位址項目。
設定預設閘道位址
若要設定 IPv4 閘道位址,請使用下列程式。 您可以使用類似的IP協助程式功能來設定IPv6閘道位址。
使用 GetIpForwardTable2 IP 幫助器函數來取得系統中的所有路由條目。
對於 InterfaceLuid 值符合 MB 介面的 InterfaceLuid 值,且 DestinationPrefix 為 “0.0.0.0/0” 的每個專案, 呼叫 DeleteIpForwardEntry2 IP 協助程式函式,以在 NextHop 不等於新的網關地址時刪除路由。 否則,路由項目已經在系統中。
如果迷你埠驅動程式在上一個迴圈中找不到所需的路由表項,它應該使用 InitializeIpForwardEntry IP Helper 函式來新增項目,並初始化 MIB_IPFORWARD_ROW2 結構。 初始化 結構的下列成員:
InterfaceLuid 或 InterfaceIndex 。
將 DestinationPrefix 設定為 0.0.0.0/0 以作為預設閘道。 (Prefix = 0.0.0.0 和 PrefixLength = 0)
將 NextHop 設定為預設閘道的 IP 位址。
其他成員會在初始化期間設定為預設值。 迷你埠驅動程序應該使用這些成員的預設值。
將 MIB_IPFORWARD_ROW2 結構傳遞至 CreateIpForwardEntry2 IP 協助程式函式,以設定新的預設網關位址。
設定 DNS 位址
- 如 MB DNS 更新 中所述,設定 NameServer 登錄機碼,以通知 Windows 更新的 DNS 位址。