Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.04.2010, 13:48   #1
__@cmd@__
Пользователь
 
Регистрация: 01.02.2009
Сообщений: 24
Восклицание проверка на права администратора WIN7

встала задача чтобы перед запуском приложение проверяло запущено ли оно от имени администратора
нашел код
Код:
function isAdmin: Boolean;
{ Объявление констант, которых в delphi я не нашел }
const
  SECURITY_BUILTIN_DOMAIN_RID = $00000020;
  DOMAIN_ALIAS_RID_ADMINS = $00000220;

var
  hProcess, hAccessToken: Cardinal;
  InfoBuffer: array [0..1023] of Char;
  ptgGroups: PTokenGroups;
  dwInfoBufferSize: DWORD;
  psidAdmins: PSID;
  siaNtAuthority: TSidIdentifierAuthority;
  x: UINT;
begin
  { Получаем Token нашего приложения }
  hProcess := GetCurrentProcess();
  {
    Обнуляем память и заносим в последний элемент 5.
    Это нужно для того что бы "формат" данных выглядел так [0, 0, 0, 0, 0, 5]
    тупым присваиванием не прокатило.
    Откуда я это знаю? Подсмотрел в VC, как и те две константы, что объявлены
    в начале:)
  }
  ZeroMemory(@siaNtAuthority.Value, sizeof(Char)*6);
  siaNtAuthority.Value[5] := 5;
  { даем указатель ptgGroups на InfoBuffer }
  ptgGroups := PTokenGroups(@InfoBuffer);

  { Попытка открыть процесс и получить инфу о нем }
  if not OpenProcessToken(hProcess, TOKEN_READ, hAccessToken) then
  begin
    Result := false;
    Exit;
  end;

  { Пытаемся получить информаци о првах доступа, одновременно заполная все что
    нужно }
  if not (getTokenInformation(hAccessToken, TokenGroups, @InfoBuffer,
    High(InfoBuffer) + 1, dwInfoBufferSize)) then
  begin
    Result := false;
    Exit;
  end;

  { Распределяем и инициализируем идентификатор безопасности (SID) с восьмью
    полномочиями }
  AllocateAndInitializeSid(siaNtAuthority, 2, SECURITY_BUILTIN_DOMAIN_RID,
    DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, psidAdmins);

  { Тут вроде происходит собственно проверка на то, является ли процесс запущенный
    с правами админа }
  for x := 0 to ptgGroups.GroupCount - 1 do
    if EqualSid(psidAdmins, ptgGroups.Groups[x].Sid) then
    begin
      FreeSid(psidAdmins);
      Result := true;
      Exit;
    end;

  FreeSid(psidAdmins);
  Result := false;
end;
из статьи http://pblog.ru/?p=688
но на вин 7 он не работает пишет что всегда не прав
больше ничего дельного не нашел кто может подсказать?

зараннее благодарен
__@cmd@__ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Можно ли запросить права администратора? TwiX Софт 3 28.03.2010 22:58
MS VS 2010 установка на Win7 Carbon Софт 0 15.02.2010 17:40
Win7 проблема с памятью. Bilargo Windows 5 14.10.2009 20:07
Win7 VadEr Windows 2 28.09.2009 11:46