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