Users: add new option --users-myself-only

This commit is contained in:
Carter Li
2024-06-12 14:02:35 +08:00
committed by 李通洲
parent ebfcd7195e
commit 5bb4dabaec
7 changed files with 89 additions and 17 deletions
+1 -1
View File
@@ -11,4 +11,4 @@ typedef struct FFUserResult
uint64_t loginTime; // ms
} FFUserResult;
const char* ffDetectUsers(FFlist* users);
const char* ffDetectUsers(FFUsersOptions* options, FFlist* users);
+6 -3
View File
@@ -15,15 +15,18 @@
#include <arpa/inet.h>
#endif
const char* ffDetectUsers(FFlist* users)
const char* ffDetectUsers(FFUsersOptions* options, FFlist* users)
{
struct utmpx* n = NULL;
setutxent();
next:
while((n = getutxent()))
while ((n = getutxent()))
{
if(n->ut_type != USER_PROCESS)
if (n->ut_type != USER_PROCESS)
continue;
if (options->myselfOnly && !ffStrbufEqualS(&instance.state.platform.userName, n->ut_user))
continue;
FF_LIST_FOR_EACH(FFUserResult, user, *users)
+9 -4
View File
@@ -10,23 +10,28 @@ static inline uint64_t to_ms(uint64_t ret)
return ret / 10000ull;
}
const char* ffDetectUsers(FFlist* users)
const char* ffDetectUsers(FFUsersOptions* options, FFlist* users)
{
WTS_SESSION_INFO_1W* sessionInfo;
DWORD sessionCount;
DWORD level = 1;
if(!WTSEnumerateSessionsExW(WTS_CURRENT_SERVER_HANDLE, &level, 0, &sessionInfo, &sessionCount))
if (!WTSEnumerateSessionsExW(WTS_CURRENT_SERVER_HANDLE, &level, 0, &sessionInfo, &sessionCount))
return "WTSEnumerateSessionsW(WTS_CURRENT_SERVER_HANDLE) failed";
for (DWORD i = 0; i < sessionCount; i++)
{
WTS_SESSION_INFO_1W* session = &sessionInfo[i];
if(session->State != WTSActive)
if (session->State != WTSActive)
continue;
FF_STRBUF_AUTO_DESTROY userName = ffStrbufCreateWS(session->pUserName);
if (options->myselfOnly && !ffStrbufEqual(&instance.state.platform.userName, &userName))
continue;
FFUserResult* user = (FFUserResult*) ffListAdd(users);
ffStrbufInitWS(&user->name, session->pUserName);
ffStrbufInitMove(&user->name, &userName);
ffStrbufInitWS(&user->hostName, session->pHostName);
ffStrbufInitWS(&user->sessionName, session->pSessionName);
ffStrbufInit(&user->clientIp);