RE: STATUS_REPARSE for changing drive/paths on the fl-y

There is an error in previous mail.
set iosb->Status = IO_REPARSE
should be
set iosb->Information = IO_REPARSE

Unfortunately have you read my reply to this?
Here is:

The routine from which come IRP_MJ_CREATE to your drive is IopParseDevice.

Short code look like this:

NTSTATUS
IopParseDevice (
…,
IN OUT PUNICODE_STRING CompleteName,

)
{
NTSTATUS Status;
IO_STATUS_BLOCK Iosb;
…;

Remount:;
…;

Status = IoCallDriver(DeviceObject, Irp)
//IRP_MJ_CREATE
…;

if (Status == STATUS_REPARSE)
{
if (Iosb.Information == IO_REPARSE)
{
…;
RtlCopyUnicodeString(CompleteName,
&FileObject->FileName);
}

…;

if (Iosb.Information == IO_REPARSE)
{
return STATUS_REPARSE;
}

else
{
goto Remount;
}
}

…;
}

If your code returns STATUS_REPARSE:

  1. if Information is IO_REPARSE the I/O manager should copy the full path
    (from the Object Manager’s root) to the CompletePath and return
    STATUS_REPARSE
    to Object Manager. Object Manager then starts path parsing at the
    root.
    This should be useful eg. for MUP which replaces the full path by the
    registered
    redirector’s path.

  2. if Information is IO_REMOUNT the I/O Manager will undo its work and
    execution
    starts again from the begin of IopParseDevice.
    This case is useful when in the middle of processing create request
    there is a volume
    verify which does volume unmount. In this case the FSD requests the
    I/O
    Manager to
    reprocess this request to the newly mounted volume device object.