mirror of
https://github.com/fastfetch-cli/fastfetch.git
synced 2025-02-20 11:43:27 +08:00
Users: fix memleaks (Windows)
This commit is contained in:
parent
f245492679
commit
53265f6b7f
@ -654,6 +654,7 @@ if(APPLE)
|
||||
PRIVATE "-weak_framework MediaRemote -F /System/Library/PrivateFrameworks"
|
||||
)
|
||||
elseif(WIN32)
|
||||
target_compile_definitions(libfastfetch PRIVATE -D_WIN32_WINNT=0x0601)
|
||||
target_link_libraries(libfastfetch
|
||||
PRIVATE "dwmapi"
|
||||
PRIVATE "gdi32"
|
||||
|
@ -2,27 +2,7 @@
|
||||
#include "util/windows/unicode.h"
|
||||
|
||||
#include <wtsapi32.h>
|
||||
|
||||
//at the time of writing, <wtsapi32.h> of MinGW doesn't have the definition of WTSEnumerateSessionsExW
|
||||
typedef struct _WTS_SESSION_INFO_1W {
|
||||
DWORD ExecEnvId;
|
||||
WTS_CONNECTSTATE_CLASS State;
|
||||
DWORD SessionId;
|
||||
LPWSTR pSessionName;
|
||||
LPWSTR pHostName;
|
||||
LPWSTR pUserName;
|
||||
LPWSTR pDomainName;
|
||||
LPWSTR pFarmName;
|
||||
} WTS_SESSION_INFO_1W, * PWTS_SESSION_INFO_1W;
|
||||
|
||||
BOOL
|
||||
WINAPI
|
||||
WTSEnumerateSessionsExW(
|
||||
HANDLE hServer,
|
||||
DWORD* pLevel,
|
||||
DWORD Filter,
|
||||
PWTS_SESSION_INFO_1W* ppSessionInfo,
|
||||
DWORD* pCount);
|
||||
#include "wtsapi32_extend.h"
|
||||
|
||||
void ffDetectUsers(FFlist* users, FFstrbuf* error)
|
||||
{
|
||||
@ -48,7 +28,7 @@ void ffDetectUsers(FFlist* users, FFstrbuf* error)
|
||||
ffStrbufInitF((FFstrbuf*)ffListAdd(users), "%s\\%s", domainName.chars, userName.chars);
|
||||
}
|
||||
|
||||
WTSFreeMemory(sessionInfo);
|
||||
WTSFreeMemoryExW(WTSTypeSessionInfoLevel1, sessionInfo, 1);
|
||||
|
||||
if(users->length == 0)
|
||||
ffStrbufAppendS(error, "Unable to detect users");
|
||||
|
45
src/detection/users/wtsapi32_extend.h
Normal file
45
src/detection/users/wtsapi32_extend.h
Normal file
@ -0,0 +1,45 @@
|
||||
#pragma once
|
||||
|
||||
//at the time of writing, <wtsapi32.h> of MinGW doesn't have the definition of WTSEnumerateSessionsExW and friends
|
||||
|
||||
#if (_WIN32_WINNT >= 0x0601)
|
||||
|
||||
typedef struct _WTS_SESSION_INFO_1A {
|
||||
DWORD ExecEnvId;
|
||||
WTS_CONNECTSTATE_CLASS State;
|
||||
DWORD SessionId;
|
||||
LPSTR pSessionName;
|
||||
LPSTR pHostName;
|
||||
LPSTR pUserName;
|
||||
LPSTR pDomainName;
|
||||
LPSTR pFarmName;
|
||||
} WTS_SESSION_INFO_1A, *PWTS_SESSION_INFO_1A;
|
||||
|
||||
typedef struct _WTS_SESSION_INFO_1W {
|
||||
DWORD ExecEnvId;
|
||||
WTS_CONNECTSTATE_CLASS State;
|
||||
DWORD SessionId;
|
||||
LPWSTR pSessionName;
|
||||
LPWSTR pHostName;
|
||||
LPWSTR pUserName;
|
||||
LPWSTR pDomainName;
|
||||
LPWSTR pFarmName;
|
||||
} WTS_SESSION_INFO_1W, * PWTS_SESSION_INFO_1W;
|
||||
|
||||
#define WTS_SESSION_INFO_1 __MINGW_NAME_AW(WTS_SESSION_INFO_1)
|
||||
#define PWTS_SESSION_INFO_1 __MINGW_NAME_AW(PWTS_SESSION_INFO_1)
|
||||
|
||||
WINBOOL WINAPI WTSEnumerateSessionsExA(HANDLE hServer,DWORD* pLevel,DWORD Filter,PWTS_SESSION_INFO_1A* ppSessionInfo,DWORD* pCount);
|
||||
WINBOOL WINAPI WTSEnumerateSessionsExW(HANDLE hServer,DWORD* pLevel,DWORD Filter,PWTS_SESSION_INFO_1W* ppSessionInfo,DWORD* pCount);
|
||||
#define WTSEnumerateSessionsEx __MINGW_NAME_AW(WTSEnumerateSessionsEx)
|
||||
|
||||
typedef enum _WTS_TYPE_CLASS {
|
||||
WTSTypeProcessInfoLevel0,
|
||||
WTSTypeProcessInfoLevel1,
|
||||
WTSTypeSessionInfoLevel1
|
||||
} WTS_TYPE_CLASS;
|
||||
BOOL WTSFreeMemoryExA(WTS_TYPE_CLASS WTSTypeClass,PVOID pMemory,ULONG NumberOfEntries);
|
||||
BOOL WTSFreeMemoryExW(WTS_TYPE_CLASS WTSTypeClass,PVOID pMemory,ULONG NumberOfEntries);
|
||||
#define WTSFreeMemoryEx __MINGW_NAME_AW(WTSFreeMemoryEx)
|
||||
|
||||
#endif /*(_WIN32_WINNT >= 0x0601)*/
|
Loading…
x
Reference in New Issue
Block a user