Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi ReadDirectoryChanges() API funktioniert nicht mit VMWare Shared Folders (https://www.delphipraxis.net/184488-readdirectorychanges-api-funktioniert-nicht-mit-vmware-shared-folders.html)

Shark99 30. Mär 2015 20:45


ReadDirectoryChanges() API funktioniert nicht mit VMWare Shared Folders
 
Liste der Anhänge anzeigen (Anzahl: 1)
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!

himitsu 30. Mär 2015 21:13

AW: ReadDirectoryChanges() API funktioniert nicht mit VMWare Shared Folders
 
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?

Shark99 30. Mär 2015 21:26

AW: ReadDirectoryChanges() API funktioniert nicht mit VMWare Shared Folders
 
Ja, Netzwerkfreigaben mit gleichen Verzeichnis funktionieren problemlos. Meine Vermutung/Befürchtung war schon dass bei VMWare Shared Folders ReadDirectoryChanges() nur unter 32bit implementiert ist.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:30 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