AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

AV nach WNetGetUniversalName

Ein Thema von Alter Mann · begonnen am 15. Mai 2011 · letzter Beitrag vom 16. Mai 2011
Antwort Antwort
Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
934 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

AV nach WNetGetUniversalName

  Alt 15. Mai 2011, 18:04
Hallo, ich bin mal wieder auf Eure Hilfe angewiesen.
Im Anhang der Source (Delphi 2009) zur einer kleinen Übung von mir:
Es werden alle logischen Laufwerke in einem TreeView dargestellt.
Unter anderem auch verbundene Netzwerk-Laufwerke.
Um den UNC-Pfad zu ermitteln benutze ich WNetGetUniversalName:
Delphi-Quellcode:
procedure TRemoteDrive.ReadDriveInfo;
var
  Buffer: UNIVERSAL_NAME_INFO;
  Size : DWORD;
begin
  FDeviceType := FILE_DEVICE_NETWORK;
  Size := 1024;
  try
    if WNETGetUniversalName(PWideChar(FDriveLetter), UNIVERSAL_NAME_INFO_LEVEL, @Buffer, Size) = 0 then
    FRemotePath := Buffer.lpUniversalName;
  except
  end;
end;
doch Leider kommt es nach dem verlassen der Procedur zu einer AV und ich habe keinen Schimmer warum.
Also wer Lust und Laune hat mal den Source zu testen, ich wäre jedenfalls für Tipps dankbar.

VG Alter Mann
Angehängte Dateien
Dateityp: zip DriveTree.zip (18,7 KB, 9x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: AV nach WNetGetUniversalName

  Alt 15. Mai 2011, 19:55
Dein Buffer ist nur 4 Byte und deine angegebenen 1024.
Das Ergebnis ist ein Pufferüberlauf und da braucht man sich nicht wundern, wenn es auch mal knallt.

Tipp: Schau mal ins MSDN und vorallem auf das Beispiel.
MSDN-Library durchsuchenWNETGetUniversalName
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
ringli

Registriert seit: 7. Okt 2004
504 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: AV nach WNetGetUniversalName

  Alt 15. Mai 2011, 20:03
Delphi-Quellcode:
function GetUNCName(const LocalPath: string): string;
var
  BufferSize: DWord;
  DummyBuffer: Byte;
  Buffer: Pointer;
  Error: DWord;
begin
  BufferSize := 1;
  WNetGetUniversalName(PChar(LocalPath), UNIVERSAL_NAME_INFO_LEVEL, @DummyBuffer, BufferSize);
  Buffer := AllocMem(BufferSize);
  try
    Error := WNetGetUniversalName(PChar(LocalPath), UNIVERSAL_NAME_INFO_LEVEL, Buffer, BufferSize);
    if Error <> NO_ERROR then
      begin
        SetLastError(Error);
        RaiseLastWin32Error;
      end;
    Result := PUniversalNameInfo(Buffer)^.lpUniversalName
  finally
    FreeMem(Buffer);
  end;
end;
Quelle: http://www.tek-tips.com/viewthread.c...34056&page=152

Keine Ahnung ob es funktioniert, da ich hier momentan kein Netzwerk zum Testen habe.
  Mit Zitat antworten Zitat
Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
934 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: AV nach WNetGetUniversalName

  Alt 16. Mai 2011, 06:12
Danke, das war es!
  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 05:34 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