0

I have external app reading files, I want to hook that to get event in my app. But I cannot find a sources hooking ReadFile (or something else that can help me achieve that). Any ideas how to do that? It must be done in User-Mode. I was thinking for something similar to Process Monitor. I wonder how it does it..

blez
  • 4,939
  • 5
  • 50
  • 82

1 Answers1

0

In .net you can use the FileSystemWatcher. You will need to add a handler for the Changed event which will detect a change in the last access time (amongst other things).

From the MSDN example linked above:

public static void Foo()
{
    // Create a new FileSystemWatcher and set its properties.
    FileSystemWatcher watcher = new FileSystemWatcher();
    watcher.Path = @"Your path";
    /* Watch for changes in LastAccess time */
    watcher.NotifyFilter = NotifyFilters.LastAccess;
    // Only watch text files.
    watcher.Filter = "*.txt";

    // Add event handlers.
    watcher.Changed += new FileSystemEventHandler(OnChanged);

    // Begin watching.
    watcher.EnableRaisingEvents = true;
}

private static void OnChanged(object source, FileSystemEventArgs e)
{
    // Specify what is done when a file is changed, created, or deleted.
   Console.WriteLine("File: " +  e.FullPath + " " + e.ChangeType);
}
Phil Gan
  • 2,813
  • 2
  • 29
  • 38
  • I already tried that, the app does not change the last access time. So it cannot be detected in that way. – blez Jun 03 '10 at 15:09
  • 1
    Maybe this answer to check if a file is open will help: http://stackoverflow.com/questions/2987559/check-if-the-file-is-open – Phil Gan Jun 07 '10 at 08:11
  • Opening the file does not change the last access time. – tofutim Feb 27 '13 at 20:30
  • Opening the file does not change the last access time - this is disabled in Vista onwards (though it can be re-enabled). http://www.groovypost.com/howto/microsoft/enable-last-access-time-stamp-to-files-folder-windows-7/ – tofutim Feb 27 '13 at 20:38