开机自动启动功能实现

这个函数是一个Windows程序中的功能,用于让用户选择是否将程序设置为开机自动启动。下面我将详细解释这个函数的各个部分:

功能概述

  1. 显示警告信息对话框,让用户选择是否将程序设置为开机启动

  2. 如果用户选择"是",则创建符号链接并将程序添加到注册表启动项

  3. 如果用户选择"否",程序只运行一次

  4. 如果用户选择"取消",直接退出程序

详细解析

1. 对话框显示

CString strSubKey = _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run");
CString strInfo = _T("该程序只允许用于合法的用途!\n");
strInfo += ("运行该程序,将使得这台机器处于被监控状态!\n");
strInfo += ("按下"是"按钮,该程序将被副指导你的机器上,并随系统启动而自动启动!\n");
strInfo += ("按下"否"按钮,该程序只运行一次,不会再系统内留下任何东西!\n");
int ret = MessageBox(NULL, strInfo, _T("警告"), MB_YESNOCANCEL | MB_ICONWARNING | MB_TOPMOST);
  • 设置注册表路径到Run键(开机启动项)

  • 构建警告信息字符串

  • 显示一个有"是/否/取消"按钮的警告对话框

2. 用户选择"是"的处理

if (ret == IDYES) {
    // 获取当前目录和系统目录
    char sPath[MAX_PATH] = "";
    char sSys[MAX_PATH] = "";
    std::string strExe = "\\RemoteControl.exe ";
    GetCurrentDirectoryA(MAX_PATH, sPath);
    GetSystemDirectoryA(sSys, sizeof(sSys));
    
    // 创建符号链接命令
    std::string strCmd = "mklink"+ std::string(sSys)+ strExe + std::string(sPath) + strExe;
    ret = system(strCmd.c_str());
    TRACE("ret=%d \r\n", ret);
    
    // 打开注册表键
    HKEY hKey = NULL;
    ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE, strSubKey, 0, KEY_WRITE | KEY_WOW64_64KEY ,&hKey);
    if (ret != ERROR_SUCCESS) {
        // 错误处理
    }
    
    // 设置注册表值
    CString strPath = CString(_T("%SystemRoot%\\system32\\RemoteControl.exe"));
    RegSetValueEx(hKey, _T("RemoteControl"), 0, REG_SZ, (BYTE*)(LPCTSTR)strPath, strPath.GetLength() * sizeof(TCHAR));
    if (ret != ERROR_SUCCESS) {
        // 错误处理
    }
    RegCloseKey(hKey);
}
  • 获取当前程序目录和系统目录

  • 尝试使用mklink命令在系统目录创建指向程序的符号链接

  • 打开注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

  • 添加程序路径到注册表实现开机启动

3. 其他选项处理

else if(ret==IDCANCEL){
    exit(0);  // 用户选择取消,直接退出程序
}
// 选择"否"则不做任何操作,直接返回

安全提示

这段代码实际上是在实现一个类似监控软件的自启动功能,使用时需要注意:

  • 必须获得用户明确同意

  • 必须有合法的使用目的

  • 在大多数情况下,这种功能可能被视为恶意软件行为

这个函数的设计目的是让用户选择是否让程序在开机时自动运行,但实现方式较为隐蔽,可能会引起安全软件的警觉。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值