Created
September 17, 2019 08:54
-
-
Save rickenberg/6f72a3b1f0896251fe9793e8ec7c570b to your computer and use it in GitHub Desktop.
Mapping a network drive to a Windows 10 machine
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Runtime.InteropServices; | |
namespace Utility | |
{ | |
public class NetworkDrive | |
{ | |
private enum ResourceScope | |
{ | |
RESOURCE_CONNECTED = 1, | |
RESOURCE_GLOBALNET, | |
RESOURCE_REMEMBERED, | |
RESOURCE_RECENT, | |
RESOURCE_CONTEXT | |
} | |
private enum ResourceType | |
{ | |
RESOURCETYPE_ANY, | |
RESOURCETYPE_DISK, | |
RESOURCETYPE_PRINT, | |
RESOURCETYPE_RESERVED | |
} | |
private enum ResourceUsage | |
{ | |
RESOURCEUSAGE_CONNECTABLE = 0x00000001, | |
RESOURCEUSAGE_CONTAINER = 0x00000002, | |
RESOURCEUSAGE_NOLOCALDEVICE = 0x00000004, | |
RESOURCEUSAGE_SIBLING = 0x00000008, | |
RESOURCEUSAGE_ATTACHED = 0x00000010 | |
} | |
private 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 struct NETRESOURCE | |
{ | |
public ResourceScope oResourceScope; | |
public ResourceType oResourceType; | |
public ResourceDisplayType oDisplayType; | |
public ResourceUsage oResourceUsage; | |
public string sLocalName; | |
public string sRemoteName; | |
public string sComments; | |
public string sProvider; | |
} | |
[DllImport("mpr.dll")] | |
private static extern int WNetAddConnection2 | |
(ref NETRESOURCE oNetworkResource, string sPassword, | |
string sUserName, int iFlags); | |
[DllImport("mpr.dll")] | |
private static extern int WNetCancelConnection2 | |
(string sLocalName, uint iFlags, int iForce); | |
public static void MapNetworkDrive(string sDriveLetter, string sNetworkPath, string username, string password) | |
{ | |
//Checks if the last character is \ as this causes error on mapping a drive. | |
if (sNetworkPath.Substring(sNetworkPath.Length - 1, 1) == @"\") | |
{ | |
sNetworkPath = sNetworkPath.Substring(0, sNetworkPath.Length - 1); | |
} | |
NETRESOURCE oNetworkResource = new NETRESOURCE() | |
{ | |
oResourceType = ResourceType.RESOURCETYPE_DISK, | |
sLocalName = sDriveLetter + ":", | |
sRemoteName = sNetworkPath | |
}; | |
//If Drive is already mapped disconnect the current | |
//mapping before adding the new mapping | |
if (IsDriveMapped(sDriveLetter)) | |
{ | |
DisconnectNetworkDrive(sDriveLetter, true); | |
} | |
WNetAddConnection2(ref oNetworkResource, password, username, 0); | |
} | |
public static int DisconnectNetworkDrive(string sDriveLetter, bool bForceDisconnect) | |
{ | |
if (bForceDisconnect) | |
{ | |
return WNetCancelConnection2(sDriveLetter + ":", 0, 1); | |
} | |
else | |
{ | |
return WNetCancelConnection2(sDriveLetter + ":", 0, 0); | |
} | |
} | |
public static bool IsDriveMapped(string sDriveLetter) | |
{ | |
string[] DriveList = Environment.GetLogicalDrives(); | |
for (int i = 0; i < DriveList.Length; i++) | |
{ | |
if (sDriveLetter + ":\\" == DriveList[i].ToString()) | |
{ | |
return true; | |
} | |
} | |
return false; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
The code is taken for here (thank you!): https://stackoverflow.com/questions/43173970/map-network-drive-programmatically-in-c-sharp-on-windows-10