C#リモート共有ロックフォルダへのアクセス

4274 ワード

1つ目:


  

using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;

namespace ManageCenter
{
    public  class ConnShareRes
    {
        private string userName;
        private string userPwd;
        private string shareResDictionary;
        //
        public ConnShareRes(string myUserName, string myUserPwd, string myShareResDictionary)
        {
            this.userName = myUserName;
            this.userPwd = myUserPwd;
            this.shareResDictionary = myShareResDictionary;
        }
        [StructLayout(LayoutKind.Sequential)]
        public struct NETRESOURCEA
        {
            public int dwScope;
            public int dwType;
            public int dwDisplayType;
            public int dwUsage;
            [MarshalAs(UnmanagedType.LPStr)]
            public string lpLocalName;
            [MarshalAs(UnmanagedType.LPStr)]
            public string lpRemoteName;
            [MarshalAs(UnmanagedType.LPStr)]
            public string lpComment;
            [MarshalAs(UnmanagedType.LPStr)]
            public string lpProvider;
            public override String ToString()
            {
                String str = "LocalName: " + lpLocalName + " RemoteName: " + lpRemoteName + " Comment: " + lpComment + " lpProvider: " + lpProvider;
                return (str);
            }
        }
        [DllImport("mpr.dll")]
        public static extern int WNetAddConnection2([MarshalAs(UnmanagedType.LPArray)] NETRESOURCEA[] lpNetResource, [MarshalAs(UnmanagedType.LPStr)] string lpPassword, [MarshalAs(UnmanagedType.LPStr)] string UserName, int dwFlags);
        [DllImport("mpr.dll")]
        public static extern int WNetCancelConnection2(string lpName, int dwFlags, bool fForce);
        //
        public  bool RemoteConnect(bool bConnected)
        {
            int res;
            NETRESOURCEA[] n = new NETRESOURCEA[1];
            n[0] = new NETRESOURCEA();
            n[0].dwType = 1;
            int dwFlags = 1; // CONNECT_INTERACTIVE;
            //n[0].lpLocalName = @"X:";
            n[0].lpLocalName = @"";

            n[0].lpRemoteName = shareResDictionary;
            //n[0].lpRemoteName = @"";
            n[0].lpProvider = null;
            //Console.WriteLine(n[0]);
            if (bConnected)
            {
                res = WNetAddConnection2(n, userPwd, userName, dwFlags);
            }
            else
            {
                res=WNetCancelConnection2(shareResDictionary, 1, true);
            }
            return (res == 0) ? true : false;
        }
    }//class
}//namespace

 

2つ目:

 using   System;   

   using   System.Management;   

    

  class   Sample_ConnectionOptions   

  {   

          public   static   int   Main(string[]   args)   {   

                  ConnectionOptions   options   =   new   ConnectionOptions();   

                  options.Username   =    ;   //could   be   in   domain\user   format   

                  options.Password   =    ;   

                  ManagementScope   scope   =   new   ManagementScope(   

                          "\\\\servername\\root\\cimv2",   

                          options);   

                  try   {   

                          scope.Connect();   

                          ManagementObject   disk   =   new   ManagementObject(   

                                  scope,   

                                  new   ManagementPath("Win32_logicaldisk='c:'"),   

                                  null);   

                          disk.Get();   

                  }   

                  catch   (Exception   e)   {   

                          Console.WriteLine("Failed   to   connect:   "   +   e.Message);   

                  }   

                  return   0;   

          }   

  }