public static ArrayList GetServerList(SV_101_TYPES type) { SERVER_INFO_101 si; IntPtr pInfo = IntPtr.Zero; int etriesread = 0; int totalentries = 0; ArrayList srvs = new ArrayList(); try { NERR err = NetServerEnum(null, 101, out pInfo, -1, ref etriesread, ref totalentries, type, null, 0); if ((err == NERR.NERR_Success || err == NERR.ERROR_MORE_DATA) && pInfo != IntPtr.Zero) { int ptr = pInfo.ToInt32(); for (int i = 0; i < etriesread; i++) { si = (SERVER_INFO_101)Marshal.PtrToStructure(new IntPtr(ptr), typeof(SERVER_INFO_101)); srvs.Add(si.sv101_name); // добавляем имя сервера в список ptr += Marshal.SizeOf(si); } } } catch (Exception) { } finally { // освобождаем выделенную память if (pInfo != IntPtr.Zero) { NetApiBufferFree(pInfo); } } return(srvs); }
public static IEnumerable <SERVER_INFO_101> NetServerEnum(string domain, SV_101_TYPES types) { uint resumeHandle = 0; int retval; var itemSize = Marshal.SizeOf(typeof(SERVER_INFO_101)); var result = new List <SERVER_INFO_101>(); do { IntPtr bufPtr; uint entriesread; uint totalentries; retval = SafeNativeMethods.NetServerEnum(null, 101, out bufPtr, SafeNativeMethods.MAX_PREFERRED_LENGTH, out entriesread, out totalentries, (uint)types, domain, ref resumeHandle); if (retval == (int)NERR.NERR_SUCCESS || retval == (int)NERR.ERROR_MORE_DATA) { var ptr = bufPtr; for (int i = 0; i < entriesread; i++) { var item = new SERVER_INFO_101(); Marshal.PtrToStructure(ptr, item); result.Add(item); ptr = (IntPtr)(ptr.ToInt64() + itemSize); } SafeNativeMethods.NetApiBufferFree(bufPtr); } } while (retval == (int)NERR.ERROR_MORE_DATA); return(result); }
public static extern NERR NetServerEnum( [MarshalAs(UnmanagedType.LPWStr)] string ServerName, int Level, out IntPtr BufPtr, int PrefMaxLen, ref int EntriesRead, ref int TotalEntries, SV_101_TYPES ServerType, [MarshalAs(UnmanagedType.LPWStr)] string Domain, int ResumeHandle);
private static extern int NetServerEnum([MarshalAs(UnmanagedType.LPWStr)] string servername, int level, out IntPtr bufptr, int prefmaxlen, ref int entriesread, ref int totalentries, SV_101_TYPES servertype, [MarshalAs(UnmanagedType.LPWStr)] string domain, int resume_handle);
internal static extern NERR NetServerEnum( [MarshalAs(UnmanagedType.LPWStr)]string ServerName, uint Level, out IntPtr BufPtr, uint PrefMaxLen, ref uint EntriesRead, ref uint TotalEntries, SV_101_TYPES ServerType, [MarshalAs(UnmanagedType.LPWStr)] string Domain, uint ResumeHandle);
/// <summary> /// Returns the Server List /// </summary> /// <param name="ServerType">server type</param> /// <param name="domain">domain</param> /// <returns></returns> private static ArrayList GetServerList(SV_101_TYPES ServerType, string domain) { int entriesRead = 0, totalEntries = 0; ArrayList allServers = new ArrayList(); do { // Buffer to store the available servers // Filled by the NetServerEnum function IntPtr buf = new IntPtr(); SERVER_INFO_101 server; int ret = NetServerEnum(null, 101, out buf, -1, ref entriesRead, ref totalEntries, ServerType, domain, 0); // if the function returned any data, fill the tree view if (ret == ERROR_SUCCESS || ret == ERROR_MORE_DATA || entriesRead > 0) { Int32 ptr = buf.ToInt32(); for (int i = 0; i < entriesRead; i++) { // cast pointer to a SERVER_INFO_101 structure server = (SERVER_INFO_101)Marshal.PtrToStructure(new IntPtr(ptr), typeof(SERVER_INFO_101)); ptr += Marshal.SizeOf(server); // add the machine name and comment to the arrayList. //You could return the entire structure here if desired allServers.Add(server); } } // free the buffer NetApiBufferFree(buf); }while ( entriesRead < totalEntries && entriesRead != 0 ); return(allServers); }
public static ArrayList GetServerList(SV_101_TYPES serverType) { int entriesread = 0, totalentries = 0; var alServers = new ArrayList(); do { // Buffer to store the available servers // Filled by the NetServerEnum function IntPtr buf; int ret = NativeMethods.NetServerEnum(null, 101, out buf, -1, ref entriesread, ref totalentries, serverType, null, IntPtr.Zero); // if the function returned any data, fill the tree view if (ret == ERROR_SUCCESS || ret == ERROR_MORE_DATA || entriesread > 0) { IntPtr ptr = buf; for (int i = 0; i < entriesread; i++) { // cast pointer to a SERVER_INFO_101 structure var server = (SERVER_INFO_101)Marshal.PtrToStructure(ptr, typeof(SERVER_INFO_101)); //Cast the pointer to a ulong so this addition will work on 32-bit or 64-bit systems. ptr = (IntPtr)((ulong)ptr + (ulong)Marshal.SizeOf(server)); // add the machine name and comment to the arrayList. //You could return the entire structure here if desired alServers.Add(server); } } // free the buffer NativeMethods.NetApiBufferFree(buf); } while ( entriesread < totalentries && entriesread != 0 ); return alServers; }
public static ArrayList GetServerList(SV_101_TYPES serverType) { int entriesread = 0, totalentries = 0; var alServers = new ArrayList(); do { // Buffer to store the available servers // Filled by the NetServerEnum function IntPtr buf; int ret = NativeMethods.NetServerEnum(null, 101, out buf, -1, ref entriesread, ref totalentries, serverType, null, IntPtr.Zero); // if the function returned any data, fill the tree view if (ret == ERROR_SUCCESS || ret == ERROR_MORE_DATA || entriesread > 0) { IntPtr ptr = buf; for (int i = 0; i < entriesread; i++) { // cast pointer to a SERVER_INFO_101 structure var server = (SERVER_INFO_101)Marshal.PtrToStructure(ptr, typeof(SERVER_INFO_101)); //Cast the pointer to a ulong so this addition will work on 32-bit or 64-bit systems. ptr = (IntPtr)((ulong)ptr + (ulong)Marshal.SizeOf(server)); // add the machine name and comment to the arrayList. //You could return the entire structure here if desired alServers.Add(server); } } // free the buffer NativeMethods.NetApiBufferFree(buf); } while ( entriesread < totalentries && entriesread != 0 ); return(alServers); }
public static extern int NetServerEnum([MarshalAs(UnmanagedType.LPWStr)]string servername, int level, out IntPtr bufptr, int prefmaxlen, ref int entriesread, ref int totalentries, SV_101_TYPES servertype, [MarshalAs(UnmanagedType.LPWStr)]string domain, IntPtr resume_handle);