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:
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.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.