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.
// 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);
' 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
C# Import by Ducky.
C# Sample by Ducky
C# Sample Modified by honglinlee
Don't forget to add a using for the namespace before referencing the DllImport attribute:
using System.Runtime.InteropServices;
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
TODO