Das ist auch nicht korrekt, weil PeekS() als Parameterangabe die Anzahl der Zeichen haben möchte, die ausgelesen werden sollen, buffer\FileNameLength enthält aber laut MSDN (FILE_NOTIFY_INFORMATION) die Länge des Dateinamens in Bytes.Bisonte hat geschrieben:Code: Alles auswählen
FileAction_File = PeekS(@buffer\Filename, buffer\FileNameLength, #PB_Unicode)
Deine Zeile sollte also so aussehen:
Code: Alles auswählen
FileAction_File = PeekS(@buffer\Filename, buffer\FileNameLength / 2, #PB_Unicode)
Der Grund, warum du den Fehler nicht reproduzieren kannst, liegt daran, weil bei deinem buffer\Filename glücklicherweise jedes Mal ein Null-Byte am Ende ist und PeekS() rechtzeitig mit dem Auslesen abbricht. Die Parameterangabe "Länge" bei PeekS() gibt ja nur die maximale Anzahl zu lesende Zeichen an, wenn aber schon vorher ein Null-Byte entdeckt wird, bricht PeekS() schon vorher mit dem Auslesen ab. Im buffer\Filename von oO0XX0Oo gibt es aktuell leider erst viel später ein Null-Byte, weshalb nach dem Dateiname auch noch weitere Zeichen aus dem Memory gelesen werden.