VS.NET - VB.NET - How to map a network drive using vb.net
Synopsis:
.NET does not provide a way to map drives. To do this one still needs to access the WinAPI or use the net Use command. I have created two functions which demonstrate simple mapping and disconnecting(unmapping) of network drives using VB.NET and the Win32API.
Solution:
Public Declare Function WNetAddConnection2 Lib "mpr.dll" Alias "WNetAddConnection2A" _ (ByRef lpNetResource As NETRESOURCE, ByVal lpPassword As String, _ ByVal lpUserName As String, ByVal dwFlags As Integer) As Integer Public Declare Function WNetCancelConnection2 Lib "mpr" Alias "WNetCancelConnection2A" _ (ByVal lpName As String, ByVal dwFlags As Integer, ByVal fForce As Integer) As Integer <StructLayout(LayoutKind.Sequential)> _ Public Structure NETRESOURCE Public dwScope As Integer Public dwType As Integer Public dwDisplayType As Integer Public dwUsage As Integer Public lpLocalName As String Public lpRemoteName As String Public lpComment As String Public lpProvider As String End Structure Public Const ForceDisconnect As Integer = 1 Public Const RESOURCETYPE_DISK As Long = &H1 Public Function MapDrive(ByVal DriveLetter As String, ByVal UNCPath As String) As Boolean Dim nr As NETRESOURCE Dim strUsername As String Dim strPassword As String nr = New NETRESOURCE nr.lpRemoteName = UNCPath nr.lpLocalName = DriveLetter & ":" strUsername = Nothing '(add parameters to pass this if necessary) strPassword = Nothing '(add parameters to pass this if necessary) nr.dwType = RESOURCETYPE_DISK Dim result As Integer result = WNetAddConnection2(nr, strPassword, strUsername, 0) If result = 0 Then Return True Else Return False End If End Function Public Function UnMapDrive(ByVal DriveLetter As String) As Boolean Dim rc As Integer rc = WNetCancelConnection2(DriveLetter & ":", 0, ForceDisconnect) If rc = 0 Then Return True Else Return False End If End Function