C#リモート共有ロックフォルダへのアクセス
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;
}
}