The Base class is completley fine. The only thing I would change is to remove things that can already be done with the .NET framework and keep the focus directly on the Change Journal. The class should be robust and never do to much work as to slow down the main thread for this purpose it's probrably best that we just use full blow asynchronous calls with DeviceIoControl(). However some methods could still be used Synchronously such as (Creating,Querying) the journal. Implement the Reading of the journal asynchronously by opening the volume handle with FILE_FLAG_OVERLAPPED. This could avoid the "polling" technique all together. The idea is that it should be "lightweight" and never use more than one thread and a couple of thread pool threads.
One thing I have done in the past as a personal project was to allow the ability to create profiles. These profiles are just basic XML files that a user could customize to return some statistic information.
I have had a couple things in mind that might be easier to deal with for both the developer and users.
Instead of allowing the users to directly use the class to manipulate the journal we could take a different approach and create a service. Here is the basic idea behind this concept.
1) Create one class that is private internally to handle the journal. Using that class inside the service to manage every change on volume(s) and storing this information in a local database.
2) Create a class that the user can use to simply read from the database. This gives the ability for the user easily use (database) routines to read the changes. This is what should be exposed to the user. It would also make it easier to implement types of custom profiles of files / folders of interest by a simple query.
The idea here is that if it's implemented as a service that a user can install then just use the basic class to read from the database might be the best approach. This also makes it easier for both the developer and user. The reason is because once the service is completed and fully functional the user class should be the only class that need to be updated to add more functionality.
The fact that the journal needs administrative rights I think this might be the best approach to the design. Take some time to think about it and im sure you understand it might make sense in the long run.
CodePlex: Description could read.
JournalMagic is a service that runs on your computer to make it easier to manage the Change journal and MFT records on all NTFS filesystems.
Also we don't need to use CodePlex.com there is plenty of Free services or small fee web service providers that we could publish the application.
Let me know if you like this approach or if you want to keep it just a basic class.
BTW: contact me directly via (I don't bite) if you want faster responses it's easier than checking this forum. :)
-ErikLitze