ReadDirectoryChangesW --> ERROR_NOACCESS

Antworten
doctor-x
Beiträge: 3
Registriert: Fr 14. Mär 2008, 22:43

ReadDirectoryChangesW --> ERROR_NOACCESS

Beitrag von doctor-x »

Hallo,

das ist hier jetzt mein erster Beitrag, also bitte nicht schlagen falls meine frage einfach nur dämlich ist^^
Ich weiß einfach nicht mehr weiter...

Mein Problem:
Ich habe eine Komponente die ich im Netz gefunden habe (TDirMonitor), die für Delphi war auf Lazarus geportet. Unter der x64 Version von Lazarus lief sie auch, aber nun unter der x86 leider nicht mehr.
Ich bekomme immer false zurück geliefert und GetLastError zeigt mir die 998 (ERROR_NOACCESS). Laut http://msdn.microsoft.com/en-us/library ... 85%29.aspx" onclick="window.open(this.href);return false; liegt das wohl an der falschen Puffergröße ("ReadDirectoryChangesW fails with ERROR_NOACCESS when the buffer is not aligned on a DWORD boundary."). Ich habe es mit verschiedenen Größen ausprobiert, erhalte aber immer die gleiche Fehlermeldung. Habe es auch schon mit Admin rechten versucht, leider auch ohne Erfolg. Momentan ist der Puffer auf 1024 Byte eingestellt. Da der Quelltext mir etwas zu lang ist um ihn hier zu Posten habe ich das Projekt mal angehängt. Hat jemand eine Idee woran dies liegen könnte? Ich danke euch schlauen Köpfen schon mal im voraus! :)

System:
Win7 x64
Lazarus 0.9.30.4 32bit
Dateianhänge
LazDirMon.rar
(7.26 KiB) 105-mal heruntergeladen
Zuletzt geändert von doctor-x am Fr 7. Dez 2012, 19:18, insgesamt 1-mal geändert.

doctor-x
Beiträge: 3
Registriert: Fr 14. Mär 2008, 22:43

Re: ReadDirectoryChangesW --> ERROR_NOACCESS

Beitrag von doctor-x »

So, nachdem hier keiner eine Idee hatte hab ich den Fehler trotzdem gefunden....
manchmal kann ich ja so was von große Tomaten auf den Augen haben^^
Ich habe vergessen stdcall; in der Funktionsdefinition vergessen.
Nur eigenartig das es mal funktioniert hat... naja. jetzt geht es jedenfalls.

Konrad
Beiträge: 4
Registriert: Do 18. Mär 2010, 15:51

Re: ReadDirectoryChangesW --> ERROR_NOACCESS

Beitrag von Konrad »

Hallo,

wo muss stdcall definiert sein? Ich bekomme den Fehler nicht weg.

Viele Grüße
Konrad

doctor-x
Beiträge: 3
Registriert: Fr 14. Mär 2008, 22:43

Re: ReadDirectoryChangesW --> ERROR_NOACCESS

Beitrag von doctor-x »

Habe im ersten beitrag mal die Zip-Datei aktualisiert.
Ich hoffe es funktioniert jetzt auch bei Ihnen :)
MfG

Konrad
Beiträge: 4
Registriert: Do 18. Mär 2010, 15:51

Re: ReadDirectoryChangesW --> ERROR_NOACCESS

Beitrag von Konrad »

Funktioniert perfekt!

Danke!

vazili_Zaitzef
Beiträge: 43
Registriert: Do 6. Dez 2012, 21:55
OS, Lazarus, FPC: Win7 64 (L 1.6 FPC 3.0.0)
CPU-Target: 64Bit

Re: ReadDirectoryChangesW --> ERROR_NOACCESS

Beitrag von vazili_Zaitzef »

Hallo,

ich habe da mal ein Problem.
Ich habe auch die DirMonitor Erweiterung im Internet gefunden. Diese ließ sich auch problemlos in Lazarus einbinden. Nun möchte ich die Erweiterung benutzen.
Diese kann ich in meine Form ziehen und auch alle Einstellungen ändern. (Objektinspektor)
Danach habe mir auch einen Button gebaut, mit dem ich die Funktion ausführen bzw. Stoppen kann.
In der Onchange Anweisung ist der Befehl Messagebox('Geht!') eingetragen.
Wenn ich jetzt mein Programm Starte und die Funktion einschalte über den Butten, sehe ich im Taskmanager, das diese Funktion meinen Arbeitsspeicher linear (45°) zumüllt und ein Kern meiner CPU auslastet wird.
Desweiteren kann ich in dem Ordner änder was ich möchte doch die Anwendung reagiert gar nicht darauf.
Anbei die LazDirMon, die ich verwende. Die hier im Beitrag war kann ich leider nicht richtig installieren. Es kommt eine Fehlermeldung, das Lazarus instabil wird und der Reiter für diese Funktion ist nicht vorhanden.

Hat jemand eine Idee, was ich falsch mache?
Beste Grüße
Vazili
Dateianhänge
LazDirMon.zip
(3.83 MiB) 87-mal heruntergeladen

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: ReadDirectoryChangesW --> ERROR_NOACCESS

Beitrag von theo »

Ich habe keine Ahnung von der Geschichte und auch kein Windows zur Hand.

vazili_Zaitzef hat geschrieben:Danach habe mir auch einen Button gebaut, mit dem ich die Funktion ausführen bzw. Stoppen kann.

Wo ist das in deiner Unit1?

Und wie kommst du denn darauf?

Code: Alles auswählen

 
procedure TForm1.Button1Click(Sender: TObject);
begin
      readdirectorychangesw();
end;

vazili_Zaitzef
Beiträge: 43
Registriert: Do 6. Dez 2012, 21:55
OS, Lazarus, FPC: Win7 64 (L 1.6 FPC 3.0.0)
CPU-Target: 64Bit

Re: ReadDirectoryChangesW --> ERROR_NOACCESS

Beitrag von vazili_Zaitzef »

Hallo,

diese Funktion benötige ich eigentlich nicht, da ich die Komponente benutze. (Die Komponente benutzt allerdings diese Funktion. Da es hier um diese Komponente geht, habe ich mich hier einfach mal dran gehängt.)
Um das Problem zu verdeutlichen, ist im Anhang eine Datei mit einem Bild von meinem Problem.
Der Quellcode ist auch zu sehen. Der Quelltext ist allerdings nur ein "Zweizeiler und wird später aufgebohrt."
Dateianhänge
Bild zu meinem Problem.
Bild zu meinem Problem.

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: ReadDirectoryChangesW --> ERROR_NOACCESS

Beitrag von theo »

Warum ist das auskommentiert?

Code: Alles auswählen

  //  GetQueuedCompletionStatus( parent.FCompletionPort, numBytes, state, parent.FPOverlapped, INFINITE);

vazili_Zaitzef
Beiträge: 43
Registriert: Do 6. Dez 2012, 21:55
OS, Lazarus, FPC: Win7 64 (L 1.6 FPC 3.0.0)
CPU-Target: 64Bit

Re: ReadDirectoryChangesW --> ERROR_NOACCESS

Beitrag von vazili_Zaitzef »

Die Komponente ist ja nicht von mir. Daher wußte ich das nicht.
Ich habe jetzt die Klammer entfernt und er erneut ausprobiert. Jetzt kommt ein Fehler der mir sagt :
"LongWord" expected "QWord"
...
ich finde aber nicht, wie ich das umwandeln könnte...

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: ReadDirectoryChangesW --> ERROR_NOACCESS

Beitrag von theo »

Für Win 32Bit funktioniert der Code oben in LazDirMon.rar.
Für Win 64Bit hängt es irgendwie.

EDIT: Ausserhalb des Debuggers geht es auch mit 64bit.

vazili_Zaitzef
Beiträge: 43
Registriert: Do 6. Dez 2012, 21:55
OS, Lazarus, FPC: Win7 64 (L 1.6 FPC 3.0.0)
CPU-Target: 64Bit

Re: ReadDirectoryChangesW --> ERROR_NOACCESS

Beitrag von vazili_Zaitzef »

Hallo und,

vielen vielen Dank Theo für Deine Hilfe!!!! :!:
In der Tat, mit der 32 Bit Version von Lazarus funktioniert diese Komponente echt gut. Solange man nur einen Hauptordner mit Unterordnern hat. Sobald es weiter verzweigt wird, klappt das mit der Abfrage leider nicht mehr. (Es werden keine Änderungen mehr erkannt)

Hast Du dafür zufällig auch noch eine Lösung? :D
Meine Programmierkenntnisse sind dafür noch zu begrenzt...

Beste Grüße

Update: Das war nur ein Problem wegen der neuinstallation. Heute funktioniert das perfekt!
Zuletzt geändert von vazili_Zaitzef am Do 1. Mai 2014, 10:34, insgesamt 1-mal geändert.

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: ReadDirectoryChangesW --> ERROR_NOACCESS

Beitrag von theo »

Wie gesagt, ich habe keine Ahnung von dieser Sache.
MSDN kannst du selber lesen: http://msdn.microsoft.com/en-us/library ... 85%29.aspx

vazili_Zaitzef
Beiträge: 43
Registriert: Do 6. Dez 2012, 21:55
OS, Lazarus, FPC: Win7 64 (L 1.6 FPC 3.0.0)
CPU-Target: 64Bit

Re: ReadDirectoryChangesW --> ERROR_NOACCESS

Beitrag von vazili_Zaitzef »

Wie eben schon erwählt, war das nur ein Fehler wegen der Neuinstallation. Heute funktioniert die Komponente perfekt.
Die MSDN habe ich mir auch durchgelesen doch davon verstehe ich nicht wirklich viel...
Dafür bin ich noch viel zu schlecht. :P

Antworten