朱朱你堕落了 发表于 2023-3-22 12:39

C++如何实现写win10 hosts文件

本帖最后由 朱朱你堕落了 于 2023-3-22 14:26 编辑

的确是权限问题,谢谢各位大佬回复。

董督秀 发表于 2023-3-22 12:39

朱朱你堕落了 发表于 2023-3-22 14:16
是啊,为什么我下载了你编译的,就可以修改成功呢?这么神奇吗?

你的代码没问题,问题在这里。

你把UAC执行级别调成这个。

侃遍天下无二人 发表于 2023-3-22 13:02

可以用火绒剑监控你的进程看看嘛

hiplease 发表于 2023-3-22 13:03

打日志 看在哪里失败了

wkfy 发表于 2023-3-22 13:07

直接问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;
}

tianruo1987 发表于 2023-3-22 13:54

这个问题,八成是hosts文件权限问题。我工作中经常会需要添加hosts

董督秀 发表于 2023-3-22 14:05

为啥我编译出来的能在win10 x64虚拟机修改这个文件......
公共链接: https://t.wss.ink/f/asaldqmkaym

ljl727ljl 发表于 2023-3-22 14:05

跟着大佬好学习!

Atlantis908 发表于 2023-3-22 14:06

使用文件替换大法

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盘去

完事。

debug_cat 发表于 2023-3-22 14:13

要在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
查看完整版本: C++如何实现写win10 hosts文件