Hello!
I am writing a minifilter that will perform hierarchical storage management.
All files under its control should have reparse points set.
When an userspace application tries to open a file (with a reparse point)
the ntfs does not allow to open it and it returns STATUS_REPARSE. It is an
expected behavior.
I am detecting my reparse tag open in post-create callback routine. I would
like to handle this situation in a way to allow such file to be opened.
So I set the FILE_OPEN_REPARSE_POINT flag in my post-create callback
routine:
data->Iopb->Parameters.Create.Options |= FILE_OPEN_REPARSE_POINT;
Then I call FltSetCallbackDataDirty() according to the IFS toolkit help.
Then I change return status to:
data->IoStatus.Status = STATUS_REPARSE;
data->IoStatus.Information = IO_REPARSE;
and return from post-create callback.
What I see next is that IO manager opened the file again but the flag
FILE_OPEN_REPARSE_POINT that I set in post-create routine is not set
(cleared) in the new open.
This leads to recursive file opening loop with my minifilter.
What is wrong in my approach?
Regards,
Urban