// получим список всех компьюетеров public static List<string> GetServerList() { SERVER_INFO_101 si; IntPtr pInfo = IntPtr.Zero; int etriesread = 0; int totalentries = 0; List<string> srvs = new List<string>(); try { NERR err = NetServerEnum(null, 101, out pInfo, -1, ref etriesread, ref totalentries, SV_101_TYPES.SV_TYPE_ALL, 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.ToString()); ptr += Marshal.SizeOf(si); } } } catch (Exception) { } finally { if (pInfo != IntPtr.Zero) NetApiBufferFree(pInfo); } return (srvs); }
// Получить список SQL серверов public static ArrayList GetSQLServerList() { 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, SV_TYPE_SQLSERVER, 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); }
/// <summary> /// Получает список серверов в локальной сети. /// </summary> /// <param name="Type">Тип сервера</param> /// <returns></returns> public static String[] GetServers(ServerType Type) { ServerInfo Info; IntPtr pInfo = IntPtr.Zero; Int32 etriesread = 0, totalentries = 0; List <String> Servers = new List <String>(); try { NERR Errors = NetServerEnum(null, 101, out pInfo, -1, ref etriesread, ref totalentries, Type, null, 0); if ((Errors == NERR.NERR_Success || Errors == NERR.ERROR_MORE_DATA) && pInfo != IntPtr.Zero) { Int32 ptr = pInfo.ToInt32(); for (int i = 0; i < etriesread; i++) { Info = (ServerInfo)Marshal.PtrToStructure(new IntPtr(ptr), typeof(ServerInfo)); Servers.Add(Info.Name.ToString()); ptr += Marshal.SizeOf(Info); } } } catch (Exception) { } finally { // Освобождение выделенной памяти if (pInfo != IntPtr.Zero) { NetApiBufferFree(pInfo); } } return(Servers.ToArray()); }