C ++ Windows-CreateProcessAsUser()失败,但如果清单文件需要管理员权限,则没有错误

时间:2019-06-19 09:58:53

标签: c++ windows manifest uac createprocessasuser

我有一个简单的程序,只有一个空的GUI,可以通过以下方式从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位VM上运行,UAC已满

0 个答案:

没有答案