Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[54.226.126.38] |
|
Сообщ.
#1
,
|
|
|
Как узнать группы к которым принадлежит пользователь в винде. Есть ли нюансы если комп в домене?
Заранее спасибо. WinForms наверное |
Сообщ.
#2
,
|
|
|
Есть такая функция NetUserGetGroups, не подойдет случаем?
Обернуть её в managed code в принципе не проблема. |
Сообщ.
#3
,
|
|
|
FOUX я мож че не понял, я нашел пример использования данной функции протестировал он для существующих пользователей у меня на компе выдает 1 группу "Отсутствует". В MSDN сказанно Minimum supported client Windows 2000 Professional. Может быть для XP это не подходит?
Так что вопрос пока открыт. |
Сообщ.
#4
,
|
|
|
Юра Железобетон пояcни задачи, для чего это нужно...
Цитата Юра Железобетон @ Как узнать группы к которым принадлежит пользователь в винде. 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); если хочешь просто узнать принадлежность пользователя к определенной группе WindowsPrincipal cPr = new WindowsPrincipal(cIde); if( cPr.IsInRole(WindowsBuiltInRole.User)) { ..... } |
Сообщ.
#5
,
|
|
|
Отшельник нужно сделать простую систему разрешений на функционал программы для пользователей. Одному пользователю разрешить импорт к примеру второму экспорт, ну и соответственно группам. Решил что удобнее пользоваться группами и именами пользователей которые зарегистрированы на компе.
Спасибо за примеры сейчас посмотрю. Добавлено Отшельник спасибо те огромное, я уж было отчаялся! |
Сообщ.
#6
,
|
|
|
да не за что
возможен 2 способ - через WMI, примера не нашел.... Попробуй еще так: [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); } |