Reparse Rules
Reparse rules are a type of special filter rule supported by the CBFilter class. Reparse rules are used to redirect file and/or directory access to another location based on two file masks: a source mask used for matching (in the same way as described for standard filter rules); and a destination mask to specify the location to redirect to.
For each wildcard (* or ?) present in the source mask, there must be a corresponding wildcard (of the same type) in the destination mask; and the wildcards in the destination mask must appear in the same order as they do in the source mask. For example, if the source mask is 20??_Budget.*, then 20??_Budget_Report.* would be a legal destination mask; but 20??_Budget_Report.xls would not be, nor would 20*_Budget_Report.*.
To use reparse rules effectively, it is important to understand two things about how they behave:
- Reparse rules have priority over all other types of rules. So if a file or directory matches a reparse rule, then it will always be redirected, even if it matches other types of rules as well.
- The rule matching procedure "restarts" every time a redirection occurs. So if the newly-redirected file or directory matches another reparse rule, then it is redirected again (and the matching procedure restarts again); otherwise, the matching procedure proceeds to consider other types of rules, as usual.
The second behavior is especially notable because it means that multiple reparse rules can "chain" together and be applied in succession. This is a powerful feature, but it must be used carefully; if a cycle of reparse rules is allowed to form, triggering it will send the system driver into an infinite loop, causing a system-wide deadlock.
The CBFilter class provides the following methods for managing reparse rules:
- AddReparseRule
- DeleteReparseRule
- DeleteAllReparseRules
- CreateReparseRulesSnapshot
- CloseReparseRulesSnapshot
- GetReparseRuleByMask
Reparse rules are managed by the class's system driver rather than by the class itself. As a result, they will remain active until they are explicitly removed or the system reboots (whichever occurs first), regardless of whether the application that originally added them remains open.
Applications that require more advanced redirection logic can add a standard filter rule that includes the FS_CE_REPARSE_FILENAME control event flag, then use the ReparseFileName event to implement it. Note that neither this event, nor the ReparseWithTag event, are directly related to reparse rules themselves.