2012-04-04 50 views
0

有一個PCI設備,其中包含三個NIC,由Altera以太網核心提供。必須爲NDX 5.1執行WinXPe。 MVP建議爲每個內核實施WDM驅動程序,然後使用單個NDIS驅動程序與單個WDM驅動程序通信,但我不明白這一點,因爲單個NDIS驅動程序似乎沒有任何多個端口或通道的概念。WinXPe NDIS 5.1多端口

如果在DriverEntry NDIS驅動程序爲每個以太網核心調用NdisMInitializeWrapper一次,該怎麼辦?它需要每次調用相同的DriverObject,但大概每次調用都會得到一個不同的NdisWrapperHandle。這個獨特的NdisWrapperHandle可以用作調用所有其他NDIS驅動函數的上下文說明符。

回答

0

這是行不通的; NdisMInitializeWrapper只能爲每個驅動程序調用一次。

規則是:您需要每個網絡接口都有一個設備節點。因此,如果您需要3個以太網接口,則系統中需要3個設備節點。有幾種方法可以實現:

  1. PCI總線將爲每個PCI功能編號創建一個設備節點。如果您的PCI設備向總線提供3種功能,則Windows將枚舉3個微型端口設備對象。這使得駕駛員變得非常簡單。但是,顯然,您必須能夠重新調整硬件才能做到這一點。或者,如果您只有一個PCI設備具有一個PCI功能,那麼您需要自己複用PCI枚舉的設備節點。這意味着您應該創建自己的虛擬總線驅動程序(VBD)。 PCI總線枚舉一個設備節點,它與您的VBD的驅動程序相關聯。然後你的VBD轉過身來枚舉3個子節點,每個節點都與一個微型端口相關聯。

    這種方法需要相當多的工作,因爲現在您需要編寫兩個驅動程序。幸運的是,WDF可以爲普通人編寫一個公交車司機。您的VBD需要實現代碼以共享子網絡微型端口之間的資源(中斷,配置空間)。

的大牌廠商都對自己是否選擇了選項1或選項#2分開,這樣既可以工作。從你的描述來看,這聽起來像你已經得到了實施VBD的建議。