Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Права администратора 
:(
    Опции темы
PIF
Дата 8.6.2005, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 27.1.2005

Репутация: нет
Всего: нет



Здравствуйте!
Как можно узнать имеет ли данный пользоватиль права администратора (при старте программы).
Заранее спасибо!!!
PM MAIL   Вверх
_hunter
Дата 8.6.2005, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 9
Всего: 98





--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
PIF
Дата 8.6.2005, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 27.1.2005

Репутация: нет
Всего: нет



Код

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; 

Выдает ошибку при компиляции!
PM MAIL   Вверх
_hunter
Дата 8.6.2005, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 9
Всего: 98



какую?


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
PIF
Дата 8.6.2005, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 27.1.2005

Репутация: нет
Всего: нет



В строке SystemSidAuthority: SID_IDENTIFIER_AUTHORITY = SECURITY_NT_AUTHORITY; и
ptg: PTOKEN_GROUPS = nil;
[Error] Cannot initialize local variables
PM MAIL   Вверх
_hunter
Дата 8.6.2005, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 9
Всего: 98



ну потом их проинициализируй...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
PIF
Дата 8.6.2005, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 27.1.2005

Репутация: нет
Всего: нет



каким образом не подскажите, а то я совсем новичек
PM MAIL   Вверх
_hunter
Дата 9.6.2005, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 9
Всего: 98



написать SystemSidAuthority := SECURITY_NT_AUTHORITY; smile


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
poor_yorik
Дата 9.6.2005, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 148
Регистрация: 12.1.2005
Где: Общаги г. Киева

Репутация: нет
Всего: 8



Попробуй такой код

Код

const
   SECURITY_NT_AUTHORITY: TSIDIdentifierAuthority =
     (Value: (0, 0, 0, 0, 0, 5));
   SECURITY_BUILTIN_DOMAIN_RID = $00000020;
   DOMAIN_ALIAS_RID_ADMINS = $00000220;

 function IsAdmin: Boolean;
 var
   hAccessToken: THandle;
   ptgGroups: PTokenGroups;
   dwInfoBufferSize: DWORD;
   psidAdministrators: PSID;
   x: Integer;
   bSuccess: BOOL;
 begin
   Result   := False;
   bSuccess := OpenThreadToken(GetCurrentThread, TOKEN_QUERY, True,
     hAccessToken);
   if not bSuccess then
   begin
     if GetLastError = ERROR_NO_TOKEN then
       bSuccess := OpenProcessToken(GetCurrentProcess, TOKEN_QUERY,
         hAccessToken);
   end;
   if bSuccess then
   begin
     GetMem(ptgGroups, 1024);
     bSuccess := GetTokenInformation(hAccessToken, TokenGroups,
       ptgGroups, 1024, dwInfoBufferSize);
     CloseHandle(hAccessToken);
     if bSuccess then
     begin
       AllocateAndInitializeSid(SECURITY_NT_AUTHORITY, 2,
         SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS,
         0, 0, 0, 0, 0, 0, psidAdministrators);
       {$R-}
       for x := 0 to ptgGroups.GroupCount - 1 do
         if EqualSid(psidAdministrators, ptgGroups.Groups[x].Sid) then
         begin
           Result := True;
           Break;
         end;
       {$R+}
       FreeSid(psidAdministrators);
     end;
     FreeMem(ptgGroups);
   end;
 end;

 procedure TForm1.Button1Click(Sender: TObject);
 begin
   if isAdmin then
     ShowMessage('Logged in as Administrator');
 end;


--------------------
Семь раз отмерь, один раз - откомпиль.... Семь раз отпей, один раз - отлей... Семь раз отъешь, один раз - не жадничай и другим дай...
PM MAIL YIM   Вверх
PIF
Дата 9.6.2005, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 27.1.2005

Репутация: нет
Всего: нет



Спасибо, все работает!!!
PM MAIL   Вверх
Nicholas
Дата 15.6.2005, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 436
Регистрация: 30.9.2004

Репутация: нет
Всего: 0



А КАК ПРАВА АДМИНА УСТАНОВИТЬ В WinXP,NT ??
PM MAIL ICQ   Вверх
_hunter
Дата 15.6.2005, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 9
Всего: 98



добавить пользователя в группу админов...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Alex
Дата 15.6.2005, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 6
Всего: 162



Модератор: Пожалуйста, один топик - один вопрос.


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Rrader
Дата 16.6.2005, 07:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 29
Всего: 191



Цитата

Здравствуйте!
Как можно узнать имеет ли данный пользоватиль права администратора (при старте программы).
Заранее спасибо!!!

Смотри последнее сообщение. smile


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
Nicholas
  Дата 17.6.2005, 02:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 436
Регистрация: 30.9.2004

Репутация: нет
Всего: 0



Цитата(_hunter @ 15.6.2005, 18:56)
добавить пользователя в группу админов...


Это понятно, а вот код какой?

Кроме того наверняка есть способ без добавления в группу.

smile


p.s. Модераторы, топик называется "Права администратора" - значит все что с ними связано. smile

Это сообщение отредактировал(а) Nicholas - 17.6.2005, 02:18
PM MAIL ICQ   Вверх
Закрытая темаСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0625 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.