Search
Module:
Directory

   Desktop Functions:

   Smart Device Functions:


Show Recent Changes
Subscribe (RSS)
Misc. Pages
Comments
FAQ
Helpful Tools
Playground
Suggested Reading
Website TODO List
Download Visual Studio Add-In

WNetAddConnection2 (mpr)
 
.
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, uint 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, uint 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    = 0,
  //      RESOURCETYPE_DISK       = 1,
  //      RESOURCETYPE_PRINT      = 2,
  //      RESOURCETYPE_RESERVED   = 8,
  //      RESOURCETYPE_UNKNOWN    = -1,
  //      };

  //      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
  */

C# Sample 2

  public class NetworkConnection : IDisposable
  {
    string _networkName;

    public NetworkConnection(string networkName,
    NetworkCredential credentials)
    {
    _networkName = networkName;

    var netResource = new NetResource()
    {
        Scope = ResourceScope.GlobalNetwork,
        ResourceType = ResourceType.Disk,
        DisplayType = ResourceDisplaytype.Share,
        RemoteName = networkName
    };

    var result = WNetAddConnection2(
        netResource,
        credentials.Password,
        credentials.UserName,
        0);

    if (result != 0)
    {
        throw new IOException("Error connecting to remote share",
        result);
    }  
    }

    ~NetworkConnection()
    {
    Dispose(false);
    }

    public void Dispose()
    {
    Dispose(true);
    GC.SuppressFinalize(this);
    }

    protected virtual void Dispose(bool disposing)
    {
    WNetCancelConnection2(_networkName, 0, true);
    }

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

    [DllImport("mpr.dll")]
    private static extern int WNetCancelConnection2(string name, int flags,
    bool force);
  }

[StructLayout(LayoutKind.Sequential)]

public class NetResource

{

    public ResourceScope Scope;
    public ResourceType ResourceType;
    public ResourceDisplaytype DisplayType;
    public int Usage;
    public string LocalName;
    public string RemoteName;
    public string Comment;
    public string Provider;

}

public enum ResourceScope : int

{

    Connected = 1,
    GlobalNetwork,
    Remembered,
    Recent,
    Context

};

public enum ResourceType : int

{

    Any = 0,
    Disk = 1,
    Print = 2,
    Reserved = 8,

}

public enum ResourceDisplaytype : int

{

    Generic = 0x0,
    Domain = 0x01,
    Server = 0x02,
    Share = 0x03,
    File = 0x04,
    Group = 0x05,
    Network = 0x06,
    Root = 0x07,
    Shareadmin = 0x08,
    Directory = 0x09,
    Tree = 0x0a,
    Ndscontainer = 0x0b

}

C# Sample 3. Complete Sample, Copy/Paste into code type of sample.

//start copy/paste
using System.Runtime.InteropServices;

namespace Utilities.Network
{  
    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);

    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);
        return result;
    }
    }
}
//end copy/paste

Implimentation of C# Sample 3

Utilities.Network.NetworkDrive nd = new Utilities.Network.NetworkDrive();
if( nd.MapNetworkDrive(@"\\servername\shardrive","Z:",null,null) == 0 )
{
      Console.WriteLine("Mapped!");
}
else
{
    Console.WriteLine("Failed!");
}

end of C# sample 3

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

Please edit this page!

Do you have...

  • helpful tips or sample code to share for using this API in managed code?
  • corrections to the existing content?
  • variations of the signature you want to share?
  • additional languages you want to include?

Select "Edit This Page" on the right hand toolbar and edit it! Or add new pages containing supporting types needed for this API (structures, delegates, and more).

 
Access PInvoke.net directly from VS:
Terms of Use
Edit This Page
Find References
Show Printable Version
Revisions