Не удается создать процесс с текущим токеном - PullRequest
0 голосов
/ 21 декабря 2011

Я хочу создать процесс из моей программы и внедрить 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 код ошибки (требуемая привилегия не удерживается клиентом).

Кстати - я использую windows 7 x64.

Обновление :

Проблема заключалась в том, что я пытался внедрить процесс с 32-битного на 64-битный.

1 Ответ

1 голос
/ 21 декабря 2011

Вы проверяли 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 ...

...