呼び出し中に非常に一般的なバグがありますWTSQueryUserToken()
。false を返し、GetLastError()
show meを返しますERROR_PRIVILEGE_NOT_HELD
。権限を設定しようとしましたが (OK を返します)、WTSQueryUserToken の呼び出しで同じ問題が発生しました。
LUID luid;
bRet = LookupPrivilegeValue(NULL, SE_TCB_NAME, &luid);
if (!bRet) {
hr = GetLastError();
return hr;
}
TOKEN_PRIVILEGES adjTokenPrivileges;// = { 0 };
adjTokenPrivileges.PrivilegeCount = 1;
adjTokenPrivileges.Privileges[0].Luid = luid;
adjTokenPrivileges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
//CSampleCredential::Log("AdjustTokenPrivileges...");
DWORD dwOldTPLen;
bRet = AdjustTokenPrivileges(processToken, FALSE, &adjTokenPrivileges, sizeof(TOKEN_PRIVILEGES), &oldTokenPrivileges, &dwOldTPLen);
if (bRet) {
hr = GetLastError();
if (hr == ERROR_SUCCESS);
else if (hr == ERROR_NOT_ALL_ASSIGNED) {
// Enabled by default
}
}
else {
hr = GetLastError();
return hr;
}
//CSampleCredential::Log("WTSGetActiveConsoleSessionId...");
DWORD conSessId = WTSGetActiveConsoleSessionId();
if (conSessId == 0xFFFFFFFF) {
// There is no session attached to the console
return ERROR_SUCCESS;
}
//impersonationToken = GetCurrentUserToken();
//CSampleCredential::Log("WTSQueryUserToken...");
bRet = WTSQueryUserToken(conSessId, &impersonationToken);
if (!bRet) {
hr = GetLastError();
return hr;
}
サービスの特典もOK
OS: Windows7 64