[AccessD] OT: Mapped drive on VPN

Stuart McLachlan stuart at lexacorp.com.pg
Thu Feb 6 01:07:00 CST 2003


On 6 Feb 2003 at 0:14, John W. Colby wrote:

> Guys, I have a VPN setup to allow me to Remote Access into a client's
> system.. Works great, highly recommended.
> 
> I also have a mapped drive on the client's system.  using that, whenever I
> have the VPN connection going I can drag and drop from my hard disk to the
> client's hard disk.  Also works well except... if I don't have the VPN up,
> it wreaks havoc with many different things.  Basically any time that Windows
> goes out to "scan" for available media, I have to endure a timeout.  This
> means when any File Find dialog opens and I click the combo at the top to
> display the hard disks... 10 (or more) seconds while it figures out it can't
> see that drive.  IEs "autocomplete" in the address bar doesn't work any more
> etc.
> 
> My question is, is there any way, using scripting or otherwise, to set up
> something like a batch file to create the mapped drive.  This would allow me
> to unmap the drive whenever I am not connected, the connect and remap the
> drive whenever I want to connect to that client using the VPN.
> 
> I like the mapped drive and drag and drop from here to there soooo much I am
> very hesitant to disable it, but it is a major PITA to endure the problems
> whenever the VPN is not active.
> 

You got me interested so i just had a look at the API to see how this could be done. it's fairly simple, just a single call 
each way, so I knocked up a couple of PowerBasic CLI applications to map and unmap drives. 

They have VERY limited error checking/reporting (just a message box if there is an error), but they should do what you 
want as long as you get the command line in your batch file or shortcut right.

Let me know if you want the compiled executables and I will email them to you. They fit into a 10Kb zip file

Alternatively, you can adapt the source and roll your own in whatever language you prefer.
The only problem you may  have converting to VB or VBA is with the ASCIIZ, ASCIIZ PTR and STRPTR .

 Here is the PB source:
(watch for wrapping)


AAAAAH! just checking it before clicking "Send" and noticed I had still got an Admin level username and password in 
there - and I'm working on a major network here at the moment.


UNMAP.EXE:
==========
DECLARE FUNCTION WNetCancelConnection2 LIB "MPR.DLL" ALIAS "WNetCancelConnection2A" (lpName AS ASCIIZ, BYVAL dwFlags AS DWORD, BYVAL fForce AS LONG) AS DWORD

FUNCTION PBMAIN() AS LONG
    DIM strCommand AS STRING
    DIM Sharename AS ASCIIZ * 255
    DIM ireturn AS LONG
    strCommand = COMMAND$
    IF strCommand = "" THEN
        MSGBOX "Usage: UNMAP D ,where D is the drive letter"
        EXIT FUNCTION
    END IF
    sharename = strCommand$ & ":\"
    ireturn = WNetCancelCOnnection2(sharename,0,0)
    MSGBOX STR$(IRETURN)
END FUNCTION
                     
======End of UNMAP.EXE=========

MAP.EXE
=======
   dwScope       AS DWORD
    dwType        AS DWORD
    dwDisplayType AS DWORD
    dwUsage       AS DWORD
    lpLocalName   AS ASCIIZ PTR
    lpRemoteName  AS ASCIIZ PTR
    lpComment     AS ASCIIZ PTR
    lpProvider    AS ASCIIZ PTR
END TYPE

DECLARE FUNCTION WNetAddConnection2 LIB "MPR.DLL" ALIAS "WNetAddConnection2A" (lpszNetResource AS NETRESOURCE, lpszPassword AS ASCIIZ, lpszUserName AS ASCIIZ, BYVAL dwFlags AS DWORD) AS DWORD


FUNCTION PBMAIN() AS LONG
    DIM strCommand AS STRING
    DIM Sharename AS STRING
    DIM Drivename AS STRING
    DIM NResource AS NETRESOURCE
    DIM ireturn AS LONG
    DIM pw AS ASCIIZ * 32
    DIM Username AS ASCIIZ * 32
    
    pw = "xxxxxxxx"
    username = "xxxxxxxxxx"
    
    strCommand = COMMAND$
    IF strCommand = "" THEN
        MSGBOX "Usage: MAP D \\Server\Share where D is the drive letter to Map"
        EXIT FUNCTION
    END IF
    
    Sharename = MID$(strCommand,INSTR(strCommand,"\\"))
    Drivename = LEFT$(strCommand,1) & ":"
    NResource.dwScope  = 2    'RESOURCE_GLOBALNET
    NResource.dwType  =  1   'RESOURCETYPE_DISK
    NResource.dwDisplayType = 3 'RESOURCEDISPLAYTYPE_SHARE
    NResource.dwUsage = 1 'RESOURCEUSAGE_CONNECTABLE
    NResource.lpLocalName = STRPTR(Drivename)
    NResource.lpRemoteName  = STRPTR(Sharename)
       
    ireturn = WNetAddCOnnection2(NResource,pw,username,0)
    MSGBOX STR$(ireturn)
    
END FUNCTION

                                                              

-- 
Stuart McLachlan
Lexacorp Ltd
Application Development,  IT Consultancy
http://www.lexacorp.com.pg




More information about the AccessD mailing list