function ConnectDrive(_drvLetter: String; _netPath: String; _password: String; _username: String; _showError: Boolean; _reconnect: Boolean; _interactive: Boolean): DWORD;
var
nRes :TNetResource;
dwFlags :DWORD;
errCode :DWORD;
begin
FillChar(NRes,SizeOf(NRes),#0);
nRes.dwType:=RESOURCETYPE_DISK;
nRes.lpLocalName:=PChar(_drvLetter);
nRes.lpRemoteName:=PChar(_netPath);
nRes.dwScope:=RESOURCE_GLOBALNET;
dwFlags:=0;
If _reconnect then dwFlags:=CONNECT_UPDATE_PROFILE;
If _reconnect and _interactive then dwFlags:=CONNECT_UPDATE_PROFILE and CONNECT_INTERACTIVE;
Result:=WNetAddConnection3(form1.Handle,nRes,PChar(_password),PChar(_username),dwFlags);
end;
function DisConnectDrive(_drvLetter: String; _showError: Boolean; _force: Boolean; _save: Boolean): DWORD;
var
nRes :TNetResource;
dwFlags :DWORD;
errCode :DWORD;
begin
if _save then
dwFlags:=CONNECT_UPDATE_PROFILE
else
dwFlags:=0;
errCode:=WNetCancelConnection2(PChar(_drvLetter),dwFlags,_force);
if (errCode<>NO_ERROR) and (_showError) then
begin
Application.MessageBox(PChar(SysErrorMessage(GetLastError)),
'Error Disconnecting Drive',
MB_OK);
end;
Result:=errCode; {NO_ERROR}
end;