Ejemplo n.º 1
0
 public static extern int NetServerEnum(
     [MarshalAs(UnmanagedType.LPWStr)] string servernane,             // must be null
     int level,
     out SafeNetApiBuffer bufptr,
     int prefmaxlen,
     out int entriesread,
     out int totalentries,
     NetServerEnumFilter servertype,
     [MarshalAs(UnmanagedType.LPWStr)] string domain, // null for login domain
     IntPtr resume_handle                             // Must be IntPtr.Zero
     );
Ejemplo n.º 2
0
        /// <summary>The NetServerEnum function lists all servers of the specified type that are visible in a domain.</summary>
        /// <typeparam name="T">The type of the structure to have filled in for each server. This must be SERVER_INFO_100 or SERVER_INFO_101.</typeparam>
        /// <param name="netServerEnumFilter">A value that filters the server entries to return from the enumeration.</param>
        /// <param name="domain">
        /// A string that specifies the name of the domain for which a list of servers is to be returned. The domain name must be a NetBIOS domain name (for
        /// example, Microsoft). The NetServerEnum function does not support DNS-style names (for example, microsoft.com). If this parameter is NULL, the primary
        /// domain is implied.
        /// </param>
        /// <param name="level">
        /// The information level of the data requested. If this value is 0, then the method will extract all digits to form the level (e.g. SERVER_INFO_101
        /// produces 101).
        /// </param>
        /// <returns>A managed array of the requested type.</returns>
        public static IEnumerable <T> NetServerEnum <T>(NetServerEnumFilter netServerEnumFilter = NetServerEnumFilter.SV_TYPE_WORKSTATION | NetServerEnumFilter.SV_TYPE_SERVER, string domain = null, int level = 0) where T : struct, INetServerInfo
        {
            if (level == 0)
            {
                level = GetLevelFromStructure <T>();
            }
            if (level != 100 && level != 101)
            {
                throw new ArgumentOutOfRangeException(nameof(level), @"Only SERVER_INFO_100 or SERVER_INFO_101 are supported as valid structures.");
            }
            var resumeHandle = IntPtr.Zero;
            var ret          = NetServerEnum(null, level, out SafeNetApiBuffer bufptr, MAX_PREFERRED_LENGTH, out int entriesRead, out int totalEntries, netServerEnumFilter, domain, resumeHandle);

            ret.ThrowIfFailed();
            return(((IntPtr)bufptr).ToIEnum <T>(entriesRead));
        }
Ejemplo n.º 3
0
        /// <summary>
        /// The NetServerEnum function lists all servers of the specified type that are visible in a domain.
        /// </summary>
        /// <typeparam name="T">The type of the structure to have filled in for each server. This must be SERVER_INFO_100, SERVER_INFO_101, or SERVER_INFO_102.</typeparam>
        /// <param name="netServerEnumFilter">A value that filters the server entries to return from the enumeration.</param>
        /// <param name="domain">A string that specifies the name of the domain for which a list of servers is to be returned. The domain name must be a NetBIOS domain name (for example, Microsoft). The NetServerEnum function does not support DNS-style names (for example, microsoft.com). If this parameter is NULL, the primary domain is implied.</param>
        /// <param name="level">The information level of the data requested. If this value is 0, then the method will extract all digits to form the level (e.g. SERVER_INFO_101 produces 101).</param>
        /// <returns>A managed array of the requested type.</returns>
        public static IEnumerable <T> NetServerEnum <T>(NetServerEnumFilter netServerEnumFilter = NetServerEnumFilter.SV_TYPE_WORKSTATION | NetServerEnumFilter.SV_TYPE_SERVER, string domain = null, int level = 0) where T : struct, INetServerInfo
        {
            if (level == 0)
            {
                level = GetLevelFromStructure <T>();
            }

            SafeNetApiBuffer bufptr;
            int entriesRead, totalEntries;
            var resumeHandle = IntPtr.Zero;
            var ret          = NetServerEnum(null, level, out bufptr, MAX_PREFERRED_LENGTH, out entriesRead, out totalEntries, netServerEnumFilter, domain, resumeHandle);

            if (ret != 0)
            {
                throw new System.ComponentModel.Win32Exception(ret);
            }
            return(((IntPtr)bufptr).ToIEnum <T>(entriesRead));
        }
Ejemplo n.º 4
0
 private static IEnumerable <string> GetNetworkComputerNames(NetServerEnumFilter netServerEnumFilter = NetServerEnumFilter.SV_TYPE_WORKSTATION | NetServerEnumFilter.SV_TYPE_SERVER, string domain = null) =>
 NetServerEnum <SERVER_INFO_100>(netServerEnumFilter, domain, 100).Select(si => si.sv100_name);
Ejemplo n.º 5
0
 private static IEnumerable <SERVER_INFO_101> GetNetworkComputerInfo(NetServerEnumFilter netServerEnumFilter = NetServerEnumFilter.SV_TYPE_WORKSTATION | NetServerEnumFilter.SV_TYPE_SERVER, string domain = null) =>
 NetServerEnum <SERVER_INFO_101>(netServerEnumFilter, domain, 101);