MCPcopy Create free account
hub / github.com/BeneficialCode/WinArk / EnumLogonSessions

Method EnumLogonSessions

WinSysCore/LsaSecurity.cpp:12–64  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

10}
11
12std::vector<LogonSessionData> LsaSecurity::EnumLogonSessions() {
13 std::vector<LogonSessionData> sessions;
14
15 LUID* luid;
16 ULONG count;
17 if (!NT_SUCCESS(::LsaEnumerateLogonSessions(&count, &luid)))
18 return sessions;
19
20 sessions.reserve(count);
21 for (ULONG i = 0; i < count; i++) {
22 SECURITY_LOGON_SESSION_DATA* data;
23 if (NT_SUCCESS(::LsaGetLogonSessionData(luid + i, &data))) {
24 LogonSessionData sd;
25 sd.Index = i + 1;
26 sd.LogonId = data->LogonId;
27 LsaStringToWstring(data->AuthenticationPackage, sd.AuthenticationPackage);
28 LsaStringToWstring(data->DnsDomainName, sd.DnsDomainName);
29 LsaStringToWstring(data->HomeDirectory, sd.HomeDirectory);
30 LsaStringToWstring(data->HomeDirectoryDrive, sd.HomeDirectoryDrive);
31 LsaStringToWstring(data->LogonDomain, sd.LogonDomain);
32 LsaStringToWstring(data->LogonScript, sd.LogonScript);
33 LsaStringToWstring(data->LogonServer, sd.LogonServer);
34 LsaStringToWstring(data->UserName, sd.UserName);
35 LsaStringToWstring(data->Upn, sd.Upn);
36 LsaStringToWstring(data->ProfilePath, sd.ProfilePath);
37
38 sd.LogoffTime = data->LogoffTime;
39 sd.LogonTime = data->LogonTime;
40 sd.LastFailedLogon = data->LastLogonInfo.LastFailedLogon;
41 sd.LastSuccessfulLogon = data->LastLogonInfo.LastSuccessfulLogon;
42 sd.FailedAttemptCountSinceLastSuccessfulLogon = data->LastLogonInfo.FailedAttemptCountSinceLastSuccessfulLogon;
43 sd.KickOffTime = data->KickOffTime;
44 sd.UserFlags = data->UserFlags;
45 sd.LogonType = (SecurityLogonType)data->LogonType;
46 if (data->Sid)
47 ::CopySid(_countof(sd.Sid), (PSID)sd.Sid, data->Sid);
48 else
49 ::memset(sd.Sid, 0, sizeof(sd.Sid));
50
51 sd.Session = data->Session;
52 sd.PasswordCanChange = data->PasswordCanChange;
53 sd.PasswordLastSet = data->PasswordLastSet;
54 sd.PasswordMustChange = data->PasswordMustChange;
55
56 sessions.emplace_back(std::move(sd));
57
58 ::LsaFreeReturnBuffer(data);
59 }
60 }
61
62 ::LsaFreeReturnBuffer(luid);
63 return sessions;
64}
65
66std::wstring LsaSecurity::GetUserNameByLogonSession(PLUID sessionId) {
67 SECURITY_LOGON_SESSION_DATA* data;

Callers

nothing calls this directly

Calls 2

LsaStringToWstringFunction · 0.85
reserveMethod · 0.80

Tested by

no test coverage detected