Windowsのネットワーク共有フォルダにアクセスする際、認証が必要な場合があります。
指定した資格情報で共有フォルダに接続する方法を解説します。
WNetAddConnection2 とは?
WNetAddConnection2
は Windows API の一つで、指定した資格情報を使用してネットワークリソース(共有フォルダなど)に接続するために使用されます。
必要な using ディレクティブ
まず、必要な名前空間をインポートします。
using System;
using System.Runtime.InteropServices;
WNetAddConnection2 の P/Invoke 宣言
C# から WNetAddConnection2
を使用するためには、P/Invoke を利用して API を呼び出せるように定義する必要があります。
[StructLayout(LayoutKind.Sequential)]
public struct NETRESOURCE
{
public int dwScope;
public int dwType;
public int dwDisplayType;
public int dwUsage;
public string lpLocalName;
public string lpRemoteName;
public string lpComment;
public string lpProvider;
}
public class NetworkShareAccess
{
[DllImport("mpr.dll", CharSet = CharSet.Auto)]
private static extern int WNetAddConnection2(
ref NETRESOURCE lpNetResource,
string lpPassword,
string lpUsername,
int dwFlags);
[DllImport("mpr.dll", CharSet = CharSet.Auto)]
private static extern int WNetCancelConnection2(
string lpName,
int dwFlags,
bool fForce);
共有フォルダに接続するメソッド
次に、共有フォルダへ接続するためのメソッドを作成します。
public static int ConnectToSharedFolder(string remotePath, string username, string password)
{
NETRESOURCE netResource = new NETRESOURCE
{
dwType = 1, // RESOURCETYPE_DISK
lpRemoteName = remotePath
};
int result = WNetAddConnection2(ref netResource, password, username, 0);
return result;
}
このメソッドを呼び出すことで、認証情報を用いて共有フォルダに接続できます。
共有フォルダの切断
使用が終わったら、接続を解除することを推奨します。
public static int DisconnectFromSharedFolder(string remotePath)
{
return WNetCancelConnection2(remotePath, 0, true);
}
}
使用例
以下のコードを実行すると、共有フォルダに接続し、ファイル操作を行った後、接続を解除できます。
class Program
{
static void Main()
{
string networkPath = "\\\\192.168.1.100\\SharedFolder";
string username = "DOMAIN\\user";
string password = "password123";
int connectResult = NetworkShareAccess.ConnectToSharedFolder(networkPath, username, password);
if (connectResult == 0)
{
Console.WriteLine("接続成功!");
// ここでファイル操作を実行
NetworkShareAccess.DisconnectFromSharedFolder(networkPath);
}
else
{
Console.WriteLine($"接続失敗: エラーコード {connectResult}");
}
}
}
まとめ
WNetAddConnection2
を使用して、ネットワーク共有フォルダに認証情報付きでアクセスできる。- 使用後は
WNetCancelConnection2
を用いて適切に切断する。 - P/Invoke を用いることで Windows API を C# で利用できる。
この方法を活用すれば、ネットワーク上のリソースにスムーズにアクセスできます。
コメント