Получение информации о текущих сеансах входа в систему (Visual C++, Win 7)

Я реализую процедуру разблокировки Windows. Мне нужно знать, какие пользователи вошли в систему в данный момент.

Я пытаюсь сделать это методами LsaEnumerateLogonSessions(...) и LsaGetLogonSessionData(...).

Но в результате я получаю информацию о сеансе не только для авторизованных пользователей, но и для тех, кто вышел из системы. Кроме того, если пользователь вышел из системы, а затем вошел в систему, появляется еще одна запись сеанса пользователя и т. д.

Похоже, что результатом является не список текущих сеансов входа в систему, а список всех сеансов входа, существовавших с момента последнего включения питания.

Краткий пример кода:

    LsaEnumerateLogonSessions(sessionCount, &sessionList);
    for(i=0;i<*sessionCount;i++){
        status = LsaGetLogonSessionData(sessionList+i,&sessionData);
        printf("LUID: %I64d \n", sessionData->LogonId);
        wprintf(L"user name: %s\n", sessionData->UserName.Buffer);
    }

Есть ли решения?


person bilboquet    schedule 27.11.2013    source источник
comment
Вероятно, вам следует использовать функцию WTSEnumerateSessions, чтобы узнать пользователей, вошедших в систему.   -  person João Augusto    schedule 27.11.2013
comment
Большое тебе спасибо. Это действительно решение.   -  person bilboquet    schedule 02.12.2013


Ответы (1)


Решение состоит в том, чтобы вызвать WTSEnumerateSessions для получения списка текущих сеансов, а затем вызвать WTSQuerySessionInformation для каждого сеанса, чтобы получить расширенную информацию о сеансе (например, имя пользователя и т. д.).

person bilboquet    schedule 02.12.2013