Author: pschweitzer
Date: Sun May 10 20:47:44 2015
New Revision: 67635
URL:
http://svn.reactos.org/svn/reactos?rev=67635&view=rev
Log:
[NTFS]
Add two more flags (mutually exclusive) for IRP context:
- _COMPLETE will cause the IRP to be completed at the end of the dispatch, with the
run-time priority boost set by caller
- _QUEUE will cause the IRP to be queued for delayed execution (not yet implemented)
This allows more flexibility for callers that can set the behavior thanks to the flags.
Default behavior is the previous one: by default the IRP is completed at the end of the
dispatch
That one should really come to FastFAT...
Modified:
trunk/reactos/drivers/filesystems/ntfs/dispatch.c
trunk/reactos/drivers/filesystems/ntfs/misc.c
trunk/reactos/drivers/filesystems/ntfs/ntfs.h
Modified: trunk/reactos/drivers/filesystems/ntfs/dispatch.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/filesystems/ntfs/d…
==============================================================================
--- trunk/reactos/drivers/filesystems/ntfs/dispatch.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/filesystems/ntfs/dispatch.c [iso-8859-1] Sun May 10 20:47:44
2015
@@ -85,8 +85,13 @@
else
Status = STATUS_INSUFFICIENT_RESOURCES;
+ ASSERT(((IrpContext->Flags & IRPCONTEXT_COMPLETE) &&
!(IrpContext->Flags & IRPCONTEXT_QUEUE)) ||
+ (!(IrpContext->Flags & IRPCONTEXT_COMPLETE) &&
(IrpContext->Flags & IRPCONTEXT_QUEUE)));
+
Irp->IoStatus.Status = Status;
- IoCompleteRequest(Irp, IrpContext->PriorityBoost);
+
+ if (IrpContext->Flags & IRPCONTEXT_COMPLETE)
+ IoCompleteRequest(Irp, IrpContext->PriorityBoost);
if (IrpContext)
ExFreePoolWithTag(IrpContext, 'PRIN');
Modified: trunk/reactos/drivers/filesystems/ntfs/misc.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/filesystems/ntfs/m…
==============================================================================
--- trunk/reactos/drivers/filesystems/ntfs/misc.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/filesystems/ntfs/misc.c [iso-8859-1] Sun May 10 20:47:44 2015
@@ -88,6 +88,7 @@
IrpContext->FileObject = IrpContext->Stack->FileObject;
IrpContext->IsTopLevel = (IoGetTopLevelIrp() == Irp);
IrpContext->PriorityBoost = IO_NO_INCREMENT;
+ IrpContext->Flags = IRPCONTEXT_COMPLETE;
if (IrpContext->MajorFunction == IRP_MJ_FILE_SYSTEM_CONTROL ||
IrpContext->MajorFunction == IRP_MJ_DEVICE_CONTROL ||
Modified: trunk/reactos/drivers/filesystems/ntfs/ntfs.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/filesystems/ntfs/n…
==============================================================================
--- trunk/reactos/drivers/filesystems/ntfs/ntfs.h [iso-8859-1] (original)
+++ trunk/reactos/drivers/filesystems/ntfs/ntfs.h [iso-8859-1] Sun May 10 20:47:44 2015
@@ -392,6 +392,8 @@
} REPARSE_POINT_ATTRIBUTE, *PREPARSE_POINT_ATTRIBUTE;
#define IRPCONTEXT_CANWAIT 0x1
+#define IRPCONTEXT_COMPLETE 0x2
+#define IRPCONTEXT_QUEUE 0x4
typedef struct
{