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)