mirror of
https://github.com/reactos/reactos.git
synced 2025-08-04 22:55:41 +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
|
||||
|
||||
//
|
||||
// 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
|
||||
//
|
||||
|
|
|
@ -300,9 +300,12 @@ IopParseDevice(IN PVOID ParseObject,
|
|||
BOOLEAN AccessGranted, LockHeld = FALSE;
|
||||
PPRIVILEGE_SET Privileges = NULL;
|
||||
UNICODE_STRING FileString;
|
||||
USHORT Attempt;
|
||||
IOTRACE(IO_FILE_DEBUG, "ParseObject: %p. RemainingName: %wZ\n",
|
||||
ParseObject, RemainingName);
|
||||
|
||||
for (Attempt = 0; Attempt < IOP_MAX_REPARSE_TRAVERSAL; ++Attempt)
|
||||
{
|
||||
/* Assume failure */
|
||||
*Object = NULL;
|
||||
|
||||
|
@ -1042,10 +1045,16 @@ IopParseDevice(IN PVOID ParseObject,
|
|||
return STATUS_REPARSE;
|
||||
}
|
||||
|
||||
/* FIXME: At that point, we should loop again and reattempt an opening */
|
||||
ASSERT(FALSE);
|
||||
/* Loop again and reattempt an opening */
|
||||
continue;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
if (Attempt == IOP_MAX_REPARSE_TRAVERSAL)
|
||||
return STATUS_UNSUCCESSFUL;
|
||||
|
||||
/* Get the owner of the File Object */
|
||||
OwnerDevice = IoGetRelatedDeviceObject(FileObject);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue