私が達成しようとしているのは、プロセスが管理者以外のユーザー(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 しようとしましたが、どちらも役に立ちませんでした。