Главная страница
    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.052 c
15-1338635972
М
2012-06-02 15:19
2013.03.22
Зависает при потоке


6-1264678262
madacar
2010-01-28 14:31
2013.03.22
Поиск письма на сервере


15-1351715402
Юрий
2012-11-01 00:30
2013.03.22
С днем рождения ! 1 ноября 2012 четверг


2-1336658934
ignatich70
2012-05-10 18:08
2013.03.22
БД+Клиент/Сервер


15-1334500957
None
2012-04-15 18:42
2013.03.22
Как запретить Win7 перезагружаться без спроса?





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