Popular Posts
Enable SSL connection for Jsoup import org.jsoup.Connection; import org.jsoup.Jsoup; import javax.net.ssl.*; import java.io.IOException; import java.security.KeyManagement... Join related table and count rows or sum sql server 2005 count rows: SELECT * FROM Table1 LEFT JOIN     (SELECT Level1ID, COUNT(Level2ID) AS Total FROM Table2 GROUP BY Level1ID) AS... Append soap header into axis When axis generate classese of web service, it won't include the request of soap header. Here is a way to append soap header manually i...
Blog Archive
Stats
List remote share folder
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Management;
using System.Runtime.InteropServices;

namespace ConsoleApplication1
{
    class Class1
    {
        #region Get remote share folder name, use Windows API NetShareEnum
        [DllImport("Netapi32.dll", CharSet = CharSet.Unicode)]
        private static extern NET_API_STATUS NetShareEnum(
             StringBuilder serverName,
             int level,
             ref IntPtr bufPtr,
             uint prefMaxLen,
             ref int entriesRead,
             ref int totalEntries,
             ref int resumeHandle
             );

        [DllImport("Netapi32.dll", SetLastError = true)]
        static extern int NetApiBufferFree(IntPtr Buffer);

        public enum NET_API_STATUS : uint
        {
            NERR_Success = 0,
            NERR_InvalidComputer = 2351,
            NERR_NotPrimary = 2226,
            NERR_SpeGroupOp = 2234,
            NERR_LastAdmin = 2452,
            NERR_BadPassword = 2203,
            NERR_PasswordTooShort = 2245,
            NERR_UserNotFound = 2221,
            ERROR_ACCESS_DENIED = 5,
            ERROR_NOT_ENOUGH_MEMORY = 8,
            ERROR_INVALID_PARAMETER = 87,
            ERROR_INVALID_NAME = 123,
            ERROR_INVALID_LEVEL = 124,
            ERROR_MORE_DATA = 234,
            ERROR_SESSION_CREDENTIAL_CONFLICT = 1219
        }

        [StructLayoutAttribute(LayoutKind.Sequential)]
        public struct _SHARE_INFO_0
        {
            [MarshalAsAttribute(UnmanagedType.LPWStr)]
            public string shi0_netname;
        }

        public static void EnumNetShares(string remoteMachineName)
        {
            StringBuilder serverName = new StringBuilder(remoteMachineName);
            int level = 0;
            IntPtr bufPtr = IntPtr.Zero;
            uint prefMaxLen = 0xFFFFFFFF;
            int entriesRead = 0;
            int totalEntries = 0;
            int resumeHandle = 0;
            int structSize = Marshal.SizeOf(typeof(_SHARE_INFO_0));

            NET_API_STATUS result = NetShareEnum(serverName, level, ref bufPtr, prefMaxLen, ref entriesRead, ref totalEntries, ref resumeHandle);
            if (result == NET_API_STATUS.NERR_Success)
            {
                IntPtr current = bufPtr;
                for (int i = 0; i < entriesRead; i++)
                {
                    _SHARE_INFO_0 shareInfo = (_SHARE_INFO_0)Marshal.PtrToStructure(current, typeof(_SHARE_INFO_0));
                    Console.WriteLine(shareInfo.shi0_netname);
                    current = new IntPtr(current.ToInt32() + structSize);
                }
            }
            else if (result == NET_API_STATUS.ERROR_MORE_DATA)
            {
                NetApiBufferFree(bufPtr);
            }
            else
            {
                // Something else.
            }
        }
        #endregion

        #region Get remote share folder name, use WMI
        private static void DisplayShareFolders(string computerName, string userName, string password)
        {
            string queryStr = "select * from Win32_Share";

            ConnectionOptions co = new ConnectionOptions();
            co.Username = userName;
            co.Password = password;

            ManagementScope ms = new ManagementScope(string.Format(@"\\{0}\root\cimv2", computerName), co);
            ms.Connect();
            if (ms.IsConnected)
            {
                ObjectQuery query = new ObjectQuery(queryStr);
                using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(ms, query))
                {
                    using (ManagementObjectCollection searchResult = searcher.Get())
                    {
                        foreach (ManagementObject mo in searchResult)
                        {
                            foreach (PropertyData property in mo.Properties)
                            {
                                Console.WriteLine("Name:{0}\tPath:{1}", mo.Properties["Name"].Value.ToString(), mo.Properties["Path"].Value.ToString());
                            }
                        }
                    }
                }
            }
        }
        #endregion
    }
}