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!