crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Получить имя пользователя Windows при выполнении программы от имени администратора
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
maint Дата 25.6.2023, 8:11
  Воспользовавшись советом на VBS тут, написал для C++ и Qt5 такую вот функцию
#include <wtsapi32.h>

QString win_getlogin()
{
    QString name;
    PWTS_SESSION_INFO pSessions = NULL;
    DWORD dwCount = 0;

if (!WTSEnumerateSessions(WTS_CURRENT_SERVER_HANDLE, 0, 1, &pSessions, &dwCount)){
     log_error("win_getlogin(WTSEnumerateSessions): %s\n",
             get_win_error(GetLastError()));
} else if (dwCount == 0){
     log_error(QObject::tr("win_getlogin: No sessions available \n").toStdString().c_str());
     WTSFreeMemory(pSessions);
     return nullptr;
}
DWORD dwNumActive = 0;
for (DWORD i = 0; i < dwCount; ++i) {
     if (pSessions[i].State == WTSActive){ // has a logged in user
         ++dwNumActive;
         LPWSTR pUserName = NULL;
         DWORD dwBufSize = 0;

         if (!WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE, pSessions[i].SessionId, WTSUserName, &pUserName, &dwBufSize)){
             log_error("win_getlogin(WTSQuerySessionInformation): %s\n",
                     get_win_error(GetLastError()));
         } else {
            name = QString::fromUtf16((const ushort *) pUserName);
            if(scan_debug)
                log_debug("session user: %s\n", name.toStdString().c_str());
             WTSFreeMemory(pUserName);
         }
     }
}

if (!dwNumActive)
    log_warning(QObject::tr("win_getlogin: No users are logged inn").toStdString().c_str());
WTSFreeMemory(pSessions);
return name;
}
maint Дата 17.6.2023, 12:44
  Имеется MinGW и Windows. Выполняю программу от имени администратора, нужно получить имя пользователя текущего и по нему SID. В Linux есть getlogin который при выполнении sudo выдает имя пользователя/login, а не root. В Windows функция GetUserName выдает имя администратора от имени которого запущена, а не пользователя. getenv("USERNAME") такой же результат. Соответственно не могу получить корректный SID. Кто сталкивался, знает, как получить имя пользователя под которым прошел login?

Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 13.1.2025, 20:22