Reparse Point Filter Driver Question

Hi All,
I have question regarding how filter driver handle the resparse point. As I
know when filter driver is called to hadle the reparse point file. It will
replace the file path with the path get from reparse point data buffer and
do following:
Irp->IoStatus.Status = STATUS_REPARSE;
Irp->IoStatus.Information = IO_REPARSE;
IoCompleteRequest( Irp, IO_NO_INCREMENT );
return STATUS_REPARSE;
My question is after return STATUS_REPARSE back to
I/O manager, what will happen? Will I/O manager call
file system to recall that file back to original
location or filter driver need to recall that file
back? If filter driver needs to recall file back,
what is the need to return STATUS_REPARSE.
Actually I need to know what I/O manager, Object
Manager and file system are doing after return STATUS_REPARSE.
Thank you for the help in advance.

> Irp->IoStatus.Status = STATUS_REPARSE;

Irp->IoStatus.Information = IO_REPARSE;
IoCompleteRequest( Irp, IO_NO_INCREMENT );
return STATUS_REPARSE;
My question is after return STATUS_REPARSE back to
I/O manager, what will happen? Will I/O manager call
file system to recall that file back to original

It will destroy this file object, create another file object and reparse the
new path (specified by you) from the very beginning, from the device name,
which can be absolutely other then your FS volume.

This is nearly a full retry of IoCreateFile with the new name.

Yes, the value of PFILE_OBJECT does not survive the reparse (very sad).

Maxim Shatskih, Windows DDK MVP
StorageCraft Corporation
xxxxx@storagecraft.com
http://www.storagecraft.com

STATUS_REPARSE doesn’t cause a file is recalled (restored?). It redirect the
open to another file. In other words, I/O manager will generate another
IRP_MJ_CREATE for the reparsed path.

Shangwu

“fc” wrote in message news:xxxxx@ntfsd…
> Hi All,
> I have question regarding how filter driver handle the resparse point. As
> I know when filter driver is called to hadle the reparse point file. It
> will replace the file path with the path get from reparse point data
> buffer and do following:
> Irp->IoStatus.Status = STATUS_REPARSE;
> Irp->IoStatus.Information = IO_REPARSE;
> IoCompleteRequest( Irp, IO_NO_INCREMENT );
> return STATUS_REPARSE;
> My question is after return STATUS_REPARSE back to
> I/O manager, what will happen? Will I/O manager call
> file system to recall that file back to original
> location or filter driver need to recall that file
> back? If filter driver needs to recall file back,
> what is the need to return STATUS_REPARSE.
> Actually I need to know what I/O manager, Object
> Manager and file system are doing after return STATUS_REPARSE.
> Thank you for the help in advance.
>
>

Shangwu,
This is what I expect? Thank you for the message.

fc
“Shangwu” wrote in message news:xxxxx@ntfsd…
> STATUS_REPARSE doesn’t cause a file is recalled (restored?). It redirect
> the open to another file. In other words, I/O manager will generate
> another IRP_MJ_CREATE for the reparsed path.
>
> Shangwu
>
> “fc” wrote in message news:xxxxx@ntfsd…
>> Hi All,
>> I have question regarding how filter driver handle the resparse point. As
>> I know when filter driver is called to hadle the reparse point file. It
>> will replace the file path with the path get from reparse point data
>> buffer and do following:
>> Irp->IoStatus.Status = STATUS_REPARSE;
>> Irp->IoStatus.Information = IO_REPARSE;
>> IoCompleteRequest( Irp, IO_NO_INCREMENT );
>> return STATUS_REPARSE;
>> My question is after return STATUS_REPARSE back to
>> I/O manager, what will happen? Will I/O manager call
>> file system to recall that file back to original
>> location or filter driver need to recall that file
>> back? If filter driver needs to recall file back,
>> what is the need to return STATUS_REPARSE.
>> Actually I need to know what I/O manager, Object
>> Manager and file system are doing after return STATUS_REPARSE.
>> Thank you for the help in advance.
>>
>>
>
>
>

Thanks.
fc
“Maxim S. Shatskih” wrote in message
news:xxxxx@ntfsd…
>> Irp->IoStatus.Status = STATUS_REPARSE;
>> Irp->IoStatus.Information = IO_REPARSE;
>> IoCompleteRequest( Irp, IO_NO_INCREMENT );
>> return STATUS_REPARSE;
>> My question is after return STATUS_REPARSE back to
>> I/O manager, what will happen? Will I/O manager call
>> file system to recall that file back to original
>
> It will destroy this file object, create another file object and reparse
> the
> new path (specified by you) from the very beginning, from the device name,
> which can be absolutely other then your FS volume.
>
> This is nearly a full retry of IoCreateFile with the new name.
>
> Yes, the value of PFILE_OBJECT does not survive the reparse (very sad).
>
> Maxim Shatskih, Windows DDK MVP
> StorageCraft Corporation
> xxxxx@storagecraft.com
> http://www.storagecraft.com
>
>