Einzelnen Beitrag anzeigen

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, 14x aufgerufen)
  Mit Zitat antworten Zitat