Wie mitbekommen das eine datei geöffnet wurde?
-
Ich sehe aber bei deinen " IO-Completion-Ports" keine Möglichkeit das bloße Öffnen einer Datei mitzubekommen...
Von OpenFile steht da nix...
-
Completion Ports hatte ich auch kurz im Blick, kenne mich mit dieser Thematik allerdings nicht aus und bin damals nach kurzem Überfliegen zum Schluß gekommen, dass das hier nicht hilft. Denn die MSDN sagt zu dem File Handle, welches CreateIoCompletionPort übergeben werden soll:
An open file handle or INVALID_HANDLE_VALUE.
Demnach würde also auch hier nicht geprüft werden können, ob eine Datei geöffnet wird, da sie ja geöffnet werden muss, um überhaupt ein "open file handle" zu bekommen.
Falls dem nicht so ist, bitte ich um gern gesehene Korrektur!
EDIT: Mechanics und DarkShadow waren schneller ..
-
trolololo schrieb:
Hab zwar praktisch keine Ahnung von der Windows-API, bin mir aber ziemlich sicher
Fängt ja schonmal gut an...
Und in der Tat (...blaaaaaah...)
[1] http://msdn.microsoft.com/en-us/library/windows/desktop/aa365198(v=vs.85).aspx
IO Completion Ports haben mit dem was
du machen willstNash26 machen will so richtig gar nichts zu tun.
-
Moin,
ich habe den Procmon mal in IDA geworfen und vielleicht geht das ja in die richtige Richtung?
[url]
http://pl.vc/5b89e
[/url][url]
http://msdn.microsoft.com/en-us/library/windows/hardware/ff549772(v=vs.85).aspx
[/url]
-
hustbaer schrieb:
IO Completion Ports haben mit dem was
du machen willstNash26 machen will so richtig gar nichts zu tun.Na, so kanns ja nun auch nicht sein. Eine unter Windows mithilfe von IO-Completion-Ports umgesetzte Implementierung eines FS-Notification-Systems mit grob inotify-ähnlicher API findest du u.a. hier (in Go):
http://code.google.com/p/go/source/browse/fsnotify/fsnotify_windows.go?repo=exp
Die Methoden AddWatch und readEvents sind wohl am relevantesten, ist aber sowieso nicht allzu viel Code.
Auch wenn ich jetzt ein wenig mehr über die Windows-IO-Completion-Ports lese, wirkt es vom Featureset immer noch in etwa vergleichbar zum BSD kqueue. Nur weil man damit auch massenweise andere Sachen machen kann (wie mit kqueue ja auch), heißt es ja noch lange nicht, dass es nicht zur Implementierung eines Filesystem-Notification-Systems taugt.
-
trolololo schrieb:
Die Methoden AddWatch und readEvents sind wohl am relevantesten, ist aber sowieso nicht allzu viel Code.
Gemeint ist hier die package-interne Methode "addWatch" (mit kleinem a) und nicht die an API-Nutzer exportierte AddWatch.
-
trolololo schrieb:
hustbaer schrieb:
IO Completion Ports haben mit dem was
du machen willstNash26 machen will so richtig gar nichts zu tun.Na, so kanns ja nun auch nicht sein.
doch
trolololo schrieb:
Eine unter Windows mithilfe von IO-Completion-Ports umgesetzte Implementierung eines FS-Notification-Systems mit grob inotify-ähnlicher API findest du u.a. hier (in Go):
http://code.google.com/p/go/source/browse/fsnotify/fsnotify_windows.go?repo=exp
Diese Implementierung basiert auf ReadDirectoryChangesW(); I/O Completion Ports werden dort auch benutzt, nur eben für etwas völlig anderes, nämlich das Eventhandling...
Und es gibt afaik keinen sinnvollen und reliablen Weg, über ReadDirectoryChangesW() festzustellen, wann irgendwo irgendein Programm irgendwie irgendeine Datei öffnet...
-
dot schrieb:
I/O Completion Ports werden dort auch benutzt, nur eben für etwas völlig anderes, nämlich das Eventhandling...
Ja, selbstverständlich. Das ist ja auch das eigentlich interessante bei FS-Notifications. Kann der Kernel mich über eine ablaufende Dateisysteoperation durch Auslösen eines Events (z.B. Filedeskriptor/-Handle wird 'ready') in Kenntnis setzen?
Und es gibt afaik keinen sinnvollen und reliablen Weg, über ReadDirectoryChangesW() festzustellen, wann irgendwo irgendein Programm irgendwie irgendeine Datei öffnet...
Ja, schade, Events für Open zu bekommen scheint mit dem Ansatz in der Windowsversion des genannten fsnotify-Packages tatsächlich nicht möglich zu sein. Ich hatte anfangs nicht realisiert, dass die Auswahl verfügbarer Events gegenüber den Unixvarianten.so stark eingeschränkt ist. Daher sorry fürs Führen in die Sackgasse.
-
@trolololo
Deine Behauptung dass man mit IO Completion Ports Files überwachen kann ist ca. so sinnvoll wie wenn ich behaupte dass man mitprintf
nen Sinus berechnen kann.
-
hustbaer schrieb:
@trolololo
Deine Behauptung dass man mit IO Completion Ports Files überwachen kann ist ca. so sinnvoll wie wenn ich behaupte dass man mitprintf
nen Sinus berechnen kann.owned hard!