Moin Mackhack,
ich glaube ich habe den Fehler gefunden:
Ein SetLength steht an der falschen Stelle
Delphi-Quellcode:
// Falsch
if iLen = 0 then begin
FsResult := 'ERROR';
end else begin
FsResult := FsPath + '\' + FsResult;
SetLength(FsResult,iLen);
end;
// Richtig
if iLen = 0 then begin
FsResult := 'ERROR';
end else begin
SetLength(FsResult,iLen);
FsResult := FsPath + '\' + FsResult;
end;
So 'was Blödes
Ausserdem habe ich noch etwas gefunden:
Da der Dateiname in der Struktur FILE_NOTIFY_INFORMATION (wFilename) ja vom Typ WChar ist, kann die Längenangabe verkleinert werden:
Delphi-Quellcode:
FILE_NOTIFY_INFORMATION = packed record
dwNextEntryOffset : DWORD;
dwAction : DWORD;
dwFileNameLength : DWORD;
wFilename : array [1.._iFilenameLength shr 1] of WCHAR; // shr 1 ist neu
end;
[EDIT]
Korrgierte Demo hochgeladen
BUG: SetLength in der falschen Zeile
BUG: Länge von wFilename in FILE_NOTIFY_INFORMATION
[/EDIT]
[EDIT2]
Demo erneut korriert
BUG: Man sollte auch den Buffer für das Ergebnis (FNI) initialisieren
BUG: Länge von wFilename in FILE_NOTIFY_INFORMATION. Wenn ich durch 2 teilen will sollte ich wohl besser nicht shr 2 nehmen
[/EDIT2]