Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.27;
Скачать: CL | DM;

Вниз

Как узнать группу пользователя   Найти похожие ветки 

 
Chris   (2003-10-04 20:08) [0]

Необходимо узнать уровень прав пользователя, запустившего программу. Необходимо также различать пользователя (или администратора)локального и доменного.
И второй вопрос. Можно ли с сервера домена получить информацию о пользователе?


 
Игорь Шевченко ©   (2003-10-04 20:17) [1]

NetUserGetInfo


 
Игорь Шевченко ©   (2003-10-04 20:21) [2]

Пардон, невнимательно читал. Если пользователь уже запустил программу, то OpenProcessToken+GetTokenInformation


 
Chris   (2003-10-04 23:07) [3]

... достал меня плагиат!!!
Нашел в Инете кучу ссылок по запросу "Как проверить, имеем ли мы административные привилегии в системе?". В результате имеем неработающий модуль, потому что один не проверил работоспособность, а другие просто переписывают, беря количеством, а не качеством!
Пришлось немного подкорректировать:
function CheckAdministrator: Boolean;
var
SystemSidAuthority: SID_IDENTIFIER_AUTHORITY;
psidAdmin: PSID;
ptg: PTokenGroups;
htkThread: DWord;
cbTokenGroups: DWord;
iGroup: Longint;
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;
GetMem(ptg,cbTokenGroups);
// 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;
for iGroup:=0 to ptg^.GroupCount-1 do // check administrator group
if EqualSid(ptg^.Groups[iGroup].Sid, psidAdmin) then
begin
Result := TRUE;
break;
end;
FreeSid(psidAdmin);
end;
но в результате я получаю пустышку, т.к. при любом раскладе функция дает False (проверял под пользователем, локальным администратором и администратором домена).
Поэтому пришлось отказаться от этого и использовать самый простой вариант:

...
function IsUserAdmin: Boolean; stdcall;

implementation

function IsUserAdmin; external "setupapi.dll" name "IsUserAdmin";
...
По крайней мере этот вариант работает



Страницы: 1 вся ветка

Текущий архив: 2003.11.27;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.016 c
14-90111
Layner
2003-11-04 08:37
2003.11.27
offtop: А почему в многопоточном прил., написанном на Delphi, при


3-89723
Chery
2003-11-10 10:36
2003.11.27
Закладки Bookmark. Обновление данных на форме.


1-89878
Dmitriy M. Volkov
2003-11-14 10:44
2003.11.27
Диалог открытия папки


1-89937
rosl
2003-11-18 02:35
2003.11.27
таймер


3-89750
buka
2003-11-10 14:08
2003.11.27
Перенос HTM в таблицу