我想从我的程序中创建一个进程并在进程中注入一个dll。
但我一直有这些“拒绝访问”或“客户不持有所需的权限”。错误。
这是我的代码的一部分:
HANDLE hCurrentProcess = GetCurrentProcess();
HANDLE hCurrentToken;
BOOL tokenResult = OpenProcessToken(hCurrentProcess,
TOKEN_ALL_ACCESS,
&hCurrentToken);
BOOL result = CreateProcessWithTokenW(hCurrentToken, // hToken
0, // dwLogonFlags
processToInjectInto, // lpApplicationName
NULL, // lpCommandLine
CREATE_DEFAULT_ERROR_MODE, // dwCreationFlags
NULL, // lpEnvironment
NULL, // lpCurrentDirectory
&startupInfo, // lpStartupInfo
&processInformation); // lpProcessInformation
if(!result) {
cout << GetLastError();
return 1;
}
有人可以告诉我那里有什么问题吗?在这种情况下,我有1314错误代码(客户端不持有所需的权限)。
BTW - 我正在使用Windows 7 x64。
更新:
问题是我试图从32位到64位进程注入。
答案 0 :(得分:1)
您是否检查了MSDN?
调用
CreateProcessWithTokenW
的进程必须具有。{SE_IMPERSONATE_NAME
特权。如果此功能失败ERROR_PRIVILEGE_NOT_HELD
(1314),请使用CreateProcessAsUser
或 而是CreateProcessWithLogonW
功能。通常,这个过程 来电CreateProcessAsUser
必须有SE_INCREASE_QUOTA_NAME
特权,可能需要SE_ASSIGNPRIMARYTOKEN_NAME
特权 令牌不可分配。 CreateProcessWithLogonW不需要 特权,但必须允许指定的用户帐户 以交互方式登录。一般来说,最好使用CreateProcessWithLogonW
创建具有备用凭据的流程
使用OpenProcessToken(GetCurrentProcess())
中的令牌也毫无意义,因为您可以调用正常的CreateProcess
函数...