Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Как узнать? Если ли у программы права для


Автор: Gnusss 8.12.2005, 23:24
Привет всем!

Как можно узнать есть ли у моей программы права для редактирования ключа реестра HKEY_LOCAL_MACHINE?

Заранее спасибо за ответ!

Автор: Poseidon 9.12.2005, 01:14
Как известно, HKEY_LOCAL_MACHINE может редактировать только админ системы. Поэтому твоя задача сводится к определению привелегий пользователя, каторый запустил прогу.

Код
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; 

Автор: Gnusss 9.12.2005, 01:42
У WinXp(в других незнаю) есть еще группа пользователей "Продвинутые пользователи" они тоже имеют пава на редактирование HKEY_LOCAL_MACHINE.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)