实现:VS2008(VC9)。还是直接上代码吧,相信都可以看得懂。
1
void
CMACchangerDlg::OnBnClickedButton1()
2 {
3 HKEY hKey;
4 LPCTSTR lpKeyPath = TEXT("SYSTEM\\CurrentControlSet\\Control\\Class\\{4D36E972-E325-11CE-BFC1-08002BE10318}\\0009"); //每个电脑各不相同,实际应用时记得修改。
5 LPCTSTR pszOrigMac = TEXT("0019B95AD6D1"); //原始MAC地址
6 LPCTSTR pszNewMac = TEXT("002036525621"); //修改的MAC地址
7 SECURITY_ATTRIBUTES sa;
8 sa.nLength = sizeof(sa);
9 sa.lpSecurityDescriptor = NULL;
10 sa.bInheritHandle = TRUE;
11
12 long lOpenReturn = RegCreateKeyEx(HKEY_LOCAL_MACHINE,
13 lpKeyPath,
14 0, NULL,
15 REG_OPTION_NON_VOLATILE,
16 KEY_ALL_ACCESS,
17 &sa, &hKey, NULL);
18 if ( lOpenReturn != ERROR_SUCCESS)
19 {
20 MessageBox(TEXT("打开注册表失败,请以管理员身份运行!"), TEXT("错误"), MB_ICONWARNING);
21 RegCloseKey(hKey);
22 return;
23 }
24
25 if(MessageBox(TEXT("是否开始mac地址欺骗?"), TEXT("提示"), MB_ICONINFORMATION | MB_OKCANCEL) == IDOK)
26 {
27 if(RegSetValueEx(hKey, TEXT("NetworkAddress"), NULL, REG_SZ, (LPBYTE)pszNewMac, (DWORD) (lstrlen(pszNewMac)+1)*sizeof(TCHAR)))
28 {
29 RegCloseKey(hKey);
30 MessageBox(TEXT("无法修改注册表"), TEXT("错误"), MB_ICONWARNING);
31 return;
32 }
33 MessageBox(TEXT("修改MAC地址成功"), TEXT("提示"), MB_ICONINFORMATION);
34 }else{
35 if(RegSetValueEx(hKey, TEXT("NetworkAddress"), NULL, REG_SZ, (LPBYTE)pszOrigMac, (DWORD) (lstrlen(pszOrigMac)+1)*sizeof(TCHAR)))
36 {
37 RegCloseKey(hKey);
38 MessageBox(TEXT("无法修改注册表"), TEXT("错误"), MB_ICONWARNING);
39 return;
40 }
41 MessageBox(TEXT("已还原MAC地址"), TEXT("提示"), MB_ICONINFORMATION);
42 }
43
44 RegCloseKey(hKey);
45}
2 {
3 HKEY hKey;
4 LPCTSTR lpKeyPath = TEXT("SYSTEM\\CurrentControlSet\\Control\\Class\\{4D36E972-E325-11CE-BFC1-08002BE10318}\\0009"); //每个电脑各不相同,实际应用时记得修改。
5 LPCTSTR pszOrigMac = TEXT("0019B95AD6D1"); //原始MAC地址
6 LPCTSTR pszNewMac = TEXT("002036525621"); //修改的MAC地址
7 SECURITY_ATTRIBUTES sa;
8 sa.nLength = sizeof(sa);
9 sa.lpSecurityDescriptor = NULL;
10 sa.bInheritHandle = TRUE;
11
12 long lOpenReturn = RegCreateKeyEx(HKEY_LOCAL_MACHINE,
13 lpKeyPath,
14 0, NULL,
15 REG_OPTION_NON_VOLATILE,
16 KEY_ALL_ACCESS,
17 &sa, &hKey, NULL);
18 if ( lOpenReturn != ERROR_SUCCESS)
19 {
20 MessageBox(TEXT("打开注册表失败,请以管理员身份运行!"), TEXT("错误"), MB_ICONWARNING);
21 RegCloseKey(hKey);
22 return;
23 }
24
25 if(MessageBox(TEXT("是否开始mac地址欺骗?"), TEXT("提示"), MB_ICONINFORMATION | MB_OKCANCEL) == IDOK)
26 {
27 if(RegSetValueEx(hKey, TEXT("NetworkAddress"), NULL, REG_SZ, (LPBYTE)pszNewMac, (DWORD) (lstrlen(pszNewMac)+1)*sizeof(TCHAR)))
28 {
29 RegCloseKey(hKey);
30 MessageBox(TEXT("无法修改注册表"), TEXT("错误"), MB_ICONWARNING);
31 return;
32 }
33 MessageBox(TEXT("修改MAC地址成功"), TEXT("提示"), MB_ICONINFORMATION);
34 }else{
35 if(RegSetValueEx(hKey, TEXT("NetworkAddress"), NULL, REG_SZ, (LPBYTE)pszOrigMac, (DWORD) (lstrlen(pszOrigMac)+1)*sizeof(TCHAR)))
36 {
37 RegCloseKey(hKey);
38 MessageBox(TEXT("无法修改注册表"), TEXT("错误"), MB_ICONWARNING);
39 return;
40 }
41 MessageBox(TEXT("已还原MAC地址"), TEXT("提示"), MB_ICONINFORMATION);
42 }
43
44 RegCloseKey(hKey);
45}
运行时因为权限问题必须使用admin权限。如果不够智能,可以利用DDK添加自动重启本地连接的功能。