无法使用当前令牌创建进程

时间:2011-12-21 12:01:23

标签: winapi privileges createprocess

我想从我的程序中创建一个进程并在进程中注入一个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位进程注入。

1 个答案:

答案 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函数...