AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Share zu Laufwerksbuchstabe finden?
Thema durchsuchen
Ansicht
Themen-Optionen

Share zu Laufwerksbuchstabe finden?

Ein Thema von Bernhard Geyer · begonnen am 28. Jan 2008 · letzter Beitrag vom 29. Mai 2009
Antwort Antwort
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#1

Share zu Laufwerksbuchstabe finden?

  Alt 28. Jan 2008, 12:08
Mit welcher API-Funktion kann man das Share-Verzeichnis bekommen das verwendet wurde um einen Laufwerksbuchstaben zu verbinden?

Also für "X:" das Share "\\ServerName\Share" bekommen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
raiguen
(Gast)

n/a Beiträge
 
#2

Re: Share zu Laufwerksbuchstabe finden?

  Alt 28. Jan 2008, 13:05
API-Funktion(en): WNetOpenEnum, WNetEnumResource, WNEtCloseEnum... sh auch Win32 Developers Refernez für weitere Information(en).
Beispiel für die Verwendung findest Du hier
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#3

Re: Share zu Laufwerksbuchstabe finden?

  Alt 28. Jan 2008, 13:28
Reicht nicht ein einfaches

ExpandUNCFileName('X:\')
  Mit Zitat antworten Zitat
raiguen
(Gast)

n/a Beiträge
 
#4

Re: Share zu Laufwerksbuchstabe finden?

  Alt 28. Jan 2008, 13:50
@gammatester: hm, im Prinzip ja...wenn ich denn weiss, wie der Laufwerkbuchstabe heisst...
Die WNet-API-Funktionen zeigen (je nach Parameter) die verwendeten(=aktiven) Netzverbindungen oder die 'gemerkten' und, und...
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Share zu Laufwerksbuchstabe finden?

  Alt 28. Jan 2008, 14:02
Zitat von raiguen:
API-Funktion(en): WNetOpenEnum, WNetEnumResource, WNEtCloseEnum... sh auch Win32 Developers Refernez für weitere Information(en).
Danke für die API-Namen

Zitat von raiguen:
Beispiel für die Verwendung findest Du hier
Irgendwie kracht es ab dem 2ten Mal das die Liste geholt wird. Die Variable cEntries ist beim zweiten durchlauf 0 und die for-schleife "verrennt" sich damit.
Aber wieso die Variable cEntries 0 ist, ist mir nicht klar.


Zitat von gammatester:
Reicht nicht ein einfaches

ExpandUNCFileName('X:\')
Danke, für meine zwecke reicht es, auch wenn es schön wäre den Fehler bei den Schweizern zu kennen (um eigene Helper-Methode für andere Zwecke zu schreiben).
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Share zu Laufwerksbuchstabe finden?

  Alt 28. Mai 2009, 14:30
Zitat von raiguen:
API-Funktion(en): WNetOpenEnum, WNetEnumResource, WNEtCloseEnum... sh auch Win32 Developers Refernez für weitere Information(en).
Beispiel für die Verwendung findest Du hier
Hallo Leute,

das Code-Beispiel aus dem Swissdelphicenter auf das hier verwiesen wird hat einen Bug. Er führt zu einem Specherleck. Der Fehler steckt hier:
Delphi-Quellcode:
  repeat
    lpnrDrv := PNETRESOURCE(GlobalAlloc(GPTR, cbBuffer));
    dwResult := WNetEnumResource(hEnum, cEntries, lpnrDrv, cbBuffer);
    if (dwResult = NO_ERROR) then
    begin
      s := 'Network drives:'#13#10;
      for i := 0 to cEntries - 1 do
      begin
        if lpnrDrv^.lpLocalName <> nil then
          s := s + lpnrDrv^.lpLocalName + #9 + lpnrDrv^.lpRemoteName;
        Inc(lpnrDrv); // hier wird die Adresse Incrementiert
      end;
    end
    else if dwResult <> ERROR_NO_MORE_ITEMS then
    begin
      s := s + 'Cannot complete network drive enumeration';
      GlobalFree(HGLOBAL(lpnrDrv));
      break;
    end;
    GlobalFree(HGLOBAL(lpnrDrv)); // hier wird nicht die allociierte Speicheradresse sondern die incrementierte Adresse angegeben
  until (dwResult = ERROR_NO_MORE_ITEMS);
Entweder man merkt sich die Startadresse für lpnrDrv oder man decrementiert die Adresse um genau die Anzahl, um die sie incrementiert wurde.

So führt das zu bösen Speicherlecks.

Gruß Oki
42
  Mit Zitat antworten Zitat
paritycheck

Registriert seit: 8. Feb 2005
51 Beiträge
 
Delphi 2009 Professional
 
#7

Re: Share zu Laufwerksbuchstabe finden?

  Alt 29. Mai 2009, 10:21
Hi,

habe vor kurzem hier ne Funktion dazu gepostet.

Gruß
Michael
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#8

Re: Share zu Laufwerksbuchstabe finden?

  Alt 29. Mai 2009, 10:34
Hallo PartyCheck,

ja, das hier listet aber erst mal nur alle eingetragenen Netzwerkverbindungen auf, unabhängig davon, ob eine Verbindung etabliert ist oder nicht. Mein Kommentar bezog sich darauf, das die gepostete Funktion ein Speicherleck verursacht.

Gruß oki
42
  Mit Zitat antworten Zitat
paritycheck

Registriert seit: 8. Feb 2005
51 Beiträge
 
Delphi 2009 Professional
 
#9

Re: Share zu Laufwerksbuchstabe finden?

  Alt 29. Mai 2009, 10:58
Zitat von oki:
ja, das hier listet aber erst mal nur alle eingetragenen Netzwerkverbindungen auf, unabhängig davon, ob eine Verbindung etabliert ist oder nicht. Mein Kommentar bezog sich darauf, das die gepostete Funktion ein Speicherleck verursacht.
Ok hatte den Thread nur schnell überflogen Das hätte ich jetzt mit GetLogicalDrives und GetDriveType gelöst aber die Lösung der Schweizer zusammen mit deinem Fix ist wohl eleganter.
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#10

Re: Share zu Laufwerksbuchstabe finden?

  Alt 29. Mai 2009, 11:38
Hi, nicht unbedingt eleganter, aber dieser Code listet auch alle Laufwerksbuchstaben auf die für Netzwerkverbindungen reserviert aber nicht aktiv sind. GetLogicalDrives tut dies nicht.

Gruß
42
  Mit Zitat antworten Zitat
Antwort Antwort


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 04:02 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