WNetAddConnection2 (mpr)
Last changed: -78.237.25.102

.
Summary
The WNetAddConnection2 function makes a connection to a network resource. The function can redirect a local device to the network resource.

The WNetAddConnection2 function supersedes the WNetAddConnection function. If you can pass a handle to a window that the provider of network resources can use as an owner window for dialog boxes, call the WNetAddConnection3 function instead.

C# Signatures:

// This must be used if NETRESOURCE is defined as a struct
[DllImport("mpr.dll")]    
public static extern int WNetAddConnection2(ref NETRESOURCE netResource,
   string password, string username, int flags);

// This must be used if NETRESOURCE is defined as a class
[DllImport("mpr.dll")]    
public static extern int WNetAddConnection2(NETRESOURCE netResource,
   string password, string username, int flags);

// by cozmo, it only worked for me this way; .NET 1.1, 11.01.2006
// dont know, what [In] means (some CAST ?), found it in microsoft.public.de.german.entwickler.dotnet.csharp
// my NETRESOURCE is defined as:
// [StructLayout(LayoutKind.Sequential)]
//    class NETRESOURCE
//    {    
//        public int dwScope;
//        etc...
//    }

  //by DaManu

  //
  //      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", EntryPoint="WNetAddConnection2", CallingConvention=CallingConvention.Winapi)]
  //      private static extern ErrorCodes WNetAddConnection2(NETRESOURCE lpNetResource,ref string lpPassword,ref
  //                              string lpUsername, System.UInt32 dwFlags );

[DllImport("mpr.dll")]    
public static extern int WNetAddConnection2( [In] NETRESOURCE netResource,
   string password, string username, int flags);

VB Signatures:

' This must be used if NETRESOURCE is defined as a struct
Declare Function WNetAddConnection2 Lib "mpr.dll" (ByRef netResource As _
   NETRESOURCE, password As String, Username As String, Flag As Integer) As Integer

' This must be used if NETRESOURCE is defined as a class
Declare Function WNetAddConnection2 Lib "mpr.dll" (netResource As _
   NETRESOURCE, password As String, Username As String, Flag As Integer) As Integer

User-Defined Types:

NETRESOURCE

Notes:

C# Import by Ducky.

C# Sample by Ducky

C# Sample Modified by honglinlee

Tips & Tricks:

Don't forget to add a using for the namespace before referencing the DllImport attribute:

  using System.Runtime.InteropServices;

Sample Code:

C# Sample

NETRESOURCE myNetResource = new NETRESOURCE();        
myNetResource.dwScope = 2;                    
myNetResource.dwType = 1 ;                    
myNetResource.dwDisplayType = 3;            
myNetResource.dwUsage = 1;            
myNetResource.LocalName = "z:";        
myNetResource.RemoteName = @"\servername\sharename";        
myNetResource.Provider = null;        

// int ret = WNetAddConnection2( myNetResource, "username", "password", 0);

int ret = WNetAddConnection2( myNetResource, "password", "username", 0); //by honglinlee

/*
  * if username = null the function uses the default user name
  *    (The user context for the process provides the default user name)
  * if password = null the function uses the current default password
  *    associated with the user specified by the username parameter
  * if password = "" the function does not use a password
  */

vb.net Sample

This is a function which connects to a share. Will throw a message box with any errors.

Example connect code:

ConnectDrive("\\server\share", "s:", "username", "password")

Public Function ConnectDrive(ByVal RemoteName As String, ByVal LocalName As String, Optional ByVal username As String = Nothing, Optional ByVal password As String = Nothing)
    Dim myResource As NETRESOURCE
    myResource.dwScope = 2
    myResource.dwType = 1
    myResource.dwDisplayType = 3
    myResource.LocalName = LocalName
    myResource.RemoteName = RemoteName
    myResource.dwUsage = Nothing
    myResource.Comment = Nothing
    myResource.Provider = Nothing
    Dim returnValue As Integer
    returnValue = WNetAddConnection2(myResource, password, username, 0)
    If returnValue <> 0 Then
        Dim errorM = New System.ComponentModel.Win32Exception(returnValue).Message
        MsgBox("Could not connect to " & myResource.RemoteName & ". The server said this: " & vbNewLine & vbNewLine & "(Error " & returnValue & ") " & errorM)
    End If

    Return returnValue
End Function

Alternative Managed API:

TODO

Documentation