0

私が達成しようとしているのは、プロセスが管理者以外のユーザー(Windowsログインユーザー)の下で管理者として実行されている場合のセッションIDからの実際のトークンハンドルです。

        DWORD dwSessionId = 0;
        if (false == ProcessIdToSessionId(dwProcessId, &dwSessionId))
        {
            LOG_ERROR(L"Failed obtaining session id");
            return false;
        }

        HANDLE hToken
        if (false == WTSQueryUserToken(dwSessionId, &hToken))
        {
            LOG_ERROR(L"Failed to obtain session's handle");
            return false;
        }

私の問題は、WTSQueryUserToken を呼び出すときに発生します。エラー 1314 で失敗します。これは、SE_TCB_NAME 特権で呼び出しトークンを付与する必要があることを意味します。

だから私は次のコードでそうしようとしました:

tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = luid;
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
bool bSuccess = DynamicAPI::AdjustTokenPrivileges(
    %%WHICH_TOKEN_EXACTLLY%%,
    FALSE,
    &tp,
    sizeof(TOKEN_PRIVILEGES),
    (PTOKEN_PRIVILEGES)nullptr,
    (DWORD)nullptr);

しかし、どのトークンを正確に提供する必要があるかは完全にはわかりません。%%WHICH_TOKEN_EXACTLLY%%プレースホルダーでマークしました。私のテストでは、プロセスのトークン (管理者の権限) を AdjustTokenPriviliges しようとしましたが、どちらも役に立ちませんでした。

4

2 に答える 2