wince中的mac位址是在驅動中寫死的。如果不修改會造成一些網路方面的功能故障。比如不能互ping。
下面是我解決的方法:
1.新增如下登錄檔
[hkey_local_machine/comm/cs8900/parms]
"mac12"=dword:3322
"mac34"=dword:5544
"mac56"=dword:0f66
2.修改cs8900驅動
在cs8900.c檔案中,作如下修改:
word
imac3=; //新增mac位址的原始資料
//新增函式,讀取登錄檔中的mac位址的值
void
readregsister()
dwstatus = regqueryvalueex(hkmac, _t(
"mac34"
), null, &dwtype, (
lpbyte
) &mac, &dwsize);
if(dwstatus == error_success)
dwstatus = regqueryvalueex(hkmac, _t(
"mac56"
), null, &dwtype, (
lpbyte
) &mac, &dwsize);
if(dwstatus == error_success)}}
intinitcs()
boolean
cs8900readethernetaddress(
in pcs8900_adapter adapter
)return
(true);}
編譯後就可以了,這樣就讓驅動是從登錄檔中讀取mac位址了。那麼接下來我們就有辦法修改這個mac位址了。
3.寫**修改登錄檔
下面是關鍵**:
void
cwincemacdlg::readregsister()
dwstatus = regqueryvalueex(hkmac, _t(
"mac34"
), null, &dwtype, (
lpbyte
) &mac, &dwsize);
if(dwstatus == error_success)
dwstatus = regqueryvalueex(hkmac, _t(
"mac56"
), null, &dwtype, (
lpbyte
) &mac, &dwsize);
if(dwstatus == error_success)
}regclosekey( hkmac );
updatedata(false);
}void
cwincemacdlg::writeregsister()
;byte
* lpbuffer;
updatedata(true);
value=0;
wsprintf(num,l
"0x%s"
, m_edt1.getbuffer(0));
value += _ttoi(num)<<8;
wsprintf(num,l
"0x%s"
, m_edt0.getbuffer(0));
value += _ttoi(num);
lpbuffer = (
byte
*)&value;
regsetvalueex(hkmac, _t(
"mac12"
), 0, reg_dword, lpbuffer,dwsize);
value=0;
wsprintf(num,l
"0x%s"
, m_edt3.getbuffer(0));
value += _ttoi(num)<<8;
wsprintf(num,l
"0x%s"
, m_edt2.getbuffer(0));
value += _ttoi(num);
lpbuffer = (
byte
*)&value;
regsetvalueex(hkmac, _t(
"mac34"
), 0, reg_dword, lpbuffer,dwsize);
value=0;
wsprintf(num,l
"0x%s"
, m_edt5.getbuffer(0));
value += _ttoi(num)<<8;
wsprintf(num,l
"0x%s"
, m_edt4.getbuffer(0));
value += _ttoi(num);
lpbuffer = (
byte
*)&value;
regsetvalueex(hkmac, _t(
"mac56"
), 0, reg_dword, lpbuffer,dwsize);
}regclosekey( hkmac );}
4.如果有外接eeprom之類的話,那麼一般是寫在eeprom裡面的,而不是寫登錄檔。如果這種實現方式必須採用hive方式的登錄檔。不然也是儲存不了的。
5.特別說明
mac位址一般由12個16進製制數字組成,每2個為一組,前面3組代表網路硬體製造商的編號,這個一般是由ieee來分配。
後面3組代表該製造商所製造的某個網路產品的序列號。這樣也就為什麼我們說mac位址是唯一的了(當然前提是你沒有自己修改過)。
wince驅動由於比較特殊,6組值要寫入3個io裡面乙個io只能寫入16個位元組,為了方便我就不按照正常定義為兩個部分,
而是簡單定義成3個部分,這樣容易寫**。
必須說明的是mac位址前3組值不是能隨便更改的,我們一般就改動後3組就行了。非要改就要找乙個製造商的編號才行。
另外如果不修改mac位址不組網是沒有問題的,但是如果組網就會有一些小問題,比如ping,wince之間無法相互ping。當然還有別的。
如何修改wince s3c2410 的MAC位址?
wince中的mac位址是在驅動中寫死的。如果不修改會造成一些網路方面的功能故障。比如不能互ping。下面是我解決的方法 1.新增如下登錄檔 hkey local machine comm cs8900 parms mac12 dword 3322 mac34 dword 5544 mac56 dw...
3 Git如何管理修改
git跟蹤並管理修改,而非檔案。做實驗驗證。第一步,對readme.txt做乙個修改,比如加一行內容 cat readme.txt git is a distributed version control system.git is free software distributed under t...
如何修改Firefox 3快取Cache的位置
安裝了firefox,在進行設定的時候,發現沒有臨時資料夾位置的修改.為了避免使系統盤產生磁碟碎片,我們最好把所有臨時資料夾都放到非系統盤,如e盤。詳細修改步驟如下 1 開啟firefox瀏覽器 2 在位址列輸入 about config 3 查詢browser.cache.disk.parent ...