C++如何实现写win10 hosts文件
本帖最后由 朱朱你堕落了 于 2023-3-22 14:26 编辑的确是权限问题,谢谢各位大佬回复。 朱朱你堕落了 发表于 2023-3-22 14:16
是啊,为什么我下载了你编译的,就可以修改成功呢?这么神奇吗?
你的代码没问题,问题在这里。
你把UAC执行级别调成这个。
可以用火绒剑监控你的进程看看嘛 打日志 看在哪里失败了 直接问chatGTP给的答案。
#include <iostream>
#include <fstream>
int main() {
std::ofstream myfile;
myfile.open("C:\\Windows\\System32\\drivers\\etc\\hosts", std::ios_base::app);
if (!myfile.is_open()) {
std::cout << "Error opening file";
return -1;
}
myfile << "127.0.0.1 localhost" << std::endl;
myfile.close();
return 0;
} 这个问题,八成是hosts文件权限问题。我工作中经常会需要添加hosts 为啥我编译出来的能在win10 x64虚拟机修改这个文件......
公共链接: https://t.wss.ink/f/asaldqmkaym 跟着大佬好学习! 使用文件替换大法
1、在桌面建个TXT文件:hosts.txt
2、把C盘里的hosts文件里的内容,全部复制粘贴到hosts.t
3、桌面hosts.txt文件加一行:127.0.0.1 www.baidu.com
4、把C盘的hosts文件改个名:host_bak
5、把桌面的hosts.txt文件改名,去掉后缀.txt,改成hosts
6、把桌面的hosts文件放到C盘去
完事。 要在Windows 10中修改Hosts文件,您需要具有管理员权限才能进行更改。如果您的程序没有足够的权限,它将无法写入Hosts文件。您可以使用以下方法:
以管理员身份运行您的C++程序,这样您就有足够的权限来修改Hosts文件。
在代码中使用Windows API函数来提升您的程序权限。以下是一个示例代码:
```
#include <iostream>
#include <windows.h>
int main() {
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) {
std::cout << "Failed to open process token." << std::endl;
return 1;
}
if (!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tkp.Privileges.Luid)) {
std::cout << "Failed to lookup privilege value." << std::endl;
CloseHandle(hToken);
return 1;
}
tkp.PrivilegeCount = 1;
tkp.Privileges.Attributes = SE_PRIVILEGE_ENABLED;
if (!AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, NULL, NULL)) {
std::cout << "Failed to adjust token privileges." << std::endl;
CloseHandle(hToken);
return 1;
}
CloseHandle(hToken);
// 现在你有足够的权限来修改Hosts文件了
//在这里写你修改的代码
return 0;
}
```
页:
[1]
2