Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/windirstat/windirstat.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to '3rdparty/lua/src/modules/isadmin.c')
-rw-r--r--3rdparty/lua/src/modules/isadmin.c53
1 files changed, 53 insertions, 0 deletions
diff --git a/3rdparty/lua/src/modules/isadmin.c b/3rdparty/lua/src/modules/isadmin.c
new file mode 100644
index 0000000..4e982f3
--- /dev/null
+++ b/3rdparty/lua/src/modules/isadmin.c
@@ -0,0 +1,53 @@
+///////////////////////////////////////////////////////////////////////////////
+///
+/// Written 2012, Oliver Schneider (assarbad.net) - PUBLIC DOMAIN/CC0
+///
+/// Original filename: isadmin.c
+/// Project : WinDirStat
+/// Author(s) : Oliver Schneider
+///
+/// Purpose : Lua function, implemented in C, to check whether the
+/// user is privileged or not.
+///
+///////////////////////////////////////////////////////////////////////////////
+
+#include <Windows.h>
+#include <tchar.h>
+#include <lua.h>
+
+BOOL static IsAdmin_()
+{
+ SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY;
+ PSID pSid;
+ if (AllocateAndInitializeSid(&NtAuthority, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, &pSid))
+ {
+ BOOL bResult = FALSE;
+ if (!CheckTokenMembership( NULL, pSid, &bResult))
+ {
+ FreeSid(pSid);
+ return FALSE;
+ }
+ FreeSid(pSid);
+ return bResult;
+ }
+
+ return FALSE;
+}
+
+static int luaC_isadmin_(lua_State* L)
+{
+ static int *pcachedResult = NULL;
+ if(!pcachedResult)
+ {
+ static int cachedResult = 0;
+ cachedResult = (IsAdmin_()) ? 1 : 0;
+ pcachedResult = &cachedResult;
+ }
+ lua_pushboolean(L, *pcachedResult);
+ return 1;
+}
+
+LUA_API const luaL_Reg isadmin_funcs[] = {
+ {"isadmin", luaC_isadmin_},
+ {NULL, NULL}
+};