C ++ Windows - CreateProcessAsUser () завершается ошибкой, но без ошибок, если для манифеста требуются права администратора - PullRequest
0 голосов
/ 19 июня 2019

У меня есть простая программа, просто пустой графический интерфейс, который запускается из службы SYSTEM (моей) следующим образом:

    DWORD creationFlags = CREATE_NEW_PROCESS_GROUP | CREATE_UNICODE_ENVIRONMENT | DETACHED_PROCESS | EXTENDED_STARTUPINFO_PRESENT;

    auto returnCode = ::CreateProcessAsUser(
        *m_userToken,
        nullptr,
        LPWSTR(commandLineUtf16),
        nullptr,
        nullptr,
        FALSE, // lets not inherit any handles from the service!
        creationFlags,
        environmentBuffer,
        LPWSTR(effectiveWorkingDirectory.utf16()),
        reinterpret_cast<LPSTARTUPINFO>(&startupInfo),
        &processInformation
    );

Если в манифесте программы есть requestedExecutionLevel="asInvoker", то все в порядке,Он может быть запущен от администратора и не администратора.В противном случае, если не"asInvoker", CreateProcessAsUser(...) возвращает FALSE и GetLastError() равно 0.

Я полностью застрял.Если ошибки нет, почему она не работает?Если я запускаю программу напрямую, она всегда работает (администратор, не администратор, asInvoker, requireAdministrator ...).

Как найти причину сбоя?

Запуск в Windows 10Оценка предприятия 64 бит ВМ, UAC заполнен на

...