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={0x3322,0x5544,0x0F66}; //添加MAC地址的原始数据
- //添加函数,读取注册表中的MAC地址的值
- void ReadRegsister()
- {
- HKEY hkMAC = NULL;
- DWORD MAC;
- DWORD dwStatus, dwType, dwSize;
- TCHAR gszBaseInstance[256] = _T("//Comm//CS8900//Parms");
- // open the registry key and read our configuration
- dwStatus = RegOpenKeyEx(HKEY_LOCAL_MACHINE, gszBaseInstance, 0, KEY_ALL_ACCESS, &hkMAC);
- dwType = REG_DWORD;
- if(dwStatus == ERROR_SUCCESS && dwType == REG_DWORD)
- {
- dwSize = sizeof(DWORD);
- //下面读取失败的话那么就用初始值作为MAC地址
- dwStatus = RegQueryValueEx(hkMAC, _T("MAC12"), NULL, &dwType, (LPBYTE) &MAC, &dwSize);
- if (dwStatus == ERROR_SUCCESS)
- {
- iMAC[0]=MAC;
- }
- dwStatus = RegQueryValueEx(hkMAC, _T("MAC34"), NULL, &dwType, (LPBYTE) &MAC, &dwSize);
- if (dwStatus == ERROR_SUCCESS)
- {
- iMAC[1]=MAC;
- }
- dwStatus = RegQueryValueEx(hkMAC, _T("MAC56"), NULL, &dwType, (LPBYTE) &MAC, &dwSize);
- if (dwStatus == ERROR_SUCCESS)
- {
- iMAC[2]=MAC;
- }