AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi MapUNCPathToDrivePath
Thema durchsuchen
Ansicht
Themen-Optionen

MapUNCPathToDrivePath

Ein Thema von PeterPanino · begonnen am 6. Feb 2023 · letzter Beitrag vom 7. Feb 2023
Antwort Antwort
Seite 1 von 2  1 2      
PeterPanino

Registriert seit: 4. Sep 2004
1.465 Beiträge
 
Delphi 10.4 Sydney
 
#1

MapUNCPathToDrivePath

  Alt 6. Feb 2023, 12:29
Ich habe mir eine Funktion geschrieben, die einen UNC-Pfad (beginnt mit "\\") in den zugehörigen Drive-Path (startet z.B. mit "C:\") konvertieren soll:

Delphi-Quellcode:
function MapUNCPathToDrivePath(UNCPath: string): string;
var
  DrivePath: array[0..MAX_PATH] of Char;
  BufferSize: DWORD;
  Error: DWORD;
begin
  BufferSize := SizeOf(DrivePath);
  Error := Winapi.Windows.WNetGetUniversalName(PChar(UNCPath), UNIVERSAL_NAME_INFO_LEVEL, @DrivePath[0], BufferSize);
  if Error = NO_ERROR then
  begin
    Result := DrivePath;
    CodeSite.Send('MapUNCPathToDrivePath: NO_ERROR');
  end
  else
  begin
    Result := '';
    CodeSite.Send('MapUNCPathToDrivePath: ERROR', Error);
  end;
end;
Auf meinem Test-System ist "\\Mac\Home" äquivalent zu "Y:\". Beides wird im Windows File Explorer äquivalent angezeigt.

Aber diese Funktion gibt einen Leerstring und den Fehlercode 1200 zurück:

MapUNCPathToDrivePath('\\Mac\Home');
Kann das jemand auf seinem System testen?
Geändert von PeterPanino, damit der Platz auf dem Bildschirm nicht so leer aussieht.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.056 Beiträge
 
Delphi 12 Athens
 
#2

AW: MapUNCPathToDrivePath

  Alt 6. Feb 2023, 13:26
1200 sagt natürlich genau aus, was damit gemeint ist, bzw. wir kennen atürlich alle paar Millionen Codes auswendig.

Zitat von GetLastError:
ERROR_BAD_DEVICE

1200 (0x4B0)

The specified device name is invalid.
Zitat von WNetGetUniversalName: Return value:
ERROR_BAD_DEVICE The string pointed to by the lpLocalPath parameter is invalid.

...
CodeSite.SendError('MapUNCPathToDrivePath: ERROR %d = %s', [Error, SysErrorMessage(Error)]);

Tja, es scheint keine unterschiedlichen Fehler für "ungültige Syntax" und "das gibt's hier nicht" zu geben.

* du hast dich doch verschrieben
* der Computer (Mac) konnte nicht aufgelöst/gefunden werden
* der Share "Home" konnte nicht gefunden werden
* oder kein Zugriff auf Eines von Beiden (falsche/fehlende Logindaten)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 6. Feb 2023 um 13:30 Uhr)
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.465 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: MapUNCPathToDrivePath

  Alt 6. Feb 2023, 13:37
Wie ich schrieb, wird der Pfad "\\Mac\Home" sowie sein Äquivalent im Windows File Explorer problemlos angezeigt. Was ist an der obigen Funktion dann falsch?
Geändert von PeterPanino, damit der Platz auf dem Bildschirm nicht so leer aussieht.

Geändert von PeterPanino ( 6. Feb 2023 um 13:52 Uhr)
  Mit Zitat antworten Zitat
shebang

Registriert seit: 7. Feb 2020
124 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: MapUNCPathToDrivePath

  Alt 6. Feb 2023, 13:45
Was ist an der obigen Funktion dann falsch?
Wenn ich die Doku von WNetGetUniversalNameA richtig lese, dann kann die Funktion einen DrivePath in einen UNCPath umwandeln, aber nicht umgekehrt.
Zitat von WNetGetUniversalNameA:
[in] lpLocalPath

A pointer to a constant null-terminated string that is a drive-based path for a network resource.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.056 Beiträge
 
Delphi 12 Athens
 
#5

AW: MapUNCPathToDrivePath

  Alt 6. Feb 2023, 13:58
Sollte passen.

LongStrings in Delphi sind aus Kompatibilitätsgründen "standardmßig" doppelt null-terminiert. (falls kein Bufferoverrun und Dergleichen)
"Constant" kommt auch hin, da sich der String während des Aufrufs nicht ändert.

Aber stimmt, "drive-based" klingt danach, als wenn es andersrum ist,
aber es kann auch ein "univeral name" rein gehn.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 6. Feb 2023 um 14:05 Uhr)
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.465 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: MapUNCPathToDrivePath

  Alt 6. Feb 2023, 14:15
Danke für die Information. Weiß jemand, wie ich den umgekehrten Weg gehen kann - also UNCPath in den zugehörigen DrivePath umwandeln?
Geändert von PeterPanino, damit der Platz auf dem Bildschirm nicht so leer aussieht.
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: MapUNCPathToDrivePath

  Alt 6. Feb 2023, 14:20
Mir fällt nur "HKEY_CURRENT_USER\Network" dazu ein. Darüber iterieren bis ein Treffer zum UNC passt.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.465 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: MapUNCPathToDrivePath

  Alt 6. Feb 2023, 14:37
Mir fällt nur "HKEY_CURRENT_USER\Network" dazu ein. Darüber iterieren bis ein Treffer zum UNC passt.
Dort sind bei mir leider keine UNC-Pfade:
network.png
Geändert von PeterPanino, damit der Platz auf dem Bildschirm nicht so leer aussieht.
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: MapUNCPathToDrivePath

  Alt 6. Feb 2023, 15:18
Komisch, eigentlich solltest Du mit Deiner obigen Angabe "HKEY_CURRENT_USER\Network\Y" ein Auflistung von "Y" erhalten, in diesem wiederum ist dann ein "RemotePath".
Abgesehen das Dein Bild lustige Vierecke hat, ist nichts ersichtlich ob Du da überhaupt richtig bist.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.465 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: MapUNCPathToDrivePath

  Alt 6. Feb 2023, 16:48
Komisch, eigentlich solltest Du mit Deiner obigen Angabe "HKEY_CURRENT_USER\Network\Y" ein Auflistung von "Y" erhalten, in diesem wiederum ist dann ein "RemotePath".
Abgesehen das Dein Bild lustige Vierecke hat, ist nichts ersichtlich ob Du da überhaupt richtig bist.
Hier ist das Bild vergrößert als Beweis:
networkbeweis.jpg

Die "lustigen Vierecke" sind Verpixelungen. Könntest du einen Screenshot von deinem Network-Ordner posten? Danke.
Geändert von PeterPanino, damit der Platz auf dem Bildschirm nicht so leer aussieht.

Geändert von PeterPanino ( 6. Feb 2023 um 16:59 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz