मैं कुछ कोड है जिसके साथ मैं वर्तमान सत्र उपयोगकर्ता टोकन प्राप्त करने की कोशिश कर रहा हूँ:मैं भौतिक सत्र के लिए वर्तमान उपयोगकर्ता टोकन कैसे प्राप्त कर सकता हूं?
#include <Wtsapi32.h>
DWORD activeSessionId = WTSGetActiveConsoleSessionId();
HANDLE currentToken;
BOOL queryRet = WTSQueryUserToken(activeSessionId, ¤tToken);
if (!queryRet) {
DWORD err = GetLastError();
return 0;
}
अं का मूल्य है 1314
अद्यतन 1
कोई किस्मत अब तक की कोशिश की वर्तमान प्रक्रिया SE_TCB_NAME प्रदान करने के लिए - लेकिन अभी भी WTSQueryUserToken (1314) से एक ही त्रुटि मिलती है।
HANDLE process = GetCurrentProcess();
HANDLE processToken;
BOOL openTokenRet = OpenProcessToken(
process, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &processToken);
if (!openTokenRet)
{
DWORD err = GetLastError();
return 0;
}
TOKEN_PRIVILEGES tokenPrivs;
BOOL lookupRet = LookupPrivilegeValue(
NULL, SE_TCB_NAME, &tokenPrivs.Privileges[0].Luid);
if (!lookupRet)
{
DWORD err = GetLastError();
return 0;
}
tokenPrivs.PrivilegeCount = 1;
tokenPrivs.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
BOOL adjustRet = AdjustTokenPrivileges(
processToken, FALSE, &tokenPrivs, 0, (PTOKEN_PRIVILEGES)NULL, 0);
if (!adjustRet)
{
DWORD err = GetLastError();
return 0;
}
// get the user in the active session
HANDLE currentToken;
BOOL queryRet = WTSQueryUserToken(activeSessionId, ¤tToken);
if (!queryRet) {
DWORD err = GetLastError();
return 0;
}
अद्यतन 2
:
जोड़ा गया कुछ और डिबग जानकारी है, लेकिन prevState.PrivilegeCount 0 है ...
TOKEN_PRIVILEGES prevState;
DWORD prevStateLen = 0;
BOOL adjustRet = AdjustTokenPrivileges(
processToken, FALSE, &tokenPrivs,
sizeof(TOKEN_PRIVILEGES), &prevState, &prevStateLen);
DWORD adjustErr = GetLastError();
if (!adjustRet)
{
return 0;
}
समाधान:
ऐसा लगता है कि WTSQueryUserToken केवल जब इस्तेमाल किया जा सकता लोकलसिस्टम के रूप में चल रहा है, जिसका मतलब है कि मुझे एक सेवा के रूप में चलाने और वहां से डीबग करना होगा ... दोह!
हम्म, कोशिश की लेकिन बिना किसी किस्मत के। कृपया अद्यतन जांचें 1. –
एमएसडीएन से: टोकन में न्यूस्टेट पैरामीटर में निर्दिष्ट विशेषाधिकारों में से एक या अधिक नहीं है। फ़ंक्शन इस त्रुटि मान के साथ सफल हो सकता है भले ही कोई विशेषाधिकार समायोजित न हो। पिछला चरण पैरामीटर समायोजित किए गए विशेषाधिकारों को इंगित करता है। ऐसा लगता है कि यह कार्य सफल हो सकता है लेकिन विशेषाधिकार सक्षम नहीं करता है। – Michael
आह, मैं पुष्टि कर सकता हूं GetLastError() ERROR_NOT_ALL_ASSIGNED देता है - लेकिन एडजस्टरेट का मान सत्य है। इसलिए, मैंने एक टोकन_PRIVILEGES संरचना पॉप्युलेट की है, लेकिन PrivilegeCount का मान 0 है ... क्या इसका मतलब यह नहीं बदला गया है? अद्यतन देखें 2. –