mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 16:52:59 +00:00
[NTOSKRNL]
Implement the reparse points loop in IopParseDevice(). Reviewed by Thomas svn path=/trunk/; revision=67067
This commit is contained in:
parent
14ce9b898d
commit
e18a1e92bc
2 changed files with 679 additions and 665 deletions
|
@ -80,6 +80,11 @@
|
||||||
//
|
//
|
||||||
#define RD_SYMLINK_CREATE_FAILED 5
|
#define RD_SYMLINK_CREATE_FAILED 5
|
||||||
|
|
||||||
|
//
|
||||||
|
// Max traversal of reparse points for a single open in IoParseDevice
|
||||||
|
//
|
||||||
|
#define IOP_MAX_REPARSE_TRAVERSAL 0x20
|
||||||
|
|
||||||
//
|
//
|
||||||
// We can call the Ob Inlined API, it's the same thing
|
// We can call the Ob Inlined API, it's the same thing
|
||||||
//
|
//
|
||||||
|
|
|
@ -300,9 +300,12 @@ IopParseDevice(IN PVOID ParseObject,
|
||||||
BOOLEAN AccessGranted, LockHeld = FALSE;
|
BOOLEAN AccessGranted, LockHeld = FALSE;
|
||||||
PPRIVILEGE_SET Privileges = NULL;
|
PPRIVILEGE_SET Privileges = NULL;
|
||||||
UNICODE_STRING FileString;
|
UNICODE_STRING FileString;
|
||||||
|
USHORT Attempt;
|
||||||
IOTRACE(IO_FILE_DEBUG, "ParseObject: %p. RemainingName: %wZ\n",
|
IOTRACE(IO_FILE_DEBUG, "ParseObject: %p. RemainingName: %wZ\n",
|
||||||
ParseObject, RemainingName);
|
ParseObject, RemainingName);
|
||||||
|
|
||||||
|
for (Attempt = 0; Attempt < IOP_MAX_REPARSE_TRAVERSAL; ++Attempt)
|
||||||
|
{
|
||||||
/* Assume failure */
|
/* Assume failure */
|
||||||
*Object = NULL;
|
*Object = NULL;
|
||||||
|
|
||||||
|
@ -1042,10 +1045,16 @@ IopParseDevice(IN PVOID ParseObject,
|
||||||
return STATUS_REPARSE;
|
return STATUS_REPARSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* FIXME: At that point, we should loop again and reattempt an opening */
|
/* Loop again and reattempt an opening */
|
||||||
ASSERT(FALSE);
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Attempt == IOP_MAX_REPARSE_TRAVERSAL)
|
||||||
|
return STATUS_UNSUCCESSFUL;
|
||||||
|
|
||||||
/* Get the owner of the File Object */
|
/* Get the owner of the File Object */
|
||||||
OwnerDevice = IoGetRelatedDeviceObject(FileObject);
|
OwnerDevice = IoGetRelatedDeviceObject(FileObject);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue