summaryrefslogtreecommitdiffstats
path: root/src/libnetdata/os/os-windows-wrappers.c
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-11-25 17:33:56 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-11-25 17:34:10 +0000
commit83ba6762cc43d9db581b979bb5e3445669e46cc2 (patch)
tree2e69833b43f791ed253a7a20318b767ebe56cdb8 /src/libnetdata/os/os-windows-wrappers.c
parentReleasing debian version 1.47.5-1. (diff)
downloadnetdata-83ba6762cc43d9db581b979bb5e3445669e46cc2.tar.xz
netdata-83ba6762cc43d9db581b979bb5e3445669e46cc2.zip
Merging upstream version 2.0.3+dfsg (Closes: #923993, #1042533, #1045145).
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/libnetdata/os/os-windows-wrappers.c')
-rw-r--r--src/libnetdata/os/os-windows-wrappers.c40
1 files changed, 38 insertions, 2 deletions
diff --git a/src/libnetdata/os/os-windows-wrappers.c b/src/libnetdata/os/os-windows-wrappers.c
index 64076eae2..a79ae41f2 100644
--- a/src/libnetdata/os/os-windows-wrappers.c
+++ b/src/libnetdata/os/os-windows-wrappers.c
@@ -3,8 +3,6 @@
#include "../libnetdata.h"
#if defined(OS_WINDOWS)
-#include <windows.h>
-
long netdata_registry_get_dword_from_open_key(unsigned int *out, void *lKey, char *name)
{
DWORD length = 260;
@@ -58,4 +56,42 @@ bool netdata_registry_get_string(char *out, unsigned int length, void *hKey, cha
return status;
}
+bool EnableWindowsPrivilege(const char *privilegeName) {
+ HANDLE hToken;
+ LUID luid;
+ TOKEN_PRIVILEGES tkp;
+
+ // Open the process token with appropriate access rights
+ if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
+ return false;
+
+ // Lookup the LUID for the specified privilege
+ if (!LookupPrivilegeValue(NULL, privilegeName, &luid)) {
+ CloseHandle(hToken); // Close the token handle before returning
+ return false;
+ }
+
+ // Set up the TOKEN_PRIVILEGES structure
+ tkp.PrivilegeCount = 1;
+ tkp.Privileges[0].Luid = luid;
+ tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
+
+ // Adjust the token's privileges
+ if (!AdjustTokenPrivileges(hToken, FALSE, &tkp, sizeof(tkp), NULL, NULL)) {
+ CloseHandle(hToken); // Close the token handle before returning
+ return false;
+ }
+
+ // Check if AdjustTokenPrivileges succeeded
+ if (GetLastError() == ERROR_NOT_ALL_ASSIGNED) {
+ CloseHandle(hToken); // Close the token handle before returning
+ return false;
+ }
+
+ // Close the handle to the token after success
+ CloseHandle(hToken);
+
+ return true;
+}
+
#endif