Exemplo n.º 1
0
        public static Array NetFileEnum(string server_name, string base_path, string user_name, NetFileEnumLevel level)
        {
            Array  ret           = null;
            IntPtr buffer        = IntPtr.Zero;
            uint   prefmaxlen    = WinApiNET.MAX_PREFERRED_LENGTH;
            int    entriesread   = 0;
            int    totalentries  = 0;
            uint   resume_handle = 0;

            try
            {
                int res = WinApiNET.NetFileEnum
                              (server_name,
                              base_path,
                              user_name,
                              level,
                              ref buffer,
                              prefmaxlen,
                              ref entriesread,
                              ref totalentries,
                              ref resume_handle);
                if (res != WinApiNET.NERR_Success)
                {
                    throw new Win32Exception(res);
                }

                switch (level)
                {
                case NetFileEnumLevel.INFO_2:
                    ret = FILE_INFO_2.FromBuffer(buffer, entriesread);
                    break;

                case NetFileEnumLevel.INFO_3:
                    ret = FILE_INFO_3.FromBuffer(buffer, entriesread);
                    break;
                }
            }
            finally
            {
                if (buffer != IntPtr.Zero)
                {
                    WinApiNET.NetApiBufferFree(buffer);
                }
            }
            return(ret);
        }
Exemplo n.º 2
0
        private static FILE_INFO_3[] GetResourcesOpenedInNetworkShareFileInfo3()
        {
            IList <FILE_INFO_3> openedResources = new List <FILE_INFO_3>();
            int    entriesRead;
            int    totalEntries;
            IntPtr buffer = IntPtr.Zero;

            try
            {
                FILE_INFO_3 fileInfo3 = new FILE_INFO_3();
                int         status    = NativeMethods.NetFileEnum(null, null, null, 3, ref buffer, MAX_PREFERRED_LENGTH, out entriesRead, out totalEntries, IntPtr.Zero);

                if (status != 0)
                {
                    var ex = Win32ExceptionManager.GetWin32Exception();
                    throw ex;
                }

                for (int i = 0; i < entriesRead; i++)
                {
                    IntPtr iPtr = new IntPtr(buffer.ToInt32() + (i * Marshal.SizeOf(fileInfo3)));
                    fileInfo3 = (FILE_INFO_3)Marshal.PtrToStructure(iPtr, typeof(FILE_INFO_3));

                    // Only add files/folder where the permission is at least 'read'.
                    if (fileInfo3.fi3_permission != 0)
                    {
                        openedResources.Add(fileInfo3);
                    }
                }
            }
            catch (Exception)
            {
                throw;
            }
            finally
            {
                NativeMethods.NetApiBufferFree(buffer);
            }

            return(openedResources.ToArray <FILE_INFO_3>());
        }
Exemplo n.º 3
0
        public static Dictionary <int, string[]> EnumFiles(IntPtr pHandle, CredentialEntry ce, string sHostname)
        {
            // establish null session
            //if (!Session.EnsureNullSession(sHostname, ce))
            //{
            //    return null;
            //}

            try
            {
                Dictionary <int, string[]> UserList = new Dictionary <int, string[]>();

                IntPtr pBuf    = IntPtr.Zero;
                int    cRead   = 0;
                int    cTotal  = 0;
                int    hResume = 0;
                int    maxlen  = -1;
                int    nret    = -1;

                Logger.Log(String.Format("NetFileEnum(handle_b={0:x}, sHostname={1}) called",
                                         pHandle.ToInt32(), sHostname), Logger.FileShareManagerLogLevel);

                if (Configurations.currentPlatform == LikewiseTargetPlatform.Windows)
                {
                    nret = NetFileEnum(sHostname,
                                       null,
                                       null,
                                       3,
                                       ref pBuf,
                                       maxlen,
                                       ref cRead,
                                       ref cTotal,
                                       ref hResume);
                }
                else
                {
                    nret = NetFileEnum(pHandle,
                                       sHostname,
                                       null,
                                       null,
                                       3,
                                       ref pBuf,
                                       maxlen,
                                       ref cRead,
                                       ref cTotal,
                                       ref hResume);
                }

                Logger.Log(String.Format(
                               "NetFileEnum(); result={0}, pBuf={1}, cRead={2}, cTotal={3}, hResume={4}",
                               nret, pBuf, cRead, cTotal, hResume));

                // now, iterate through the data in pBuf
                IntPtr pCur = pBuf;
                for (int i = 0; i < cRead; i++)
                {
                    // marshal the entry into
                    FILE_INFO_3 fi3 = (FILE_INFO_3)Marshal.PtrToStructure(pCur, typeof(FILE_INFO_3));

                    // create a row
                    // set the mode
                    int    iMode = fi3.fi3_permission;
                    string sMode = "";
                    if ((iMode & PERM_FILE_READ) == PERM_FILE_READ)
                    {
                        sMode = "Read";
                    }
                    if ((iMode & PERM_FILE_WRITE) == PERM_FILE_WRITE)
                    {
                        if (sMode.Length > 0)
                        {
                            sMode += "+Write";
                        }
                        else
                        {
                            sMode = "Write";
                        }
                    }
                    if ((iMode & PERM_FILE_CREATE) == PERM_FILE_CREATE)
                    {
                        if (sMode.Length > 0)
                        {
                            sMode += "+Create";
                        }
                        else
                        {
                            sMode = "Create";
                        }
                    }
                    string[] sFileInfo = { fi3.fi3_pathname, fi3.fi3_username, fi3.fi3_num_locks.ToString(), sMode, fi3.fi3_id.ToString() };

                    UserList.Add(i, sFileInfo);


                    // advance to the next entry
                    pCur = (IntPtr)((int)pCur + Marshal.SizeOf(fi3));
                }
                if (pBuf != IntPtr.Zero)
                {
                    // free the data
                    if (Configurations.currentPlatform == LikewiseTargetPlatform.Windows)
                    {
                        NetApiBufferFree(pBuf);
                    }
                    else
                    {
                        SrvSvcFreeMemory(pBuf);
                    }
                }

                // all done
                return(UserList);
            }
            catch (Win32Exception we)
            {
                throw new LikewiseAPIException(we);
            }
        }
Exemplo n.º 4
0
        private void fill_netserver_page()
        {
            try
            {
                SERVER_INFO_102 serv_info = WinApiNETwrapper.GetServerInfo_102(resource_intern.lpRemoteName);
                textBoxNetserverPlatformId.Text      = serv_info.sv102_platform_id.ToString();
                textBoxNetserverSoftwareType.Text    = IOhelper.NetserverTypeToString(serv_info.sv102_type);
                textBoxPlatformVersion.Text          = string.Format("{0}.{1}", serv_info.GetVersionMajor(), serv_info.sv102_version_minor);
                textBoxNetserverMaxUsers.Text        = serv_info.sv102_users.ToString();
                textBoxNetserverDisconnectTime.Text  = serv_info.sv102_disc.ToString();
                textBoxNetserverAnnounceTime.Text    = serv_info.sv102_announce.ToString();
                textBoxNetserverUsersPerLicense.Text = serv_info.sv102_licenses.ToString();
                textBoxNetserverUserPath.Text        = serv_info.sv102_userpath;
            }
            catch (Exception ex)
            {
                errorProvider1.SetIconAlignment(textBoxNetserverPlatformId, ErrorIconAlignment.MiddleLeft);
                errorProvider1.SetError(textBoxNetserverPlatformId, ex.Message);
            }

            try
            {
                NetRemoteComputerSupportsFeatures features = WinApiNETwrapper.GetComputerSupports(resource_intern.lpRemoteName);
                textBoxNetserverFeatures.Text = features.ToString();
            }
            catch (Exception ex)
            {
                errorProvider1.SetIconAlignment(textBoxNetserverFeatures, ErrorIconAlignment.MiddleLeft);
                errorProvider1.SetError(textBoxNetserverFeatures, ex.Message);
            }

            try
            {
                TIME_OF_DAY_INFO dt = WinApiNETwrapper.GetServerTime(resource_intern.lpRemoteName);
                textBoxNetserverDatetime.Text = string.Format("{0} {1},{2}", dt.GetCurrentDatetime().ToLongDateString(), dt.GetCurrentDatetime().ToLongTimeString(), dt.GetCurrentDatetime().Millisecond);
                textBoxNetserverUptime.Text   = dt.GetUptime().ToString();
            }
            catch (Exception ex)
            {
                errorProvider1.SetIconAlignment(textBoxNetserverDatetime, ErrorIconAlignment.MiddleLeft);
                errorProvider1.SetError(textBoxNetserverDatetime, ex.Message);
            }

            //NET_DISPLAY_GROUP[] groups = WinApiNETwrapper.QueryDisplayInfoGroup(resource_intern.lpRemoteName);
            //NET_DISPLAY_MACHINE[] machines = WinApiNETwrapper.QueryDisplayInfoMachine(resource_intern.lpRemoteName);
            //NET_DISPLAY_USER[] users = WinApiNETwrapper.QueryDisplayInfoUser(resource_intern.lpRemoteName);

            try
            {
                SERVER_TRANSPORT_INFO_1[] transports = WinApiNETwrapper.ServerTransportEnum_1(resource_intern.lpRemoteName);
                for (int i = 0; i < transports.Length; i++)
                {
                    ListViewItem lvi = new ListViewItem();
                    lvi.Text = transports[i].svti1_transportname;
                    lvi.SubItems.Add(transports[i].TransportAddress);
                    lvi.SubItems.Add(transports[i].svti1_networkaddress);
                    lvi.SubItems.Add(transports[i].svti1_domain);
                    lvi.SubItems.Add(transports[i].svti1_numberofvcs.ToString());
                    listViewTransports.Items.Add(lvi);
                }
                listViewTransports.Dock = DockStyle.Fill;
            }
            catch (Exception ex)
            {
                errorProvider1.SetIconAlignment(listViewTransports, ErrorIconAlignment.MiddleLeft);
                errorProvider1.SetError(listViewTransports, ex.Message);
            }

            /* net sessions */
            errorProvider1.SetIconAlignment(listViewSessions, ErrorIconAlignment.MiddleLeft);
            Array sessions = null;
            NetSessionEnumLevel session_level = NetSessionEnumLevel.INFO_502;

            try
            {
                //try level 502
                sessions = WinApiNETwrapper.NetSessionEnum(resource_intern.lpRemoteName, null, null, session_level);
            }
            catch (Exception)
            {
                //if exception try level 10
                session_level = NetSessionEnumLevel.INFO_10;
                try
                {
                    sessions = WinApiNETwrapper.NetSessionEnum(resource_intern.lpRemoteName, null, null, session_level);
                }
                catch (Exception ex_10)
                {
                    errorProvider1.SetError(listViewSessions, ex_10.Message);
                }
            }
            if (sessions != null)
            {
                listViewSessions.Dock = DockStyle.Fill;
                for (int i = 0; i < sessions.Length; i++)
                {
                    ListViewItem lvi = new ListViewItem();
                    switch (session_level)
                    {
                    case NetSessionEnumLevel.INFO_502:
                        SESSION_INFO_502 info_502 = (SESSION_INFO_502)sessions.GetValue(i);
                        lvi.Text = info_502.sesi502_cname;
                        lvi.SubItems.Add(info_502.sesi502_username);
                        lvi.SubItems.Add(info_502.sesi502_num_opens.ToString());
                        lvi.SubItems.Add(info_502.TimeActive.ToString());
                        lvi.SubItems.Add(info_502.TimeIdle.ToString());
                        lvi.SubItems.Add(info_502.sesi502_user_flags.ToString());
                        lvi.SubItems.Add(info_502.sesi502_cltype_name);
                        lvi.SubItems.Add(info_502.sesi502_transport);
                        break;

                    case NetSessionEnumLevel.INFO_10:
                        SESSION_INFO_10 info_10 = (SESSION_INFO_10)sessions.GetValue(i);
                        lvi.Text = info_10.sesi10_cname;
                        lvi.SubItems.Add(string.Empty);
                        lvi.SubItems.Add(string.Empty);
                        lvi.SubItems.Add(info_10.TimeActive.ToString());
                        lvi.SubItems.Add(info_10.TimeIdle.ToString());
                        lvi.SubItems.Add(string.Empty);
                        lvi.SubItems.Add(string.Empty);
                        lvi.SubItems.Add(string.Empty);
                        break;
                    }
                    listViewSessions.Items.Add(lvi);
                }
            }
            /* end of net sessions */

            /* open files */
            try
            {
                Array files = WinApiNETwrapper.NetFileEnum(resource_intern.lpRemoteName, null, null, NetFileEnumLevel.INFO_3);
                listViewFiles.Dock = DockStyle.Fill;
                for (int i = 0; i < files.Length; i++)
                {
                    FILE_INFO_3  f_info = (FILE_INFO_3)files.GetValue(i);
                    ListViewItem lvi    = new ListViewItem();
                    lvi.Text = string.Format("0x{0:X}", f_info.fi3_id);
                    lvi.SubItems.Add(f_info.fi3_permission.ToString());
                    lvi.SubItems.Add(f_info.fi3_num_locks.ToString());
                    lvi.SubItems.Add(f_info.fi3_pathname);
                    lvi.SubItems.Add(f_info.fi3_username);
                    listViewFiles.Items.Add(lvi);
                }
            }
            catch (Exception ex_files)
            {
                errorProvider1.SetIconAlignment(listViewFiles, ErrorIconAlignment.MiddleLeft);
                errorProvider1.SetError(listViewFiles, ex_files.Message);
            }
            /* end of open files */
        }