Maks150988
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Использую код для проверки привилегий администратора. Код: function IsUserAdmin: Boolean; const SECURITY_NT_AUTHORITY: TSIDIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 5)); SECURITY_BUILTIN_DOMAIN_RID = $00000020; DOMAIN_ALIAS_RID_ADMINS = $00000220; var hToken : THandle; ptGroups : PTokenGroups; dwSize : DWORD; psidAdmin: PSID; i : Integer; bSuccess : Boolean; begin Result := FALSE; bSuccess := OpenThreadToken(GetCurrentThread, TOKEN_QUERY, TRUE, hToken); if ((not bSuccess) and (GetLastError = ERROR_NO_TOKEN)) then bSuccess := OpenProcessToken(GetCurrentProcess, TOKEN_QUERY, hToken); if bSuccess then try GetMem(ptGroups, 1024); bSuccess := GetTokenInformation(hToken, TokenGroups, ptGroups, 1024, dwSize); if bSuccess then try AllocateAndInitializeSid(SECURITY_NT_AUTHORITY, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, psidAdmin); {$R-} for i := 0 to ptGroups.GroupCount - 1 do if EqualSid(psidAdmin, ptGroups.Groups[i].Sid) then begin Result := TRUE; Break; end; {$R+} finally FreeSid(psidAdmin); end; finally FreeMem(ptGroups); CloseHandle(hToken); end; end; | Если пользователь не администратор - программы выдает сообщение и закрывается. Соответсвенно мне один пользователь написал что происходит такая вот ситуация, но он работает под доменной учёткой, входящей в доменную группу, прописанной в группе локальных администраторов компьютера (не в Domain Admins). Может кто знает как еще проверить привилегии администратора. |