Skip to content

Latest commit

 

History

History
105 lines (81 loc) · 2.74 KB

sample_318.md

File metadata and controls

105 lines (81 loc) · 2.74 KB

Home

Connecting a local device to a network resource

Before you begin:

Similar examples:


Code:

DO decl

#DEFINE NO_ERROR  0

LOCAL nResult
WAIT WINDOW NOWAIT "Establishing network connection... "
nResult = WNetAddConnection("\\myserver\c", "", "Z:")
WAIT CLEAR

IF nResult <> NO_ERROR
*    5 - ERROR_ACCESS_DENIED
*   53 - ERROR_BAD_NETPATH
*   66 - ERROR_BAD_DEV_TYPE
*   67 - ERROR_BAD_NET_NAME
*   85 - ERROR_ALREADY_ASSIGNED
* 1200 - ERROR_BAD_DEVICE
* 1202 - ERROR_DEVICE_ALREADY_REMEMBERED
* 1203 - ERROR_NO_NET_OR_BAD_PATH
* 1206 - ERROR_BAD_PROFILE
* 1208 - ERROR_EXTENDED_ERROR
	IF nResult = 1208 && ERROR_EXTENDED_ERROR
		? "Extended error:", nResult, GetXError()
	ELSE
		? "Error code:", nResult, GetError(nResult)
	ENDIF
ELSE
	? "Connected successfully!"
ENDIF

FUNCTION GetXError
	LOCAL nErrCode, cErrDescr, cProvider, nResult
	nErrCode = 0
	STORE Repli(Chr(0),250) TO cErrDescr, cProvider

	nResult = WNetGetLastError(@nErrCode,;
		@cErrDescr, Len(cErrDescr), @cProvider, Len(cProvider))

	IF nResult = NO_ERROR
		RETURN LTRIM(STR(nErrCode)) + ". " +;
			ALLTRIM(STRTRAN(cErrDescr, Chr(0),""))
	ENDIF
RETURN ""

FUNCTION GetError(nErrCode)
#DEFINE FORMAT_MESSAGE_ALLOCATE_BUFFER    256
#DEFINE FORMAT_MESSAGE_FROM_SYSTEM       4096
#DEFINE FORMAT_MESSAGE_IGNORE_INSERTS     512

	LOCAL nFlags, nBuffer, nLength, cResult
	nFlags = FORMAT_MESSAGE_ALLOCATE_BUFFER +;
		FORMAT_MESSAGE_FROM_SYSTEM + FORMAT_MESSAGE_IGNORE_INSERTS

	nBuffer = 0
	nLength = FormatMessage(nFlags, 0, nErrCode, 0, @nBuffer, 0,0)

	IF nLength <> 0
		cResult = REPLI(Chr(0), 1024)
		= CopyMemory (@cResult, nBuffer, nLength)
		RETURN STRTRAN(LEFT(cResult, nLength), Chr(13)+Chr(10), "")
	ELSE
		RETURN ""
	ENDIF

PROCEDURE decl
	DECLARE INTEGER WNetGetLastError IN mpr;
		INTEGER @lpError, STRING @lpErrBuf, INTEGER nErrBufSize,;
		STRING @lpNameBuf, INTEGER nNameBufSize

	DECLARE INTEGER WNetAddConnection IN mpr;
		STRING lpRemoteName, STRING lpPassw, STRING lpLocalName

	DECLARE INTEGER FormatMessage IN kernel32;
		INTEGER dwFlags, INTEGER lpSource, INTEGER dwMsgId,;
		INTEGER dwLanguageId, INTEGER @lpBuffer, INTEGER nSize,;
		INTEGER Arguments

	DECLARE RtlMoveMemory IN kernel32 As CopyMemory;
		STRING @Dest, INTEGER Source, INTEGER nLength  

Listed functions:

CopyMemory
FormatMessage
WNetAddConnection
WNetGetLastError