Fix admin check

This commit is contained in:
wavvs
2022-07-09 19:28:54 +03:00
parent a58b4a4cde
commit a7ab668cab
2 changed files with 14 additions and 6 deletions
+2
View File
@@ -58,6 +58,7 @@ WINADVAPI ULONG WINAPI ADVAPI32$LsaNtStatusToWinError(NTSTATUS Status);
WINADVAPI WINBOOL WINAPI ADVAPI32$RevertToSelf();
WINADVAPI WINBOOL WINAPI ADVAPI32$OpenThreadToken(HANDLE ThreadHandle, DWORD DesiredAccess, BOOL OpenAsSelf,
PHANDLE TokenHandle);
WINADVAPI WINBOOL WINAPI ADVAPI32$CheckTokenMembership(HANDLE TokenHandle, PSID SidToCheck, PBOOL IsMember);
// secur32
WINBASEAPI NTSTATUS WINAPI SECUR32$LsaGetLogonSessionData(PLUID LogonId,
@@ -111,6 +112,7 @@ WINBASEAPI NTSTATUS WINAPI SECUR32$LsaConnectUntrusted(PHANDLE LsaHandle);
#define ADVAPI32$LsaNtStatusToWinError LsaNtStatusToWinError
#define ADVAPI32$RevertToSelf RevertToSelf
#define ADVAPI32$OpenThreadToken OpenThreadToken
#define ADVAPI32$CheckTokenMembership CheckTokenMembership
#define SECUR32$LsaGetLogonSessionData LsaGetLogonSessionData
#define SECUR32$LsaFreeReturnBuffer LsaFreeReturnBuffer
+12 -6
View File
@@ -86,13 +86,19 @@ SYSTEMTIME ConvertToSystemtime(LARGE_INTEGER li) {
}
BOOL IsHighIntegrity(HANDLE TokenHandle) {
TOKEN_ELEVATION elevation;
DWORD dwSize;
if (ADVAPI32$GetTokenInformation(TokenHandle, TokenElevation, &elevation, sizeof(elevation), &dwSize)) {
return elevation.TokenIsElevated;
BOOL b;
SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY;
PSID AdministratorsGroup;
b = ADVAPI32$AllocateAndInitializeSid(&NtAuthority, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0,
0, 0, 0, 0, &AdministratorsGroup);
if (b) {
if (!ADVAPI32$CheckTokenMembership(NULL, AdministratorsGroup, &b)) {
b = FALSE;
}
ADVAPI32$FreeSid(AdministratorsGroup);
}
return FALSE;
return b;
}
BOOL IsSystem(HANDLE TokenHandle) {