It's oh so much fun trying to sort out the proper terminology to make sure
that I'm using "current best practices & procedures" for developing a filter
driver.
The current IFS docs in the 6000 build of the WDK has a section on File
System Filger Driver Classes & Class GUIDs, where the "FSFilter Security
Enhancer" class is discussed. This appears to be the class that I would
need to assign to my filter driver as its intended purpose is to enhance the
security of NTFS beyond the simple use of DACLs & ACEs.
The book, "Microsoft Windows Internals", 4th edition, discusses on page 706
the "Filesystem Filter Manager", and the advent of support for minifilters
on WinXP SP2 & Win2K3 & newer. That section also refers to file system
filter drivers as "legacy", which I take to mean the ones that are discussed
in the IFS that otherwise lack the moniker "legacy" in front of their names.
In the IFS sections on minifilters, there's no discussion of driver
classes, but there is mention of "altitude" being a value, assigned by
Microsoft, that controls what order minifilters are stacked on top of each
other.
Given the information above, I'm trying to determine which type of filter
driver is more appropriate. It appears that minifilters are, beyond a
doubt, using a newer driver development paradigm/framework/methodology, but
I'm not sure if a minifilter will allow me to implement what I need to
implement.
In a nutshell, I either need to fudge the results of IRP_MJ_QUERY_SECURITY &
IRP_MJ_SET_SECURITY and alter the contents of a DACL, or else I need to be
able to override a failed access-check that's based solely on the DACL and
force it to succeed based on additional security criteria that my filter is
aware of. Altering the contents of the DACL as it is read to insert
additional ACEs in it is one method, with a corresponding part that removes
those additional ACEs from the DACL when it is written back with the "set
security" operation. The other possiblity is to take a failed IRP_MJ_CREATE
[or similar request that results in opening a file for read/write or rename
or delete operations] and either do some impersonation or make an underlying
driver call to force the operation to succeed and return a valid file handle
to the user-mode process that initiated the operation to begin with.
Which type of filter driver is more appropriate? A minifilter or [legacy]
file system filter driver?
TIA,