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

Вниз

Получить список групп текущего юзера/общий   Найти похожие ветки 

 
sniknik ©   (2009-12-01 12:03) [0]

Пытаюсь получить список групп (для начала юзера от которого запущен процесс), по идее должно работать -
function SidToName(Sid: PSID): string;
var
 Name: array[0..128] of Char;
 NameSize: DWORD;
 Domain: array[0..64] of Char;
 DomainSize: DWORD;
 peUse: SID_NAME_USE;
begin
 Win32Check(IsValidSid(Sid));

 NameSize  :=128;
 DomainSize:=64;

 if LookupAccountSid(nil, Sid, @Name[0], NameSize, @Domain[0], DomainSize, peUse)
   then result:= Domain + "\" + Name + " - " + IntToStr(peUse);
end;

procedure SidGroupList(List: TStrings);
var
 hToken: THandle;
 pTGroups: PTokenGroups;
 i, Size: integer;
 RetLength: DWORD;
 Sid: PSid;
begin
 Win32Check(OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, hToken));

 try
   pTGroups:= nil;
   GetTokenInformation(hToken, TokenGroups, pTGroups, 0, RetLength);
   GetMem(pTGroups, RetLength);
   try
     Win32Check(GetTokenInformation(hToken, TokenGroups, pTGroups, RetLength, RetLength));

     for i:= 0 to pTGroups.GroupCount - 1 do begin
       Size:= GetLengthSid(pTGroups.Groups[i].Sid);
       GetMem(Sid, Size);
       CopyMemory(Sid, pTGroups.Groups[i].Sid, Size);

       List.AddObject(SidToName(Sid), Sid);
     end;
   finally
     FreeMem(pTGroups);
   end;
 finally
   CloseHandle(hToken);
 end;
end;

даже что то выдает... но, почему то всегда одно и тоже. Для проверки создал свою группу "Test", добавляю себя в члены этой группы... (в lusrmgr.msc видит) но моя функция, группу игнорирует. Вопрос, почему?
Ну и продолжение, как получить полный список доступных, независимо от пользователя. В гугле что то все вертится вокруг проверки является ли текущий админом...


 
sniknik ©   (2009-12-01 12:15) [1]

Блин! Первый вопрос отпал, все работает, просто в системе 2 одноименных юзера (различаются по сиду), доменный и локальный, а lusrmgr.msc показывает их как одного, вот и путаница. Если запустить от имени и выбрать чисто локального, то моя группа у него есть.

По общему списку еще актуален.


 
clickmaker ©   (2009-12-01 12:21) [2]

> как получить полный список доступных

групп? NetGroupEnum что-ли?


 
sniknik ©   (2009-12-01 12:27) [3]

Кстати, приемлем (а то и лучше) другой вариант...
Если в свойствах учетки на панели "Членство в группах" нажать "Добавить" то открывается выбор от системы, так вот если есть возможность использовать этот системный выбор, это бы меня более чем устроило. (нужно сделать выбор группы в программе, а средства значения не имеют)
Опять, вопрос как? Если вообще возможно.


 
sniknik ©   (2009-12-01 12:28) [4]

> NetGroupEnum что-ли?
А это тоже самое?


 
clickmaker ©   (2009-12-01 12:32) [5]

> это тоже самое?

ну наверно да.


 
sniknik ©   (2009-12-01 12:46) [6]

Нда, похоже я искал не там... потому и не находил.
Спасибо.


 
sniknik ©   (2009-12-01 15:43) [7]

В общем итог
procedure GroupList(List: TStrings);
type
 GROUP_INFO = record
   lgrpi_name   : LPWSTR;
   lgrpi_comment: LPWSTR;
 end;

 TGroups = array of GROUP_INFO;
var
 pGroups: Pointer;
 Res, i : integer;
 cbRead, cbTotal: integer;
 DName: WideString;
begin
 NetLocalGroupEnum(nil, 1, pGroups, DWORD(-1), DWORD(cbRead), DWORD(cbTotal), nil);
 for i:=0 to cbRead - 1 do
   with TGroups(pGroups)[i] do
     List.Add("\" + WideCharToString(lgrpi_name));

 NetApiBufferFree(pGroups);

 DName:= DomainName;
 NetGroupEnum(PWideChar(DName), 1, pGroups, DWORD(-1), DWORD(cbRead), DWORD(cbTotal), nil);
 for i:= 0 to cbRead - 1 do
   with TGroups(pGroups)[i] do
     List.Add(DomainName + "\" + WideCharToString(lgrpi_name));

 NetApiBufferFree(pGroups);
end;

Действительно все сходится... т.е. тут нету сида, но если его получить по имени группы (+локальное(/пустое) или доменное имя) то они сходятся один в один с тем что получал ранее для текущего процесса.



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

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

Наверх




Память: 0.46 MB
Время: 0.07 c
15-1329769805
Юрий
2012-02-21 00:30
2013.03.22
С днем рождения ! 21 февраля 2012 вторник


15-1353075620
Kirill123
2012-11-16 18:20
2013.03.22
graphics32


15-1338467677
Андреевич
2012-05-31 16:34
2013.03.22
исходник "юнита" в шарпе


15-1339857231
Dmitry
2012-06-16 18:33
2013.03.22
что должен знать/уметь грамотный Delphi программист?


15-1339143768
Scott Storch
2012-06-08 12:22
2013.03.22
знатокам английского





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский