Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2003.11.27;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2003.11.27;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.009 c
3-89778
MakNik
2003-11-05 20:21
2003.11.27
DBGrid


4-90175
Wizard_Ex
2003-09-22 15:44
2003.11.27
Как открыть папку так чтобы появилось виндовое окно


1-89906
Frol
2003-11-12 01:10
2003.11.27
Вычисление определенного интеграла


1-89848
Buffoon
2003-11-16 17:49
2003.11.27
Заголовок окна


3-89747
Dark Elf
2003-11-07 18:01
2003.11.27
Ширина DBGrid





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский