- , .
( )
NetworkCredential nc = new NetworkCredential("<login>", "<pass>");
CredentialCache cache = new CredentialCache();
cache.Add(new Uri("<your network share>"), "Basic", nc);
, . NetworkDrive, WinApi WNetAddConnection2 WNetCancelConnection2:
public class NetworkDrive
{
public enum ResourceScope
{
RESOURCE_CONNECTED = 1,
RESOURCE_GLOBALNET,
RESOURCE_REMEMBERED,
RESOURCE_RECENT,
RESOURCE_CONTEXT
}
public enum ResourceType
{
RESOURCETYPE_ANY,
RESOURCETYPE_DISK,
RESOURCETYPE_PRINT,
RESOURCETYPE_RESERVED
}
public enum ResourceUsage
{
RESOURCEUSAGE_CONNECTABLE = 0x00000001,
RESOURCEUSAGE_CONTAINER = 0x00000002,
RESOURCEUSAGE_NOLOCALDEVICE = 0x00000004,
RESOURCEUSAGE_SIBLING = 0x00000008,
RESOURCEUSAGE_ATTACHED = 0x00000010,
RESOURCEUSAGE_ALL = (RESOURCEUSAGE_CONNECTABLE | RESOURCEUSAGE_CONTAINER | RESOURCEUSAGE_ATTACHED),
}
public enum ResourceDisplayType
{
RESOURCEDISPLAYTYPE_GENERIC,
RESOURCEDISPLAYTYPE_DOMAIN,
RESOURCEDISPLAYTYPE_SERVER,
RESOURCEDISPLAYTYPE_SHARE,
RESOURCEDISPLAYTYPE_FILE,
RESOURCEDISPLAYTYPE_GROUP,
RESOURCEDISPLAYTYPE_NETWORK,
RESOURCEDISPLAYTYPE_ROOT,
RESOURCEDISPLAYTYPE_SHAREADMIN,
RESOURCEDISPLAYTYPE_DIRECTORY,
RESOURCEDISPLAYTYPE_TREE,
RESOURCEDISPLAYTYPE_NDSCONTAINER
}
[StructLayout(LayoutKind.Sequential)]
private class NETRESOURCE
{
public ResourceScope dwScope = 0;
public ResourceType dwType = 0;
public ResourceDisplayType dwDisplayType = 0;
public ResourceUsage dwUsage = 0;
public string lpLocalName = null;
public string lpRemoteName = null;
public string lpComment = null;
public string lpProvider = null;
}
[DllImport("mpr.dll")]
private static extern int WNetAddConnection2(NETRESOURCE lpNetResource, string lpPassword, string lpUsername, int dwFlags);
[DllImport("mpr.dll")]
static extern int WNetCancelConnection2(string lpName, Int32 dwFlags, bool bForce);
private const int CONNECT_UPDATE_PROFILE = 0x1;
private const int NO_ERROR = 0;
public int MapNetworkDrive(string unc, string drive, string user, string password)
{
NETRESOURCE myNetResource = new NETRESOURCE();
myNetResource.lpLocalName = drive;
myNetResource.lpRemoteName = unc;
myNetResource.lpProvider = null;
int result = WNetAddConnection2(myNetResource, password, user, 0);
if (result == 0)
return result;
else
throw new Win32Exception(Marshal.GetLastWin32Error());
}
public int UnmapNetworkDrive(string drive)
{
int result = WNetCancelConnection2(drive, CONNECT_UPDATE_PROFILE, true);
if (result != NO_ERROR)
{
throw new Win32Exception(Marshal.GetLastWin32Error());
}
return result;
}
}
:
NetworkDrive nd = new NetworkDrive();
try
{
if (nd.MapNetworkDrive("<your network share>", "Z:", "<login>", "<pass>") == 0)
{
NetworkCredential nc = new NetworkCredential("<login>", "<pass>");
CredentialCache cache = new CredentialCache();
cache.Add(new Uri("<your network share>"), "Basic", nc);
}
}
finally
{
nd.UnmapNetworkDrive("Z:");
}