![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проверка прав пользователя
aldapooh © (2003-08-27 12:44:00)
Я получаю Token с помощью LogonUser. Как проверить права этого пользователя, принадлежность к группе?
Кажется подойдут AccessCheck и CheckTokenMembership, но я не уверен и вообще в некой растерянности. Если можно пару советов или ссылок с примером желательно на Delphi.
Заранее благодарен!
clickmaker (2003-08-29 12:45:00) [1]
Проверка, является ли юзер админом. Ф-ию несложно переделать для любой другой группы
function RunningAsAdministrator: boolean;
const
SECURITY_BUILTIN_DOMAIN_RID = $00000020;
DOMAIN_ALIAS_RID_ADMINS = $00000220;
SystemSidAuthority: SID_IDENTIFIER_AUTHORITY = (Value: (0,0,0,0,0,5));
var
hThread: THandle;
ptg: PTokenGroups;
cbTokenGroups: DWORD;
i: integer;
psidAdmin: PSID;
begin
Result := false;
if OpenThreadToken (GetCurrentThread, TOKEN_QUERY, FALSE, hThread) = FALSE then begin
if GetLastError = ERROR_NO_TOKEN then begin
if OpenProcessToken(GetCurrentProcess, TOKEN_QUERY, hThread) = FALSE then
Exit;
end else
Exit;
end;
if GetTokenInformation(hThread, TokenGroups, nil, 0, cbTokenGroups) <> FALSE then
Exit;
if GetLastError <> ERROR_INSUFFICIENT_BUFFER then
Exit;
ptg := PTokenGroups(LocalAlloc(LPTR, cbTokenGroups));
if (ptg = nil) then Exit;
if GetTokenInformation (hThread, TokenGroups, ptg, cbTokenGroups, cbTokenGroups) = FALSE then
Exit;
if AllocateAndInitializeSid(SystemSidAuthority, 2, SECURITY_BUILTIN_DOMAIN_RID,
DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, psidAdmin) = FALSE then begin
LocalFree(Cardinal(ptg));
Exit;
end;
for i := 0 to ptg^.GroupCount-1 do begin
if EqualSid(ptg^.Groups[i].Sid, psidAdmin) then begin
Result := true;
break;
end;
end;
FreeSid(psidAdmin);
LocalFree(Cardinal(ptg));
end;
aldapooh (2003-08-29 10:23:00) [2]
Где то я наврал потому что CheckTokenMembership(Token,SID,IsMember) всегда возвращает мне IsMember = True
Может я не тот токен или сид передаю...
Любые ваши комментариии...
Спасибо!