Voici un code qui permet de faire ca mais je code en C#. Je suis certain que tu pourra trouvé l'équivalent en VB.
Classe
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Runtime.InteropServices;
namespace NetworkFunctions
{
public class NetworkAPI
{
#region LOCAL_GROUP_INFO_1 (Structure)
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct LOCALGROUP_INFO_1
{
[MarshalAs(UnmanagedType.LPWStr)]
public string lgrpi1_name;
[MarshalAs(UnmanagedType.LPWStr)]
public string lgrpi1_comment;
}
#endregion
#region LOCALGROUP_MEMBER_INFO_1 (Structure)
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct LOCALGROUP_MEMBERS_INFO_1
{
public int lgrmi1_sid;
public int lgrmi1_sidusage;
public string lgrmi1_name;
}
#endregion
#region NetLocalGroupAdd (API Call)
[DllImport("Netapi32.dll")]
public extern static int NetLocalGroupAdd([MarshalAs(UnmanagedType.LPWStr)] string servername, int level, ref LOCALGROUP_INFO_1 buf, int parm_err);
#endregion
#region NetLocalGroupDel(API Call)
[DllImport("Netapi32.dll")]
public extern static int NetLocalGroupDel([MarshalAs(UnmanagedType.LPWStr)] string servername, [MarshalAs(UnmanagedType.LPWStr)] string groupname);
#endregion
#region NetLocalGroupGetInfo (API Call)
[DllImport("Netapi32.dll")]
public extern static int NetLocalGroupGetInfo([MarshalAs(UnmanagedType.LPWStr)] string servername, [MarshalAs(UnmanagedType.LPWStr)] string groupname, int level, out IntPtr bufptr);
#endregion
[DllImport("Netapi32.dll")]
public extern static int NetLocalGroupSetInfo([MarshalAs(UnmanagedType.LPWStr)] string servername, [MarshalAs(UnmanagedType.LPWStr)] string groupname, int level, ref LOCALGROUP_INFO_1 buf, int parm_err);
[DllImport("Netapi32.dll")]
public extern static int NetLocalGroupEnum([MarshalAs(UnmanagedType.LPWStr)]
string servername, int level, out System.IntPtr bufptr, int prefmaxlen, out
int entriesread, out int totalentries, out int resumehandle);
[DllImport("Netapi32.dll")]
public extern static int NetApiBufferFree(IntPtr Buffer);
[DllImport("Netapi32.dll")]
public extern static int NetLocalGroupGetMembers([MarshalAs(UnmanagedType.LPWStr)] string servername, [MarshalAs(UnmanagedType.LPWStr)] string localgroupname, int level, out IntPtr bufptr, int prefmaxlen, out int entriesread, out int totalentries, out int resumehandle);
public NetworkAPI()
{ }
}
}
Puis les 2 fonctions qui permette d'utiliser cette classe et de lister les groupes ainsi que leurs membres
Mettre les 2 using suivant :
using System.Runtime.InteropServices;
using NetworkFunctions;
private void getGroup()
{
int EntriesRead;
int TotalEntries;
int Resume;
System.IntPtr bufPtr;
NetworkAPI.NetLocalGroupEnum(null, 1, out bufPtr, -1, out EntriesRead, out TotalEntries, out Resume);
if (EntriesRead > 0)
{
NetworkAPI.LOCALGROUP_INFO_1[] Groups = new NetworkAPI.LOCALGROUP_INFO_1[EntriesRead];
IntPtr iter = bufPtr;
for (int i = 0; i < EntriesRead; i++)
{
Groups[i] = (NetworkAPI.LOCALGROUP_INFO_1)Marshal.PtrToStructure
(iter, typeof(NetworkAPI.LOCALGROUP_INFO_1));
iter = (System.IntPtr)((int)iter + Marshal.SizeOf(typeof(NetworkAPI.LOCALGROUP_INFO_1)));
Response.Write(Groups[i].lgrpi1_name + "<span style='color:#999999'> (" + Groups[i].lgrpi1_comment + ")</span>" + "<br>");
getMembers(Groups[i].lgrpi1_name);
}
NetworkAPI.NetApiBufferFree(bufPtr);
}
}
private void getMembers(string group)
{
int EntriesRead;
int TotalEntries;
int Resume;
System.IntPtr bufPtr;
NetworkAPI.NetLocalGroupGetMembers(null, group, 1, out bufPtr, -1,
out EntriesRead, out TotalEntries, out Resume);
if (EntriesRead > 0)
{
NetworkAPI.LOCALGROUP_MEMBERS_INFO_1[]
Members = new NetworkAPI.LOCALGROUP_MEMBERS_INFO_1[EntriesRead];
System.IntPtr iter = bufPtr;
for (int i = 0; i < EntriesRead; i++)
{
Members[i] = (NetworkAPI.LOCALGROUP_MEMBERS_INFO_1)Marshal.PtrToStructure
(iter, typeof(NetworkAPI.LOCALGROUP_MEMBERS_INFO_1));
iter = (System.IntPtr)((int)iter + Marshal.SizeOf(typeof(NetworkAPI.LOCALGROUP_MEMBERS_INFO_1)));
Response.Write(" " + Members[i].lgrmi1_name + "<br>");
}
NetworkAPI.NetApiBufferFree(bufPtr);
}
}