На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: maxim84_
  
> Узнать группы к которым принадлежит пользователь.
    Как узнать группы к которым принадлежит пользователь в винде. Есть ли нюансы если комп в домене?

    Заранее спасибо.

    WinForms наверное :)
    Сообщение отредактировано: Юра Железобетон -
      Есть такая функция NetUserGetGroups, не подойдет случаем?
      Обернуть её в managed code в принципе не проблема.
        FOUX я мож че не понял, я нашел пример использования данной функции протестировал он для существующих пользователей у меня на компе выдает 1 группу "Отсутствует". В MSDN сказанно Minimum supported client Windows 2000 Professional. Может быть для XP это не подходит?
        Так что вопрос пока открыт.
          Юра Железобетон пояcни задачи, для чего это нужно...

          Цитата Юра Железобетон @
          Как узнать группы к которым принадлежит пользователь в винде.

          ExpandedWrap disabled
                        string ss = "";
                        WindowsIdentity cIde = WindowsIdentity.GetCurrent();
                        IdentityReferenceCollection cCol = cIde.Groups;
                        foreach (IdentityReference ir in cCol)
                        {
                            IdentityReference translate = ir.Translate(typeof(NTAccount));
                            NTAccount ntAccount = (NTAccount)translate;
                            ss += ntAccount.Value + "\n";
                        }
                        MessageBox.Show(ss);

          если хочешь просто узнать принадлежность пользователя к определенной группе
          ExpandedWrap disabled
                        WindowsPrincipal cPr = new WindowsPrincipal(cIde);
                        if( cPr.IsInRole(WindowsBuiltInRole.User))
                        {
                            .....
                        }
          Сообщение отредактировано: Отшельник -
            Отшельник нужно сделать простую систему разрешений на функционал программы для пользователей. Одному пользователю разрешить импорт к примеру второму экспорт, ну и соответственно группам. Решил что удобнее пользоваться группами и именами пользователей которые зарегистрированы на компе.
            Спасибо за примеры сейчас посмотрю.

            Добавлено
            Отшельник спасибо те огромное, я уж было отчаялся!
              да не за что ;)
              возможен 2 способ - через WMI, примера не нашел....
              Попробуй еще так:
              ExpandedWrap disabled
                        [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
                        public struct LOCALGROUP_USERS_INFO_0
                        {
                            public string groupname;
                        }
                 
                        [DllImport("Netapi32.dll", SetLastError=true)]
                        public extern static int NetUserGetGroups
                            ([MarshalAs(UnmanagedType.LPWStr)] string servername,
                             [MarshalAs(UnmanagedType.LPWStr)] string username,
                             int level,
                             out IntPtr bufptr,
                             int prefmaxlen,
                             out int entriesread,
                             out int totalentries);
                 
                        [DllImport("Netapi32.dll", SetLastError=true)]
                        public static extern int NetApiBufferFree(IntPtr Buffer);
                 
                        private ArrayList GetUserLocalGroups(string ServerName,string Username, int Flags)
                        {
                            ArrayList myList = new ArrayList();
                            int EntriesRead;
                            int TotalEntries;
                            IntPtr bufPtr;
                 
                            ErrorCode = NetUserGetLocalGroups(ServerName,Username,0,Flags,out bufPtr,1024,out EntriesRead, out TotalEntries);
                            if(ErrorCode==0)
                            {
                                _ErrorMessage="Successful";
                            }
                            else
                            {
                                _ErrorMessage="Username or computer not found";
                            }
                            if(Flags>1)
                                _ErrorMessage="Flags can only be 0 or 1";
                            if(EntriesRead> 0)
                            {
                                LOCALGROUP_USERS_INFO_0[] RetGroups = new LOCALGROUP_USERS_INFO_0[EntriesRead];
                                IntPtr iter = bufPtr;
                                for(int i=0; i < EntriesRead; i++)
                                {
                                    RetGroups[i] = (LOCALGROUP_USERS_INFO_0)Marshal.PtrToStructure(iter, typeof(LOCALGROUP_USERS_INFO_0));
                                    iter = (IntPtr)((int)iter + Marshal.SizeOf(typeof(LOCALGROUP_USERS_INFO_0)));
                                    myList.Add(RetGroups[i].groupname);
                                }
                                NetApiBufferFree(bufPtr);
                            }
                            return myList;
                        }
                 
                        ////////////////////////////////////////////////////////////////////////////////////////////////////////
                 
                            ArrayList RetGroups = new ArrayList();
                            RetGroups =DsDomain.GetUserLocalGroup(null,"administrator",0);
                            foreach(string str in RetGroups)
                            {
                                Console.WriteLine(str);
                            }
              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script execution time: 0,0695 ]   [ 15 queries used ]   [ Generated: 29.03.24, 01:03 GMT ]