Я внедряю процедуру разблокировки Windows. Мне нужно знать, какие пользователи вошли в систему на данный момент.
Я пытаюсь сделать это с LsaEnumerateLogonSessions(...)
а также LsaGetLogonSessionData(...)
методы.
Но в результате я получаю Session Info не только для вошедших в систему пользователей, но и для тех, кто вышел из системы.
Кроме того, если пользователь вышел из системы и затем вошел в систему, появляется еще одна запись сеанса пользователя и т. Д.
Похоже, что результатом является не список текущих сеансов входа в систему, а список всех сеансов входа в систему, существовавших с момента последнего включения питания.
Краткий пример кода:
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);
}
Есть ли какие-то решения?
Решение состоит в том, чтобы позвонить WTSEnumerateSessions
чтобы получить список текущих сеансов, а затем позвоните WTSQuerySessionInformation
для каждой сессии, чтобы получить расширенную информацию о сессии (например, имя пользователя и т. д.)
Других решений пока нет …