網(wǎng)上流傳的判斷虛擬網(wǎng)卡的方式通常是判斷網(wǎng)卡名稱,以PCI開頭的網(wǎng)卡都是真實(shí)網(wǎng)卡。因?yàn)橐郧熬W(wǎng)卡都是PCI網(wǎng)卡,不是的就是虛擬網(wǎng)卡。但是這種方式不一定全部正確,因?yàn)楝F(xiàn)在有些網(wǎng)卡不是PCI網(wǎng)卡,例如USB網(wǎng)卡,但是它依然是真實(shí)網(wǎng)卡。所以這種方法就不在可靠了。 最可靠的方法是讀取注冊(cè)表來(lái)判斷,是我目前發(fā)現(xiàn)的最可靠的方法。 首先要知道網(wǎng)卡的名字,可以通過(guò)GetAdaptersInfo獲取到 然后用GetAdaptersInfo獲取和此名字相同的網(wǎng)卡信息Pip_ADAPTER_INFO結(jié)構(gòu)中的AdapterName字段。注意AdapterName并不是指我們通常看到的名字,而是一段字符和數(shù)字組合的文字,我們通常看到的網(wǎng)卡的名字是Description字段。 然后用AdapterName字段中的內(nèi)容找到注冊(cè)表中的對(duì)應(yīng)的位置,可以讓我們找到網(wǎng)卡的相信信息。 網(wǎng)卡信息存在注冊(cè)表的HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control//Class/{4D36E972-E325-11CE-BFC1-08002bE10318}中,這個(gè)鍵下面有一些子鍵,這些子鍵中的NetCfgInstanceId的值對(duì)應(yīng)的就是我們剛才查找到的AdapterName。這個(gè)子鍵中的Characteristics的值就可以判斷是否是虛擬網(wǎng)卡,Characteristics本質(zhì)是一些按位存儲(chǔ)的值得集合:
ox1 NCF_VIRTUAL 說(shuō)明組件是個(gè)虛擬適配器 ox2 NCF_SOFTWARE_ENUMERATED 說(shuō)明組件是一個(gè)軟件模擬的適配器 ox4 NCF_PHYSICAL 說(shuō)明組件是一個(gè)物理適配器 ox8 NCF_HIDDEN 說(shuō)明組件不顯示用戶接口 ox10 NCF_NO_SERVICE 說(shuō)明組件沒(méi)有相關(guān)的服務(wù)(設(shè) 備驅(qū)動(dòng)程序) ox20 NCF_NOT_USER_REMOVABLE 說(shuō)明不能被用戶刪除(例如,通過(guò)控制面板或設(shè)備管理器) ox40 NCF_MULTIPORT_INSTANCED_ADAPTER 說(shuō)明組件有多個(gè)端口,每個(gè)端口作為單獨(dú)的設(shè)備安裝。每個(gè)端口有自己的hw_id(組件ID)并可被單獨(dú)安裝,這只適合于EISA適配器 ox80 NCF_HAS_UI 說(shuō)明組件支持用戶接口(例如,Advanced Page或Customer PRoperties Sheet) ox400 NCF_FILTER 說(shuō)明組件是一個(gè)過(guò)濾器
從上面可以看出來(lái),只要用戶判斷Characteristics的值就可以判斷網(wǎng)卡是虛擬網(wǎng)卡還是物理網(wǎng)卡。 看一下這個(gè)值和4進(jìn)行與運(yùn)算是否大于0,大于0的就是物理的網(wǎng)卡。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注