建立网络连接,类似net use命令建立的网络磁盘。
MapNetworkDrive proc host:DWORD
LOCAL @ret: DWORD
LOCAL @user[64]: BYTE
LOCAL @pass[64]: BYTE
LOCAL @drive[16]: BYTE
LOCAL @folder[64]: BYTE
LOCAL @nr: NETRESOURCE
mov @ret, 0h
; load the connect parameters.
INVOKE LoadString, NULL, IDS_USER, addr @user, 64
INVOKE LoadString, NULL, IDS_PASSWORD, addr @pass, 64
INVOKE LoadString, NULL, IDS_LOCAL_DRIVE, addr @drive, 16
INVOKE LoadString, NULL, IDS_SHARED_FOLDER, addr @folder, 64
; if the drive has been existed.
INVOKE GetDriveType, addr @drive
; drive not exist.
cmp eax, DRIVE_UNKNOWN
jz @F
cmp eax, DRIVE_NO_ROOT_DIR
jz @F
cmp eax, DRIVE_REMOTE
; drive is a local fixed disk, can't continue.
jnz Return_Exit
; drive is a network disk, call API to delete it.
INVOKE WNetCancelConnection, addr @drive, 1h
@@:
INVOKE RtlZeroMemory, addr @nr, sizeof NETRESOURCE
mov @nr.dwType, RESOURCETYPE_DISK
lea eax, @drive
mov @nr.lpLocalName, eax
INVOKE wsprintf, addr szResStringBuffer, SADD("\\%s\%s"), host, addr @folder
lea eax, szResStringBuffer
mov @nr.lpRemoteName, eax
mov @nr.lpProvider, NULL
; create new shared connect.
INVOKE WNetAddConnection2, addr @nr, addr @pass, addr @user, 0h
cmp eax, NO_ERROR
jnz Return_Exit
mov @ret, 1h
Return_Exit:
return @ret
MapNetworkDrive endp