// получим список всех компьюетеров
        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);
        }
Exemple #3
0
        /// <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());
        }