読者です 読者をやめる 読者になる 読者になる

子プロセス起動時に管理者権限での実行を強制する

win32api

ShellExecuteExでlpVerb=runasにすれば良いらしい。

#include <windows.h>
#include <shellapi.h>
#include <cstdio>

int
main(int, const char**) {
    SHELLEXECUTEINFO sei = {};
    sei.cbSize = sizeof(sei);
    sei.fMask |= SEE_MASK_WAITFORINPUTIDLE;
    sei.fMask |= SEE_MASK_FLAG_NO_UI;
    sei.fMask |= SEE_MASK_NO_CONSOLE;
    sei.fMask |= SEE_MASK_NOASYNC;
    sei.fMask |= SEE_MASK_NOCLOSEPROCESS;
    sei.lpVerb = "runas";
    sei.lpFile = "notepad";
    sei.nShow = SW_SHOWNORMAL;
    if(!ShellExecuteEx(&sei)) {
        return -1;
    }
    std::printf("hInstApp = 0x%08llx\n", uintptr_t(sei.hInstApp));
    std::printf("hProcess = 0x%08llx\n", uintptr_t(sei.hProcess));
    WaitForSingleObject(sei.hProcess, INFINITE);
    return 0;
}

ShellExecuteExってCreateProcessに渡すSTARTUPINFOにあるような子プロセスの標準出力をリダイレクトで拾うにはどうしたらいいんだろうか?