Показать сообщение отдельно
  #5  
Старый 18.02.2017, 15:10
Аватар для ffpereverzev
ffpereverzev ffpereverzev вне форума
Новичок
 
Регистрация: 14.02.2017
Сообщения: 50
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Чего-то я не очень понимаю, куда мне деть этот код. У меня не консольное приложение. А при объявлении новой категории
Код:
type
PTOKEN_GROUPS = TOKEN_GROUPS^;
проект перестает собираться. Ну и дальше по коду вылезает целая куча ошибок.

Цитата:
Сообщение от Alegun
А не факт, что одмином запускается, утилита ведь системная и должна выпоняться из-под System, можно кстати и проверить на администратора
Код:
type
PTOKEN_GROUPS = TOKEN_GROUPS^;

function RunningAsAdministrator(): Boolean;
var
SystemSidAuthority: SID_IDENTIFIER_AUTHORITY = SECURITY_NT_AUTHORITY;
psidAdmin: PSID;
ptg: PTOKEN_GROUPS = nil;
htkThread: Integer; { HANDLE }
cbTokenGroups: Longint; { DWORD }
iGroup: Longint; { DWORD }
bAdmin: Boolean;
begin
Result := false;
if not OpenThreadToken(GetCurrentThread(), // get security token
   TOKEN_QUERY, FALSE, htkThread) then
   if GetLastError() = ERROR_NO_TOKEN then
   begin
     if not OpenProcessToken(GetCurrentProcess(),
       TOKEN_QUERY, htkThread) then
       Exit;
   end   else     Exit;
if GetTokenInformation(htkThread, // get #of groups
   TokenGroups, nil, 0, cbTokenGroups) then   Exit;
if GetLastError() <> ERROR_INSUFFICIENT_BUFFER then   Exit;
ptg := PTOKEN_GROUPS(getmem(cbTokenGroups));
if not Assigned(ptg) then   Exit;
if not GetTokenInformation(htkThread, // get groups
   TokenGroups, ptg, cbTokenGroups, cbTokenGroups) then  Exit;
if not AllocateAndInitializeSid(SystemSidAuthority,
   2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS,
   0, 0, 0, 0, 0, 0, psidAdmin) then   Exit;
iGroup := 0;
while iGroup < ptg^.GroupCount do // check administrator group
begin
   if EqualSid(ptg^.Groups[iGroup].Sid, psidAdmin) then
   begin
     Result := TRUE;
     break;
   end;
   Inc(iGroup);
end;
FreeSid(psidAdmin);
end;
©там же
Ответить с цитированием