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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
 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);
Beispiel #4
0
 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);
Beispiel #6
0
        /// <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);
        }
Beispiel #7
0
        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;
        }
Beispiel #8
0
        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);
        }
Beispiel #9
0
 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);