gpt4 book ai didi

c++ - 在 CMD 中使用 CreateProcessWithTokenW 启动 CMD

转载 作者:行者123 更新时间:2023-11-30 16:07:25 41 4
gpt4 key购买 nike

我有一个控制台应用程序,它调用 CreateProcessWithTokenW() WinAPI 函数来创建一个启动 cmd 控制台的新进程。通过调用它,它会启动一个新的 CMD 窗口。我想在调用 cmd 窗口(而不是在新窗口中)生成另一个 cmd。

所以我想模拟相同的行为,就像启动 cmd 并输入“cmd”一样。

ret = CreateProcessWithTokenW(pNewToken, 0, L"C:\\Windows\\System32\\cmd.exe", NULL, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);

最佳答案

这是一个最小的可重现代码片段。我添加了 CreateProcess 而不是 CreateProcessWithToken...如果我为第五个参数 (dwCreationFlag) 定义 0,那么它会在 Powershell 中启动 CMD。但对于 CreateProcessWithToken ,行为并不相同。

使用提升的 powershell 运行此代码(因为它需要 Se_Debug_Priv)

#include <stdio.h> 
#include <Windows.h>
#include <WinBase.h>
#include <iostream>
#include <tchar.h>

int main() {
//DEFINE HERE PID OF winlogon.exe
DWORD pid = 940;

HANDLE currentProcess = {};
HANDLE AccessToken = {};
currentProcess = OpenProcess(PROCESS_QUERY_INFORMATION, TRUE, pid);
OpenProcessToken(currentProcess, TOKEN_ASSIGN_PRIMARY | TOKEN_DUPLICATE | TOKEN_IMPERSONATE | TOKEN_QUERY, &AccessToken);
HANDLE pToken = AccessToken;
SECURITY_IMPERSONATION_LEVEL seImpersonateLevel = SecurityImpersonation;
TOKEN_TYPE tokenType = TokenPrimary;
HANDLE pNewToken = new HANDLE;
DuplicateTokenEx(pToken, MAXIMUM_ALLOWED, NULL, seImpersonateLevel, tokenType, &pNewToken);
STARTUPINFO si = {};
PROCESS_INFORMATION pi = {};

//TEST1
//Creates a new window for both functions so the 5th seems to be ignored
CreateProcessWithTokenW(pNewToken, 0, L"C:\\Windows\\System32\\cmd.exe", NULL, 0, NULL, NULL, &si, &pi);
CreateProcessWithTokenW(pNewToken, 0, L"cmds.bat", NULL, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);

//TEST2
//Create a new windows, assumed behavior
CreateProcessW(L"C:\\Windows\\System32\\cmd.exe", NULL, NULL, NULL, TRUE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);
//Creates also a new window, NOT assumed behavior
CreateProcessW(L"C:\\Windows\\System32\\cmd.exe", NULL, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi);
return 0;
}

关于c++ - 在 CMD 中使用 CreateProcessWithTokenW 启动 CMD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59631834/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com