예제 #1
0
        private ShareCollection ReadShareSettings()
        {
            ShareCollection shares = new ShareCollection();
            string          executableDirectory = Path.GetDirectoryName(Application.ExecutablePath) + "\\";
            XmlDocument     document            = GetXmlDocument(executableDirectory + SettingsFileName);
            XmlNode         sharesNode          = document.SelectSingleNode("Settings/Shares");

            foreach (XmlNode shareNode in sharesNode.ChildNodes)
            {
                if (shareNode.Name.Equals("DirectoryShare", StringComparison.OrdinalIgnoreCase))
                {
                    string shareName = shareNode.Attributes["Name"].Value;
                    string sharePath = shareNode.Attributes["Path"].Value;

                    shares.Add(shareName, new string[] { "*" }, new string[] {},
                               new DirectoryFileSystem(sharePath));
                }
                else if (shareNode.Name.Equals("DropShare", StringComparison.OrdinalIgnoreCase))
                {
                    string shareName = shareNode.Attributes["Name"].Value;
                    string account   = shareNode.Attributes["Account"].Value;
                    string key       = shareNode.Attributes["Key"].Value;
                    shares.Add(shareName, new string[] { "*" }, new string[] { },
                               new AzureFileSystem(account, key));
                }
                else
                {
                    throw new Exception("invalid config " + shareNode.Name);
                }
            }



            return(shares);
        }
예제 #2
0
            /// <summary>
            /// Enumerates the shares on Windows 9x
            /// </summary>
            /// <param name="server">The server name</param>
            /// <param name="shares">The ShareCollection</param>
            protected static void EnumerateShares9x(string server, ShareCollection shares)
            {
                int    level = 50;
                int    nRet = 0;
                ushort entriesRead, totalEntries;

                Type   t        = typeof(SHARE_INFO_50);
                int    size     = Marshal.SizeOf(t);
                ushort cbBuffer = (ushort)(MAX_SI50_ENTRIES * size);
                //On Win9x, must allocate buffer before calling API
                IntPtr pBuffer = Marshal.AllocHGlobal(cbBuffer);

                try
                {
                    nRet = NetShareEnum(server, level, pBuffer, cbBuffer,
                                        out entriesRead, out totalEntries);

                    if (ERROR_WRONG_LEVEL == nRet)
                    {
                        level = 1;
                        t     = typeof(SHARE_INFO_1_9x);
                        size  = Marshal.SizeOf(t);

                        nRet = NetShareEnum(server, level, pBuffer, cbBuffer,
                                            out entriesRead, out totalEntries);
                    }

                    if (NO_ERROR == nRet || ERROR_MORE_DATA == nRet)
                    {
                        for (int i = 0, lpItem = pBuffer.ToInt32(); i < entriesRead; i++, lpItem += size)
                        {
                            IntPtr pItem = new IntPtr(lpItem);

                            if (1 == level)
                            {
                                SHARE_INFO_1_9x si = (SHARE_INFO_1_9x)Marshal.PtrToStructure(pItem, t);
                                shares.Add(si.NetName, string.Empty, si.ShareType, si.Remark);
                            }
                            else
                            {
                                SHARE_INFO_50 si = (SHARE_INFO_50)Marshal.PtrToStructure(pItem, t);
                                shares.Add(si.NetName, si.Path, si.ShareType, si.Remark);
                            }
                        }
                    }
                    else
                    {
                        Console.WriteLine(nRet);
                    }
                }
                finally
                {
                    //Clean up buffer
                    Marshal.FreeHGlobal(pBuffer);
                }
            }
예제 #3
0
            /// <summary>
            /// Enumerates the shares on Windows NT
            /// </summary>
            /// <param name="server">The server name</param>
            /// <param name="shares">The ShareCollection</param>
            protected static void EnumerateSharesNT(string server, ShareCollection shares)
            {
                int    level = 2;
                int    entriesRead, totalEntries, nRet, hResume = 0;
                IntPtr pBuffer = IntPtr.Zero;

                try
                {
                    nRet = NetShareEnum(server, level, out pBuffer, -1,
                                        out entriesRead, out totalEntries, ref hResume);

                    if (ERROR_ACCESS_DENIED == nRet)
                    {
                        //Need admin for level 2, drop to level 1
                        level = 1;
                        nRet  = NetShareEnum(server, level, out pBuffer, -1,
                                             out entriesRead, out totalEntries, ref hResume);
                    }

                    if (NO_ERROR == nRet && entriesRead > 0)
                    {
                        Type t      = (2 == level) ? typeof(SHARE_INFO_2) : typeof(SHARE_INFO_1);
                        int  offset = Marshal.SizeOf(t);

                        for (int i = 0, lpItem = pBuffer.ToInt32(); i < entriesRead; i++, lpItem += offset)
                        {
                            IntPtr pItem = new IntPtr(lpItem);
                            if (1 == level)
                            {
                                SHARE_INFO_1 si = (SHARE_INFO_1)Marshal.PtrToStructure(pItem, t);
                                shares.Add(si.NetName, string.Empty, si.ShareType, si.Remark);
                            }
                            else
                            {
                                SHARE_INFO_2 si = (SHARE_INFO_2)Marshal.PtrToStructure(pItem, t);
                                shares.Add(si.NetName, si.Path, si.ShareType, si.Remark);
                            }
                        }
                    }
                }
                finally
                {
                    // Clean up buffer allocated by system
                    if (IntPtr.Zero != pBuffer)
                    {
                        NetApiBufferFree(pBuffer);
                    }
                }
            }
예제 #4
0
            /// <summary>
            /// Enumerates the shares on Windows 9x
            /// </summary>
            /// <param name="server">The server name</param>
            /// <param name="shares">The ShareCollection</param>
            protected static void EnumerateShares9x(string server, ShareCollection shares)
            {
                int level = 50;
                int nRet = 0;
                ushort entriesRead, totalEntries;

                Type t = typeof(SHARE_INFO_50);
                int size = Marshal.SizeOf(t);
                ushort cbBuffer = (ushort)(MAX_SI50_ENTRIES * size);
                //On Win9x, must allocate buffer before calling API
                IntPtr pBuffer = Marshal.AllocHGlobal(cbBuffer);

                try
                {
                    nRet = NetShareEnum(server, level, pBuffer, cbBuffer,
                        out entriesRead, out totalEntries);

                    if (ERROR_WRONG_LEVEL == nRet)
                    {
                        level = 1;
                        t = typeof(SHARE_INFO_1_9x);
                        size = Marshal.SizeOf(t);

                        nRet = NetShareEnum(server, level, pBuffer, cbBuffer,
                            out entriesRead, out totalEntries);
                    }

                    if (NO_ERROR == nRet || ERROR_MORE_DATA == nRet)
                    {
                        for (int i = 0, lpItem = pBuffer.ToInt32(); i < entriesRead; i++, lpItem += size)
                        {
                            IntPtr pItem = new IntPtr(lpItem);

                            if (1 == level)
                            {
                                SHARE_INFO_1_9x si = (SHARE_INFO_1_9x)Marshal.PtrToStructure(pItem, t);
                                shares.Add(si.NetName, string.Empty, si.ShareType, si.Remark);
                            }
                            else
                            {
                                SHARE_INFO_50 si = (SHARE_INFO_50)Marshal.PtrToStructure(pItem, t);
                                shares.Add(si.NetName, si.Path, si.ShareType, si.Remark);
                            }
                        }
                    }
                    else
                        Console.WriteLine(nRet);

                }
                finally
                {
                    //Clean up buffer
                    Marshal.FreeHGlobal(pBuffer);
                }
            }
예제 #5
0
            /// <summary>
            /// Enumerates the shares on Windows NT
            /// </summary>
            /// <param name="server">The server name</param>
            /// <param name="shares">The ShareCollection</param>
            protected static void EnumerateSharesNT(string server, ShareCollection shares)
            {
                int level = 2;
                int entriesRead, totalEntries, nRet, hResume = 0;
                IntPtr pBuffer = IntPtr.Zero;

                try
                {
                    nRet = NetShareEnum(server, level, out pBuffer, -1,
                        out entriesRead, out totalEntries, ref hResume);

                    if (ERROR_ACCESS_DENIED == nRet)
                    {
                        //Need admin for level 2, drop to level 1
                        level = 1;
                        nRet = NetShareEnum(server, level, out pBuffer, -1,
                            out entriesRead, out totalEntries, ref hResume);
                    }

                    if (NO_ERROR == nRet && entriesRead > 0)
                    {
                        Type t = (2 == level) ? typeof(SHARE_INFO_2) : typeof(SHARE_INFO_1);
                        int offset = Marshal.SizeOf(t);

                        for (int i = 0, lpItem = pBuffer.ToInt32(); i < entriesRead; i++, lpItem += offset)
                        {
                            IntPtr pItem = new IntPtr(lpItem);
                            if (1 == level)
                            {
                                SHARE_INFO_1 si = (SHARE_INFO_1)Marshal.PtrToStructure(pItem, t);
                                shares.Add(si.NetName, string.Empty, si.ShareType, si.Remark);
                            }
                            else
                            {
                                SHARE_INFO_2 si = (SHARE_INFO_2)Marshal.PtrToStructure(pItem, t);
                                shares.Add(si.NetName, si.Path, si.ShareType, si.Remark);
                            }
                        }
                    }

                }
                finally
                {
                    // Clean up buffer allocated by system
                    if (IntPtr.Zero != pBuffer)
                        NetApiBufferFree(pBuffer);
                }
            }