Главная страница
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.068 c
14-90072
velial
2003-11-05 12:19
2003.11.27
Team Source или создание приложения в команде


1-89890
Oleg Khvostenko
2003-11-15 13:46
2003.11.27
Real в Integer


14-90096
K.o.Z
2003-11-04 01:53
2003.11.27
HTML


1-89809
NewD
2003-11-17 11:09
2003.11.27
Как реализовать динамический массив через указатели


3-89753
Inkotex
2003-11-07 16:19
2003.11.27
Запись картинки jpeg формата в поле blob.