J
John M. Gamble
I'm getting this message in Visual Studio 2005:
PInvokeStackImbalance was detected
Message: A call to PInvoke function
'Refresh!Refresh.Main::WNetAddConnection2' has unbalanced the stack.
This is likely because the managed PInvoke signature does not match
the unmanaged target signature. Check that the calling convention
and parameters of the PInvoke signature match the target unmanaged
signature.
My goal is to connect to a remote filesystem. I don't want to
create a mapping to the filesystem. I just want to connect using the
login name and password that I already have. The web sites that I
googled around at stated that WNetAddConnection2() could be used for
this purpose, particularly
<http://groups.google.com/group/microsoft.public.vb.winapi.networks/browse_t
hread/thread/f61e50f43601670b/005f911e0da84edc?lnk=st&q=LOGON+VPN+VB&rnum=7&
hl=en#>
The code in question is this:
' dwFlags values.
Private Const CONNECT_UPDATE_PROFILE As Long = &H1
Private Const CONNECT_INTERACTIVE As Long = &H8
Private Const CONNECT_PROMPT As Long = &H10
' dwType values.
Private Const RESOURCETYPE_ANY As Long = &H0
Private Const RESOURCETYPE_DISK As Long = &H1
Private Const RESOURCETYPE_PRINT As Long = &H2
Private Const RESOURCETYPE_RESERVED As Long = &H8
Private Const RESOURCETYPE_UNKNOWN As Long = &HFFFFFFFF
' dwScope values.
Private Const RESOURCE_CONNECTED As Long = &H1
Private Const RESOURCE_GLOBALNET As Long = &H2
Private Const RESOURCE_REMEMBERED As Long = &H3
Private Const RESOURCE_RECENT As Long = &H4
Private Const RESOURCE_CONTEXT As Long = &H5
' dwDisplayType values.
Private Const RESOURCEDISPLAYTYPE_DOMAIN As Long = &H1
Private Const RESOURCEDISPLAYTYPE_GENERIC As Long = &H0
Private Const RESOURCEDISPLAYTYPE_SERVER As Long = &H2
Private Const RESOURCEDISPLAYTYPE_SHARE As Long = &H3
Private Const RESOURCEUSAGE_CONNECTABLE As Long = &H1
Private Const SW_SHOWNORMAL As Long = 1
Private Declare Function WNetAddConnection2 Lib "mpr.dll" _
Alias "WNetAddConnection2A" _
(ByVal lpNetResource As NETRESOURCE, _
ByVal lpPassword As String, _
ByVal lpUserName As String, _
ByVal dwFlags As Long) As Long
' The examples used Private Type but Visual Studio complained
' and said that Structure was now preferred.
Private Structure NETRESOURCE
Dim dwScope As Long
Dim dwType As Long
Dim dwDisplayType As Long
Dim dwUsage As Long
Dim lpLocalName As String
Dim lpRemoteName As String
Dim lpComment As String
Dim lpProvider As String
End Structure
' Function code here.
Dim netstruct As New NETRESOURCE
Dim errcode As Long
With netstruct
.dwScope = RESOURCE_GLOBALNET
.dwType = RESOURCETYPE_ANY
.dwDisplayType = RESOURCEDISPLAYTYPE_SHARE
.dwUsage = RESOURCEUSAGE_CONNECTABLE
.lpRemoteName = backup_base_dir
.lpLocalName = vbNullString
.lpProvider = vbNullString
End With
errcode = WNetAddConnection2(netstruct, _
strLogPass, strLogName, _
CONNECT_INTERACTIVE Or CONNECT_UPDATE_PROFILE)
Am I using contradictory options? Or am I using the wrong function
to begin with?
Thanks,
PInvokeStackImbalance was detected
Message: A call to PInvoke function
'Refresh!Refresh.Main::WNetAddConnection2' has unbalanced the stack.
This is likely because the managed PInvoke signature does not match
the unmanaged target signature. Check that the calling convention
and parameters of the PInvoke signature match the target unmanaged
signature.
My goal is to connect to a remote filesystem. I don't want to
create a mapping to the filesystem. I just want to connect using the
login name and password that I already have. The web sites that I
googled around at stated that WNetAddConnection2() could be used for
this purpose, particularly
<http://groups.google.com/group/microsoft.public.vb.winapi.networks/browse_t
hread/thread/f61e50f43601670b/005f911e0da84edc?lnk=st&q=LOGON+VPN+VB&rnum=7&
hl=en#>
The code in question is this:
' dwFlags values.
Private Const CONNECT_UPDATE_PROFILE As Long = &H1
Private Const CONNECT_INTERACTIVE As Long = &H8
Private Const CONNECT_PROMPT As Long = &H10
' dwType values.
Private Const RESOURCETYPE_ANY As Long = &H0
Private Const RESOURCETYPE_DISK As Long = &H1
Private Const RESOURCETYPE_PRINT As Long = &H2
Private Const RESOURCETYPE_RESERVED As Long = &H8
Private Const RESOURCETYPE_UNKNOWN As Long = &HFFFFFFFF
' dwScope values.
Private Const RESOURCE_CONNECTED As Long = &H1
Private Const RESOURCE_GLOBALNET As Long = &H2
Private Const RESOURCE_REMEMBERED As Long = &H3
Private Const RESOURCE_RECENT As Long = &H4
Private Const RESOURCE_CONTEXT As Long = &H5
' dwDisplayType values.
Private Const RESOURCEDISPLAYTYPE_DOMAIN As Long = &H1
Private Const RESOURCEDISPLAYTYPE_GENERIC As Long = &H0
Private Const RESOURCEDISPLAYTYPE_SERVER As Long = &H2
Private Const RESOURCEDISPLAYTYPE_SHARE As Long = &H3
Private Const RESOURCEUSAGE_CONNECTABLE As Long = &H1
Private Const SW_SHOWNORMAL As Long = 1
Private Declare Function WNetAddConnection2 Lib "mpr.dll" _
Alias "WNetAddConnection2A" _
(ByVal lpNetResource As NETRESOURCE, _
ByVal lpPassword As String, _
ByVal lpUserName As String, _
ByVal dwFlags As Long) As Long
' The examples used Private Type but Visual Studio complained
' and said that Structure was now preferred.
Private Structure NETRESOURCE
Dim dwScope As Long
Dim dwType As Long
Dim dwDisplayType As Long
Dim dwUsage As Long
Dim lpLocalName As String
Dim lpRemoteName As String
Dim lpComment As String
Dim lpProvider As String
End Structure
' Function code here.
Dim netstruct As New NETRESOURCE
Dim errcode As Long
With netstruct
.dwScope = RESOURCE_GLOBALNET
.dwType = RESOURCETYPE_ANY
.dwDisplayType = RESOURCEDISPLAYTYPE_SHARE
.dwUsage = RESOURCEUSAGE_CONNECTABLE
.lpRemoteName = backup_base_dir
.lpLocalName = vbNullString
.lpProvider = vbNullString
End With
errcode = WNetAddConnection2(netstruct, _
strLogPass, strLogName, _
CONNECT_INTERACTIVE Or CONNECT_UPDATE_PROFILE)
Am I using contradictory options? Or am I using the wrong function
to begin with?
Thanks,