Vb.net 映射/取消映射驱动器失败

Vb.net 映射/取消映射驱动器失败,vb.net,mapped-drive,Vb.net,Mapped Drive,我需要先映射,然后使用VB.NET取消映射2x驱动器 映射驱动器时,我还需要传递用户名和密码(因为并非所有用户都具有管理员权限) 但是,下面的命令不仅不起作用(无法映射,因此也无法取消映射),而且我注意到,在映射驱动器时,我只能选择传递密码,而不能传递用户名 有人能帮我解决这些问题吗?谢谢 Private Declare Function WNetAddConnection Lib "mpr.dll" Alias "WNetAddConnectionA" (ByVal lpszNetPath A

我需要先映射,然后使用VB.NET取消映射2x驱动器

映射驱动器时,我还需要传递用户名和密码(因为并非所有用户都具有管理员权限)

但是,下面的命令不仅不起作用(无法映射,因此也无法取消映射),而且我注意到,在映射驱动器时,我只能选择传递密码,而不能传递用户名

有人能帮我解决这些问题吗?谢谢

Private Declare Function WNetAddConnection Lib "mpr.dll" Alias "WNetAddConnectionA" (ByVal lpszNetPath As String,
                                                                                     ByVal lpszPassword As String,
                                                                                     ByVal lpszLocalName As String) As Long
Private Declare Function WNetCancelConnection Lib "mpr.dll" Alias "WNetCancelConnectionA" (ByVal lpszName As String,
                                                                                           ByVal bForce As Long) As Long

Public Function MapDrive(ByVal UNCPath As String, ByVal Password As String, ByVal DriveLetter As String) As Boolean

    Dim MappedResult As Long = WNetAddConnection(UNCPath, Password, DriveLetter)

    Return IIf(MappedResult = 0, True, False)

End Function

Public Function UnmapDrive(ByVal DriveLetter As String) As Boolean

    Dim UnmappedResult As Long = WNetCancelConnection(DriveLetter, 0)

    Return IIf(UnmappedResult = 0, True, False)

End Function

您应该切换到使用WNetAddConnection2/WNetCancelConnection2函数。前者允许您在调用中指定用户名。以下是我过去成功使用的PInvoke签名:

Private 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

Private Declare Function WNetCancelConnection2 Lib "mpr.dll" Alias "WNetCancelConnection2A" _
    (ByVal lpName As String, ByVal dwFlags As Integer, ByVal fForce As Integer) As Integer

Private Declare Function WNetGetLastError Lib "mpr.dll" Alias "WNetGetLastErrorA" _
    (ByRef nError As Integer, ByRef lpErrorBuf As String, ByVal nErrorBufSize As Integer, _
     ByRef lpNamebuf As String, ByVal nNameBufSize 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

Private Const ForceDisconnect As Integer = 1
Private Const RESOURCETYPE_DISK As Long = &H1
专用声明函数WNetAddConnection2 Lib“mpr.dll”别名“WNetAddConnection2A”_
(ByRef lpNetResource作为NETRESOURCE,ByVal lpPassword作为字符串_
ByVal lpUserName作为字符串,ByVal dwFlags作为整数)作为整数
私有声明函数WNetCancelConnection2 Lib“mpr.dll”别名“WNetCancelConnection2A”_
(ByVal lpName作为字符串,ByVal dwFlags作为整数,ByVal fForce作为整数)作为整数
私有声明函数WNetGetLastError Lib“mpr.dll”别名“WNetGetLastErrorA”_
(ByRef Nrror为整数,ByRef lpErrorBuf为字符串,ByVal nErrorBufSize为整数_
ByRef lpNamebuf作为字符串,ByVal nNameBufSize作为整数)作为整数
_
公共结构网络资源
作为整数的公共dwScope
公共dwType为整数
公共dwDisplayType为整数
作为整数的公共DWG用法
公共lpLocalName作为字符串
公共lpRemoteName作为字符串
公共lpComment作为字符串
公共lpProvider作为字符串
端部结构
Private Const ForceDisconnect作为整数=1
Private Const RESOURCETYPE_磁盘的长度=&H1

GetLastError对于找出映射失败的原因(密码错误等)非常有用。

好的,所以晚了一周,但感谢您提供的提示。使用上面的PInvoke签名完成了这项工作。