Esempio n. 1
0
        public static ArrayList GetNetworkComputers()
        {
            ArrayList networkComputers     = new ArrayList();
            const int MAX_PREFERRED_LENGTH = -1;
            int       SV_TYPE_WORKSTATION  = 1;
            int       SV_TYPE_SERVER       = 2;
            IntPtr    buffer    = IntPtr.Zero;
            IntPtr    tmpBuffer = IntPtr.Zero;
            int       entriesRead;
            int       totalEntries;
            int       resHandle;
            int       sizeofInfo = Marshal.SizeOf(typeof(ServerInfo100));


            try
            {
                int ret = NetServerEnum(null, 100, ref buffer,
                                        MAX_PREFERRED_LENGTH, out entriesRead, out totalEntries,
                                        SV_TYPE_WORKSTATION | SV_TYPE_SERVER, null, out resHandle);
                if (ret == 0)
                {
                    for (int i = 0; i < totalEntries; i++)
                    {
                        tmpBuffer = new IntPtr((long)buffer + (i * sizeofInfo));

                        ServerInfo100 svrInfo = (ServerInfo100)
                                                Marshal.PtrToStructure(tmpBuffer,
                                                                       typeof(ServerInfo100));
                        networkComputers.Add(svrInfo.sv100_name);
                    }
                }
            }
            catch (Exception ex)
            {
                return(null);
            }
            finally
            {
                NetApiBufferFree(buffer);
            }
            return(networkComputers);
        }
Esempio n. 2
0
        /// <summary>
        /// Uses the DllImport : NetServerEnum with all its required parameters
        /// (see http://msdn.microsoft.com/library/default.asp?url=/library/en-us/netmgmt/netmgmt/netserverenum.asp
        /// for full details or method signature) to retrieve a list of domain SV_TYPE_WORKSTATION
        /// and SV_TYPE_SERVER PC's
        /// </summary>
        /// <returns>Arraylist that represents all the SV_TYPE_WORKSTATION and SV_TYPE_SERVER
        /// PC's in the Domain</returns>
        public ArrayList GetNetworkComputers()
        {
            //local fields
            ArrayList networkComputers   = new ArrayList();
            const int MaxPreferredLength = -1;
            int       sVTypeWorkstation  = 1;
            int       sVTypeServer       = 2;
            IntPtr    buffer             = IntPtr.Zero;
            IntPtr    tmpBuffer          = IntPtr.Zero;
            int       entriesRead        = 0;
            int       totalEntries       = 0;
            int       resHandle          = 0;
            int       sizeofInfo         = Marshal.SizeOf(typeof(ServerInfo100));

            try
            {
                //call the DllImport : NetServerEnum with all its required parameters
                //see http://msdn.microsoft.com/library/default.asp?url=/library/en-us/netmgmt/netmgmt/netserverenum.asp
                //for full details of method signature
                int ret = NetServerEnum(null, 100, ref buffer, MaxPreferredLength,
                                        out entriesRead,
                                        out totalEntries, sVTypeWorkstation | sVTypeServer, null, out resHandle);
                //if the returned with a NERR_Success (C++ term), =0 for C#
                if (ret == 0)
                {
                    //loop through all SV_TYPE_WORKSTATION and SV_TYPE_SERVER PC's
                    for (int i = 0; i < totalEntries; i++)
                    {
                        //get pointer to, Pointer to the buffer that received the data from
                        //the call to NetServerEnum. Must ensure to use correct size of
                        //STRUCTURE to ensure correct location in memory is pointed to
                        tmpBuffer = new IntPtr((int)buffer + (i * sizeofInfo));
                        //Have now got a pointer to the list of SV_TYPE_WORKSTATION and
                        //SV_TYPE_SERVER PC's, which is unmanaged memory
                        //Needs to Marshal data from an unmanaged block of memory to a
                        //managed object, again using STRUCTURE to ensure the correct data
                        //is marshalled
                        ServerInfo100 svrInfo = (ServerInfo100)
                                                Marshal.PtrToStructure(tmpBuffer, typeof(ServerInfo100));

                        //add the PC names to the ArrayList
                        networkComputers.Add(svrInfo.Sv100Name);
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Problem with acessing network computers in NetworkBrowser " +
                                "\r\n\r\n\r\n" + ex.Message,
                                "Error", MessageBoxButton.OK,
                                MessageBoxImage.Error);
                return(null);
            }
            finally
            {
                //The NetApiBufferFree function frees
                //the memory that the NetApiBufferAllocate function allocates
                NetApiBufferFree(buffer);
            }
            //return entries found
            return(networkComputers);
        }