Einmal UNC Pfad und zurück
Den UNC Pfad eines Netzlaufwerks ermitteln und ein Netzlaufwerk zu einem UNC Pfad finden
Netzwerkfreigaben können unter Windows mit virtuellen Laufwerken assoziiert werden. Den UNC Pfad eines solchen Netzlaufwerks ermitteln Sie über einen einzigen API Aufruf und können auch gleich ein passendes Netzlaufwerk zu einem UNC Pfad finden.
Netzwerkfreigaben können unter Windows mit virtuellen Laufwerken assoziiert werden, so dass der Zugriff wie bei einem normale Laufwerk erfolgen kann, ohne dass man den Servernamen und Freigabenamen kennen muss. Mit der API Funktion WNetGetConnection kann diese Netzwerkverbindung "enttarnt" werden und der UNC Pfad (Universial Naming Convention) eines Netzlaufwerks ermittelt werden.
Der Funktion LocalPathToUNCPath braucht nur noch der Laufwerksbuchstabe oder, wenn es sein muss, sogar ein kompletter Pfad übergeben werden und sie liefert den entsprechenden UNC Pfad zurück:
Private Declare Function WNetGetConnection Lib "mpr.dll" Alias _ "WNetGetConnectionA" (ByVal lpszLocalName As String, _ ByVal lpszRemoteName As String, cbRemoteName As Long) As Long Private Const NO_ERROR = 0 Private Const ERROR_MORE_DATA = 234 Public Function LocalPathToUNCPath(ByVal MappedDrive As String) As String Dim lngRet As Long Dim strUNC As String Dim lngSize As Long MappedDrive = Left$(MappedDrive, 1) & ":" lngRet = WNetGetConnection(MappedDrive, strUNC, lngSize) If lngRet = ERROR_MORE_DATA Then strUNC = Space$(lngSize) lngRet = WNetGetConnection(MappedDrive, strUNC, lngSize) If lngRet = NO_ERROR Then LocalPathToUNCPath = Left$(strUNC, InStr(1, strUNC, vbNullChar) - 1) End If End If End Function
Für den "Rückwärtsgang", also dem Auffinden eines passenden Netzlaufwerks zu einem UNC Pfad, bietet Windows keine direkte API Funktion, was aber nicht weiter tragisch ist, denn die Zahl der maximal möglichen Laufwerke, hinter denen sich ein Netzlaufwerk verstecken könnte, ist überschaubar und liegt irgendwo zwischen A und Z. Mit der API Funktion GetDriveType wird ermittelt, ob sich hinter einem Laufwerksbuchstaben ein Netzlaufwerk befindet, dann wird mit der Funktion LocalPathToUNCPath der UNC Pfad aufgelöst und mit dem gefragten Pfad verglichen:
Private Declare Function GetDriveType Lib "kernel32" Alias _ "GetDriveTypeA" (ByVal nDrive As String) As Long Private Const DRIVE_REMOTE = 4 Public Function UNCPathToLocalPath(ByVal UNCPath As String) As String Dim strDrive As String Dim i As Integer If Right$(UNCPath, 1) = "\" Then UNCPath = Left$(UNCPath, Len(UNCPath) - 1) End If For i = 65 To 90 strDrive = Chr$(i) & ":\" If GetDriveType(strDrive) = DRIVE_REMOTE Then If StrComp(LocalPathToUNCPath(strDrive), UNCPath, vbTextCompare) = 0 Then UNCPathToLocalPath = strDrive Exit For End If End If Next End Function
Download
- Modul modUNCPaths (uncpaths.zip - 1 KB)