C语言实现:需要一款软件,程序,EXE等都可以

假设 我自己的程序名为 游戏.exe 需要的程序为 XX.exe
已有条件:来宾用户已启用,用户名,密码都有,现成的以其他用户身份运行的 bat文件也有,双击bat文件,即可以其他用户身份运行 游戏.exe

需求:
首先打开XX.exe 该程序直接后台运行,不需要界面或任何提示,并且直接关联 “游戏.exe”
当管理员的身份双击运行“游戏.exe” 此时 XX.exe收到指令,阻止管理员运行 “游戏.exe”,并运行bat或者直接以其他用户身份运行 “游戏.exe”

表面看起来与正常启动 “游戏.exe” 一模一样,但实际上 任务管理器 进程 中, “游戏.exe” 此时已经变成了 来宾的身份比如 Guest。

提到的需求涉及到在C语言中编写一个程序,它可以以不同的用户身份运行其他程序,并在管理员身份下阻止某个程序的运行。实现这样的功能需要使用操作系统提供的特定功能和权限控制机制。

在Windows操作系统下,可以使用Windows API来实现此功能。以下是一个简单的C语言示例代码,用于以不同的用户身份运行其他程序:


#include <stdio.h>
#include <windows.h>

int main() {
    // 定义要运行的程序路径
    const char* programPath = "C:\\Path\\To\\XX.exe";

    // 定义要运行的用户名和密码
    const char* username = "guest";
    const char* password = "guestpassword";

    // 创建进程启动信息和进程信息结构体
    STARTUPINFOA startupInfo;
    PROCESS_INFORMATION processInfo;

    // 初始化启动信息结构体
    ZeroMemory(&startupInfo, sizeof(startupInfo));
    startupInfo.cb = sizeof(startupInfo);

    // 以指定的用户名和密码创建进程,并运行指定的程序
    BOOL result = CreateProcessWithLogonA(username, NULL, password, LOGON_WITH_PROFILE, NULL, programPath, 0, NULL, NULL, &startupInfo, &processInfo);
    if (result) {
        printf("程序已以指定用户身份启动\n");
        // 等待进程结束
        WaitForSingleObject(processInfo.hProcess, INFINITE);
        // 关闭进程和线程句柄
        CloseHandle(processInfo.hProcess);
        CloseHandle(processInfo.hThread);
    } else {
        printf("无法以指定用户身份启动程序,错误码:%d\n", GetLastError());
    }

    return 0;
}

上述代码使用了CreateProcessWithLogonA函数来以指定的用户名和密码创建进程并运行指定的程序(XX.exe)。请注意,此函数需要在管理员权限下运行。

然而,通过一个程序阻止管理员运行另一个程序并以不同的用户身份运行是相对复杂的,因为需要涉及到权限控制和安全性考虑。这超出了简单的示例代码的范围,需要更详细的讨论和实现。建议在实际应用中,参考相关的操作系统文档和安全机制,以确保安全性和合规性。