Te pongo una rutinas para manejar mapeos que usé hace algún tiempo. Espero te sean de utilidad.
Código Delphi
[-]
function DriveAvailable(Drive: Char): Boolean;
var
DriveType: Cardinal;
begin
DriveType := GetDriveType(PChar(String(Drive) + ':'));
Result := DriveType in [DRIVE_NO_ROOT_DIR, DRIVE_REMOTE];
end;
function GetConnection(Drive: Char): String;
var
Buffer: PChar;
BufferLen: Cardinal;
Code: Cardinal;
begin
Buffer := nil;
BufferLen := 0;
Code := WNetGetConnection(PChar(String(Drive) + ':'), Buffer, BufferLen);
if Code = ERROR_MORE_DATA then
begin
GetMem(Buffer, BufferLen);
Code := WNetGetConnection(PChar(String(Drive) + ':'), Buffer, BufferLen);
end;
case Code of
NO_ERROR: Result := Buffer;
ERROR_NOT_CONNECTED: Result := '';
ERROR_CONNECTION_UNAVAIL: Result := 'Connection is unavailable';
else
raise Exception.CreateFmt('Error reading information for drive %s:', [Drive]);
end;
if BufferLen <> 0 then FreeMem(Buffer);
end;
function IsMapped(Drive: Char): Boolean;
begin
Result := GetConnection(Drive) <> '';
end;
function IsMappable(Path: String): Boolean;
var
ShFileInfo: TShFileInfo;
begin
ShGetFileInfo(PChar(Path), 0, ShFileInfo, SizeOf(ShFileInfo), SHGFI_ATTRIBUTES);
Result := ShFileInfo.dwAttributes and SFGAO_FILESYSTEM <> 0;
end;
procedure MapDrive(Drive: Char; NetPath: String; MakePermanent: Boolean);
var
NetResource: TNetResource;
Flags: Cardinal;
Code: Cardinal;
begin
NetResource.dwType := RESOURCETYPE_DISK;
NetResource.lpLocalName := PChar(String(Drive) + ':');
NetResource.lpRemoteName := PChar(NetPath);
NetResource.lpProvider := nil;
if MakePermanent
then Flags := CONNECT_UPDATE_PROFILE
else Flags := 0;
Code := WNetAddConnection2(NetResource, nil, nil, Flags);
if Code <> NO_ERROR then
RaiseLastOSError;
end;
// Saludos