https://git.reactos.org/?p=reactos.git;a=commitdiff;h=2511ba8f8f4c26fc8043a…
commit 2511ba8f8f4c26fc8043af37102a3a664ebffe7d
Author: Pierre Schweitzer <pierre(a)reactos.org>
AuthorDate: Wed Nov 1 11:45:43 2017 +0100
[RDBSS] Start defining the RxCapture* macros and start using them (to be continued)
---
sdk/include/ddk/ntrxdef.h | 16 +++++++++
sdk/lib/drivers/rdbsslib/rdbss.c | 78 +++++++++++++++++++---------------------
2 files changed, 53 insertions(+), 41 deletions(-)
diff --git a/sdk/include/ddk/ntrxdef.h b/sdk/include/ddk/ntrxdef.h
index da3a9ac75f..996e3ee29c 100644
--- a/sdk/include/ddk/ntrxdef.h
+++ b/sdk/include/ddk/ntrxdef.h
@@ -6,6 +6,22 @@
#define INVALID_HANDLE_VALUE ((HANDLE)-1)
#endif
+#ifndef MINIRDR__NAME
+#define RxCaptureFcb PFCB __C_Fcb = (PFCB)(RxContext->pFcb)
+#define RxCaptureFobx PFOBX __C_Fobx = (PFOBX)(RxContext->pFobx)
+#else
+#define RxCaptureFcb PMRX_FCB __C_Fcb = (RxContext->pFcb)
+#define RxCaptureFobx PMRX_FOBX __C_Fobx = (RxContext->pFobx)
+#endif
+
+#define RxCaptureParamBlock PIO_STACK_LOCATION __C_IrpSp = RxContext->CurrentIrpSp
+#define RxCaptureFileObject PFILE_OBJECT __C_FileObject = __C_IrpSp-> FileObject
+
+#define capFcb __C_Fcb
+#define capFobx __C_Fobx
+#define capPARAMS __C_IrpSp
+#define capFileObject __C_FileObject
+
#define RxAllocatePoolWithTag ExAllocatePoolWithTag
#define RxFreePool ExFreePool
diff --git a/sdk/lib/drivers/rdbsslib/rdbss.c b/sdk/lib/drivers/rdbsslib/rdbss.c
index d25171ce64..01b1bd9a7a 100644
--- a/sdk/lib/drivers/rdbsslib/rdbss.c
+++ b/sdk/lib/drivers/rdbsslib/rdbss.c
@@ -643,6 +643,8 @@ VOID
CheckForLoudOperations(
PRX_CONTEXT RxContext)
{
+ RxCaptureFcb;
+
PAGED_CODE();
#define ALLSCR_LENGTH (sizeof(L"all.scr") - sizeof(UNICODE_NULL))
@@ -650,11 +652,9 @@ CheckForLoudOperations(
/* Are loud operations enabled? */
if (RxLoudLowIoOpsEnabled)
{
- PFCB Fcb;
-
/* If so, the operation will be loud only if filename ends with all.scr */
- Fcb = (PFCB)RxContext->pFcb;
- if (RtlCompareMemory(Add2Ptr(Fcb->PrivateAlreadyPrefixedName.Buffer,
(Fcb->PrivateAlreadyPrefixedName.Length - ALLSCR_LENGTH)),
+ if (RtlCompareMemory(Add2Ptr(capFcb->PrivateAlreadyPrefixedName.Buffer,
+ (capFcb->PrivateAlreadyPrefixedName.Length -
ALLSCR_LENGTH)),
L"all.scr", ALLSCR_LENGTH) == ALLSCR_LENGTH)
{
SetFlag(RxContext->LowIoContext.Flags, LOWIO_CONTEXT_FLAG_LOUDOPS);
@@ -701,14 +701,12 @@ __RxWriteReleaseResources(
PCSTR FileName,
ULONG SerialNumber)
{
- PFCB Fcb;
+ RxCaptureFcb;
PAGED_CODE();
ASSERT(RxContext != NULL);
-
- Fcb = (PFCB)RxContext->pFcb;
- ASSERT(Fcb != NULL);
+ ASSERT(capFcb != NULL);
/* If FCB resource was acquired, release it */
if (RxContext->FcbResourceAcquired)
@@ -716,11 +714,11 @@ __RxWriteReleaseResources(
/* Taking care of owner */
if (ResourceOwnerSet)
{
- RxReleaseFcbForThread(RxContext, Fcb,
RxContext->LowIoContext.ResourceThreadId);
+ RxReleaseFcbForThread(RxContext, capFcb,
RxContext->LowIoContext.ResourceThreadId);
}
else
{
- RxReleaseFcb(RxContext, Fcb);
+ RxReleaseFcb(RxContext, capFcb);
}
RxContext->FcbResourceAcquired = FALSE;
@@ -732,11 +730,11 @@ __RxWriteReleaseResources(
/* Taking care of owner */
if (ResourceOwnerSet)
{
- RxReleasePagingIoResourceForThread(RxContext, Fcb,
RxContext->LowIoContext.ResourceThreadId);
+ RxReleasePagingIoResourceForThread(RxContext, capFcb,
RxContext->LowIoContext.ResourceThreadId);
}
else
{
- RxReleasePagingIoResource(RxContext, Fcb);
+ RxReleasePagingIoResource(RxContext, capFcb);
}
/* No need to release boolean here, RxReleasePagingIoResource() takes care of it
*/
@@ -774,14 +772,13 @@ RxAddToWorkque(
ULONG Queued;
KIRQL OldIrql;
WORK_QUEUE_TYPE Queue;
- PIO_STACK_LOCATION Stack;
+ RxCaptureParamBlock;
- Stack = RxContext->CurrentIrpSp;
RxContext->PostRequest = FALSE;
/* First of all, select the appropriate queue - delayed for prefix claim, critical
for the rest */
if (RxContext->MajorFunction == IRP_MJ_DEVICE_CONTROL &&
- Stack->Parameters.DeviceIoControl.IoControlCode == IOCTL_REDIR_QUERY_PATH)
+ capPARAMS->Parameters.DeviceIoControl.IoControlCode ==
IOCTL_REDIR_QUERY_PATH)
{
Queue = DelayedWorkQueue;
SetFlag(RxContext->Flags, RX_CONTEXT_FLAG_FSP_DELAYED_OVERFLOW_QUEUE);
@@ -793,7 +790,7 @@ RxAddToWorkque(
}
/* Check for overflow */
- if (Stack->FileObject != NULL)
+ if (capPARAMS->FileObject != NULL)
{
KeAcquireSpinLock(&RxFileSystemDeviceObject->OverflowQueueSpinLock,
&OldIrql);
@@ -821,22 +818,23 @@ RxAddToWorkque(
*/
VOID
RxAdjustFileTimesAndSize(
- PRX_CONTEXT Context)
+ PRX_CONTEXT RxContext)
{
- PFCB Fcb;
- PFOBX Fobx;
NTSTATUS Status;
- PFILE_OBJECT FileObject;
LARGE_INTEGER CurrentTime;
FILE_BASIC_INFORMATION FileBasicInfo;
FILE_END_OF_FILE_INFORMATION FileEOFInfo;
BOOLEAN FileModified, SetLastChange, SetLastAccess, SetLastWrite, NeedUpdate;
+ RxCaptureFcb;
+ RxCaptureFobx;
+ RxCaptureParamBlock;
+ RxCaptureFileObject;
+
PAGED_CODE();
- FileObject = Context->CurrentIrpSp->FileObject;
/* If Cc isn't initialized, the file was not read nor written, nothing to do */
- if (FileObject->PrivateCacheMap == NULL)
+ if (capFileObject->PrivateCacheMap == NULL)
{
return;
}
@@ -844,17 +842,16 @@ RxAdjustFileTimesAndSize(
/* Get now */
KeQuerySystemTime(&CurrentTime);
- Fobx = (PFOBX)Context->pFobx;
/* Was the file modified? */
- FileModified = BooleanFlagOn(FileObject->Flags, FO_FILE_MODIFIED);
+ FileModified = BooleanFlagOn(capFileObject->Flags, FO_FILE_MODIFIED);
/* We'll set last write if it was modified and user didn't update yet */
- SetLastWrite = FileModified && !BooleanFlagOn(Fobx->Flags,
FOBX_FLAG_USER_SET_LAST_WRITE);
+ SetLastWrite = FileModified && !BooleanFlagOn(capFobx->Flags,
FOBX_FLAG_USER_SET_LAST_WRITE);
/* File was accessed if: written or read (fastio), we'll update last access if
user didn't */
SetLastAccess = SetLastWrite ||
- (BooleanFlagOn(FileObject->Flags, FO_FILE_FAST_IO_READ)
&&
- !BooleanFlagOn(Fobx->Flags, FOBX_FLAG_USER_SET_LAST_ACCESS));
+ (BooleanFlagOn(capFileObject->Flags, FO_FILE_FAST_IO_READ)
&&
+ !BooleanFlagOn(capFobx->Flags, FOBX_FLAG_USER_SET_LAST_ACCESS));
/* We'll set last change if it was modified and user didn't update yet */
- SetLastChange = FileModified && !BooleanFlagOn(Fobx->Flags,
FOBX_FLAG_USER_SET_LAST_CHANGE);
+ SetLastChange = FileModified && !BooleanFlagOn(capFobx->Flags,
FOBX_FLAG_USER_SET_LAST_CHANGE);
/* Nothing to update? Job done */
if (!FileModified && !SetLastWrite && !SetLastAccess &&
!SetLastChange)
@@ -862,7 +859,6 @@ RxAdjustFileTimesAndSize(
return;
}
- Fcb = (PFCB)Context->pFcb;
/* By default, we won't issue any MRxSetFileInfoAtCleanup call */
NeedUpdate = FALSE;
RtlZeroMemory(&FileBasicInfo, sizeof(FileBasicInfo));
@@ -871,7 +867,7 @@ RxAdjustFileTimesAndSize(
if (SetLastWrite)
{
NeedUpdate = TRUE;
- Fcb->LastWriteTime.QuadPart = CurrentTime.QuadPart;
+ capFcb->LastWriteTime.QuadPart = CurrentTime.QuadPart;
FileBasicInfo.LastWriteTime.QuadPart = CurrentTime.QuadPart;
}
@@ -879,7 +875,7 @@ RxAdjustFileTimesAndSize(
if (SetLastAccess)
{
NeedUpdate = TRUE;
- Fcb->LastAccessTime.QuadPart = CurrentTime.QuadPart;
+ capFcb->LastAccessTime.QuadPart = CurrentTime.QuadPart;
FileBasicInfo.LastAccessTime.QuadPart = CurrentTime.QuadPart;
}
@@ -887,31 +883,31 @@ RxAdjustFileTimesAndSize(
if (SetLastChange)
{
NeedUpdate = TRUE;
- Fcb->LastChangeTime.QuadPart = CurrentTime.QuadPart;
+ capFcb->LastChangeTime.QuadPart = CurrentTime.QuadPart;
FileBasicInfo.ChangeTime.QuadPart = CurrentTime.QuadPart;
}
/* If one of the date was modified, issue a call to mini-rdr */
if (NeedUpdate)
{
- Context->Info.FileInformationClass = FileBasicInformation;
- Context->Info.Buffer = &FileBasicInfo;
- Context->Info.Length = sizeof(FileBasicInfo);
+ RxContext->Info.FileInformationClass = FileBasicInformation;
+ RxContext->Info.Buffer = &FileBasicInfo;
+ RxContext->Info.Length = sizeof(FileBasicInfo);
- MINIRDR_CALL(Status, Context, Fcb->MRxDispatch, MRxSetFileInfoAtCleanup,
(Context));
+ MINIRDR_CALL(Status, RxContext, capFcb->MRxDispatch, MRxSetFileInfoAtCleanup,
(RxContext));
(void)Status;
}
/* If the file was modified, update its EOF */
if (FileModified)
{
- FileEOFInfo.EndOfFile.QuadPart = Fcb->Header.FileSize.QuadPart;
+ FileEOFInfo.EndOfFile.QuadPart = capFcb->Header.FileSize.QuadPart;
- Context->Info.FileInformationClass = FileEndOfFileInformation;
- Context->Info.Buffer = &FileEOFInfo;
- Context->Info.Length = sizeof(FileEOFInfo);
+ RxContext->Info.FileInformationClass = FileEndOfFileInformation;
+ RxContext->Info.Buffer = &FileEOFInfo;
+ RxContext->Info.Length = sizeof(FileEOFInfo);
- MINIRDR_CALL(Status, Context, Fcb->MRxDispatch, MRxSetFileInfoAtCleanup,
(Context));
+ MINIRDR_CALL(Status, RxContext, capFcb->MRxDispatch, MRxSetFileInfoAtCleanup,
(RxContext));
(void)Status;
}
}