因為各類緣由,我們須要獲取機器上的mac地址,然而現(xiàn)今虛擬機的存在,促使我們不好分辨哪個是真正的數(shù)學網(wǎng)卡。在網(wǎng)路上也說明了一些技巧。在這兒我先記錄一下。獲取mac的方式,可以一下“取得系統(tǒng)中網(wǎng)卡MAC地址的三種方式”。我們里是通過來獲取網(wǎng)卡信息的,這個返回的結果中,我非常的須要主要下邊幾個數(shù)組,為何這兒沒有用到呢。其中有一種方法就是通過中是否存在PCI這樣的字符串來進行判定是否為化學網(wǎng)卡的。
我要介紹的方式是通過使用來判定的。這個就要涉及到注冊表和函數(shù)了,其實有點復雜。是一個guid數(shù)據(jù),這個數(shù)據(jù)可以讓我們查詢這個所在網(wǎng)卡信息。HLM\\\\\{-E325-11CE-BFC1-}\{}\下邊去瞧瞧,在這個下邊通常有,這個可以用了表示是否為無線網(wǎng)卡,還有一個Name,這個是用于在網(wǎng)路聯(lián)接中顯示的名稱,通常真是的pci板載網(wǎng)卡稱作本地聯(lián)接虛擬網(wǎng)卡和物理網(wǎng)卡,其實也可以用這個方式來判定是否為化學網(wǎng)卡了。還有一個就是,這個指是有系統(tǒng)在枚舉pci的時侯設置的,這個值顯然就是id虛擬網(wǎng)卡和物理網(wǎng)卡,你可以在設備管理其中聽到這個。
接出來就是我想說的拿來判定是否為化學網(wǎng)卡的方式了。雖然這個挺簡單的,只要我們曉得化學網(wǎng)卡,肯定是掛在某個bus里面的,因而對于虛擬網(wǎng)卡,肯定是沒有bus號的。主要的代碼在下邊。我想應當可以說明白了。
char[]="-E325-11CE-BFC1-";
hr=(,&guid);
=(&guid,NULL,NULL,);//gettheinfo
if(==)
("");
char[]={0};
char[]={0};
ULONGdwLen=;
ULONG=-1;
for(inti=0;o(,i,&);++i)//enuminfo
(,());
=-1;
(,&,,,NULL);
if(!(,&,,NULL,(PBYTE)&,
(ULONG),NULL))
;
if(.()==0&&!=-1)
bRet=TRUE;
break;
//釋放set
();
