AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi ReadDirectoryChanges() API funktioniert nicht mit VMWare Shared Folders

ReadDirectoryChanges() API funktioniert nicht mit VMWare Shared Folders

Ein Thema von Shark99 · begonnen am 30. Mär 2015 · letzter Beitrag vom 30. Mär 2015
Antwort Antwort
Shark99

Registriert seit: 16. Mai 2007
403 Beiträge
 
#1

ReadDirectoryChanges() API funktioniert nicht mit VMWare Shared Folders

  Alt 30. Mär 2015, 21:45
Ich hab ein sehr ungewöhnliches Problem entdeckt. Ich hoffe jemand kann mir dabei helfen eine Lösung zu finden.

Es geht um die Win32 API Funktion ReadDirectoryChanges. Hier wird sie von der (Delphi 5-7) Komponente TDirMon verwendet (angehängt Komponente + Source + Minimalbeispiel + Exe). Diese ist dazu da die Änderungen in einem Folder zu überwachen (Event bei einer Änderung).

Der problematische Code:
Delphi-Quellcode:
if not ReadDirectoryChanges(FDirectoryHandle, @FNotificationBuffer, SizeOf(FNotificationBuffer), FWatchSubTree, FNotifyFilter, @FBytesWritten, @FOverlapped, nil) then
  begin
    CloseHandle(FDirectoryHandle);
    FDirectoryHandle := 0;
    CloseHandle(FCompletionPort);
    FCompletionPort := 0;
    raise EDirMonError.Create(SysErrorMessage(GetLastError));
    exit;
  end;
Es gibt keinerlei Probleme mit einer normalen Installation von Windows XP, 7, 8.1 und 10 (alle getestet).

Ist eines dieser Betriebssysteme in einer VMWare VM ändert sich die Sache. Überwacht man ein lokales (d.h. VM-Eigenes) Verzeichnis gibt es keine Probleme. Versucht man jedoch die Überwachung auf einen Shared-Folder (also eines auf dem Host von der VM aus, z.B: z:\c\daten) zu legen gibt es eine Exception und zwar:

WindowsXP x86: keine Exception
Windows 7 x64: Exception: incorrect function
Windows 8.1 x64: Exception: incorrect function
Windows 10 x64: Exception: incorrect function

Wie gesagt, das Problem existiert nur wenn man die Funktion auf einen VMWare Shared Folder aufruft.

Ich wäre für Tips dankbar!
Angehängte Dateien
Dateityp: zip DirMon.zip (339,9 KB, 13x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: ReadDirectoryChanges() API funktioniert nicht mit VMWare Shared Folders

  Alt 30. Mär 2015, 22:13
Das kann an vielen Dingen hängen.

Diese Funktionalität muß vom Dateisystemtreiber, bzw. vom Protocoltreiber und von der Gegenstelle (bei Netzwerken/Protokollen) unterstützt werden, bzw. die Funktionaliät kommt von Denen.


Vermutung: Bug in den Treibern des virtuellen Netzwerkadapters und oder im OS (Host oder Virtuell)

Hast du es denn auch schonmal über Netzwerkfreigaben auf reeller Hardware probiert?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Shark99

Registriert seit: 16. Mai 2007
403 Beiträge
 
#3

AW: ReadDirectoryChanges() API funktioniert nicht mit VMWare Shared Folders

  Alt 30. Mär 2015, 22:26
Ja, Netzwerkfreigaben mit gleichen Verzeichnis funktionieren problemlos. Meine Vermutung/Befürchtung war schon dass bei VMWare Shared Folders ReadDirectoryChanges() nur unter 32bit implementiert ist.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 06:49 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