161 RxAssert(#exp, __FILE__, __LINE__, NULL); \
167#undef RxAllocatePoolWithTag
170#define RxAllocatePool(P, S) _RxAllocatePoolWithTag(P, S, 0)
171#define RxAllocatePoolWithTag _RxAllocatePoolWithTag
172#define RxFreePool _RxFreePool
173#define RxFreePoolWithTag _RxFreePoolWithTag
302 DPRINT(
"RxAddVirtualNetRootToNetRoot(%p, %p)\n", NetRoot, VNetRoot);
321 PVOID AlreadyAllocatedObject)
329 ULONG NonPagedSize, FobxSize, SrvOpenSize, FcbSize;
349 FobxSize =
sizeof(
FOBX);
364 FobxSize =
sizeof(
FOBX);
374 FcbSize =
sizeof(
FCB);
397 FobxSize =
sizeof(
FOBX);
406 if (AlreadyAllocatedObject !=
NULL)
408 Buffer = AlreadyAllocatedObject;
449 if (NonPagedFcb ==
NULL)
455 PAPNBuffer =
Add2Ptr(
Buffer, FcbSize + SrvOpenSize + FobxSize);
460 NonPagedFcb =
Add2Ptr(Fobx, FobxSize);
461 PAPNBuffer =
Add2Ptr(Fobx, FobxSize + NonPagedSize);
507 Fcb->CopyOfNonPaged = NonPagedFcb;
508 NonPagedFcb->FcbBackPointer =
Fcb;
731 Fobx = (
PFOBX)RxContext->pFobx;
739 RxContext->RxContextSerializationQLinks.Flink !=
NULL &&
748 RxContext->RxContextSerializationQLinks.Flink =
NULL;
749 RxContext->RxContextSerializationQLinks.Blink =
NULL;
790 ULONG NewBufferingState, OldBufferingState;
794 DPRINT(
"RxChangeBufferingState(%p, %p, %d)\n", SrvOpen,
Context, ComputeNewState);
812 NewBufferingState = 0;
818 NewBufferingState = SrvOpen->BufferingFlags;
824 SetFlag(NewBufferingState, FCB_STATE_BUFFERING_STATE_WITH_NO_SHARES);
828 if (
Fcb->OutstandingLockOperationsCount != 0)
835 DPRINT(
"ChangeBufferingState %x -> %x (%x)\n", OldBufferingState, NewBufferingState, SrvOpen->BufferingFlags);
856 DPRINT(
"Previous flush failed with status: %lx\n",
Status);
872 if (RxContext !=
NULL)
886 DPRINT(
"Oplock break close for %p\n", SrvOpen);
976 DPRINT(
"LoudCompletion: %lx/%lx with %wZ\n",
Status,
Irp->IoStatus.Information,
Context->LoudCompletionString);
1005 DPRINT(
"RxCompleteRequest_Real(%p, %p, %lx)\n", RxContext,
Irp,
Status);
1010 DPRINT(
"NULL IRP for %p\n", RxContext);
1011 if (RxContext !=
NULL)
1031 Irp->IoStatus.Information = 0;
1036 if (RxContext !=
NULL)
1041 DPRINT(
"Completing: MN: %d, Context: %p, IRP: %p, Status: %lx, Info: %lx, #%lx\n",
1042 RxContext->MinorFunction, RxContext,
Irp,
1043 Status,
Irp->IoStatus.Information, RxContext->SerialNumber);
1056 Stack->FileObject->FileName.Length +=
sizeof(
WCHAR);
1060 ASSERT(RxContext->Create.CanonicalNameBuffer ==
NULL);
1068 ASSERT(
Irp->IoStatus.Information <=
Stack->Parameters.Write.Length);
1073 if (RxContext !=
NULL)
1075 if (RxContext->PendingReturned)
1082 DPRINT(
"Completing IRP with %x/%x\n",
Irp->IoStatus.Status,
Irp->IoStatus.Information);
1086 if (RxContext !=
NULL)
1101 SrvCall = (
PSRV_CALL)((
PFCB)SrvOpen->pFcb)->VNetRoot->pNetRoot->pSrvCall;
1129 ProcessChange =
FALSE;
1177 DPRINT(
"RxConstructNetRoot(%p, %p, %p, %p, %p)\n", RxContext, SrvCall, NetRoot,
1178 VirtualNetRoot, LockHoldingState);
1181 PrefixTable = RxContext->RxDeviceObject->pRxNetNameTable;
1201 Context->RxContext = RxContext;
1202 Context->pVNetRoot = VirtualNetRoot;
1275 DPRINT(
"RxConstructSrvCall(%p, %p, %p)\n", RxContext, SrvCall, LockHoldingState);
1278 RxDeviceObject = RxContext->RxDeviceObject;
1284 if (Calldown ==
NULL)
1286 SrvCall->Context =
NULL;
1296 SrvCall->Context =
NULL;
1304 DPRINT(
"With calldown %p and SrvCall %p\n", Calldown, SrvCall);
1386 &LocalNetRootName, &FilePathName,
1387 LockHoldingState, RxConnectionId);
1393 CanonicalName, &LocalNetRootName, &FilePathName, RxConnectionId);
1394 if (VNetRoot !=
NULL)
1402 RxContext->Create.pSrvCall =
NULL;
1403 RxContext->Create.pNetRoot =
NULL;
1404 RxContext->Create.pVNetRoot =
NULL;
1407 if (VNetRoot !=
NULL)
1410 (
PNET_ROOT)VNetRoot->pNetRoot, VNetRoot, LockHoldingState);
1432 *VirtualNetRootPointer = VNetRoot;
1433 DPRINT(
"RxConstructVirtualNetRoot() = Status: %x\n",
Status);
1439 VNetRoot = (
PV_NET_ROOT)RxContext->Create.pVNetRoot;
1453 if (VNetRoot !=
NULL)
1468 *VirtualNetRootPointer = VNetRoot;
1473 *VirtualNetRootPointer = VNetRoot;
1499 NetRoot = (
PNET_ROOT)VNetRoot->pNetRoot;
1503 RxDeviceObject = NetRoot->pSrvCall->RxDeviceObject;
1504 ASSERT(RxDeviceObject == RxContext->RxDeviceObject);
1506 Stack = RxContext->CurrentIrpSp;
1518 NetRoot->InnerNamePrefix.Length +
Name->Length,
NULL);
1525 Fcb->CachedNetRootType = NetRoot->Type;
1529 Fcb->pNetRoot = VNetRoot->pNetRoot;
1532 Fcb->SrvOpenListVersion = 0;
1538 NetRoot->InnerNamePrefix.Length);
1649 Fobx->Flags =
Flags;
1652 NetRoot = (
PNET_ROOT)RxContext->Create.pNetRoot;
1658 NetRoot->DiskParameters.LockThrottlingParameters.Increment,
1659 NetRoot->DiskParameters.LockThrottlingParameters.MaximumDelay);
1664 NetRoot->NamedPipeParameters.PipeReadThrottlingParameters.Increment,
1665 NetRoot->NamedPipeParameters.PipeReadThrottlingParameters.MaximumDelay);
1683 Fobx->NodeReferenceCount = 1;
1712 USHORT CaseInsensitiveLength;
1715 DPRINT(
"RxCreateNetRoot(%p, %wZ, %x, %p)\n", SrvCall,
Name, NetRootFlags, RxConnectionId);
1722 PrefixTable = SrvCall->RxDeviceObject->pRxNetNameTable;
1726 CaseInsensitiveLength = SrvCall->PrefixEntry.Prefix.Length +
Name->Length;
1734 CaseInsensitiveLength);
1735 if (NetRoot ==
NULL)
1743 if (SrvCall->PrefixEntry.Prefix.Length != 0)
1746 SrvCall->PrefixEntry.Prefix.Length);
1751 CaseInsensitiveLength = SrvCall->PrefixEntry.CaseInsensitiveLength;
1755 (
PULONG)&NetRoot->NodeReferenceCount, CaseInsensitiveLength,
1768 NetRoot->Flags |= NetRootFlags;
1769 NetRoot->DiskParameters.ClusterSize = 1;
1775 DPRINT(
"NetRootName: %wZ (%p)\n", NetRoot->pNetRootName, NetRoot);
1807 DPRINT(
"RxCreateRxContext(%p, %p, %u)\n",
Irp, RxDeviceObject, InitialContextFlags);
1854 DPRINT(
"RxCreateSrvCall(%p, %wZ, %wZ, %p)\n", RxContext,
Name, InnerNamePrefix, RxConnectionId);
1859 NameLength =
Name->Length + 2 *
sizeof(
WCHAR);
1860 if (InnerNamePrefix !=
NULL)
1862 NameLength += InnerNamePrefix->Length;
1867 if (SrvCall ==
NULL)
1874 SrvCall->RxDeviceObject = RxContext->RxDeviceObject;
1884 SrvCall, (
PULONG)&SrvCall->NodeReferenceCount,
Name->Length, RxConnectionId);
1886 DPRINT(
"SrvCallName: %wZ (%p)\n", SrvCall->pSrvCallName, SrvCall);
1901 ULONG NumberRemaining;
1908 Calldown =
Context->SrvCalldownStructure;
1919 SrvCall->Status =
Context->Status;
1923 if (NumberRemaining != 0)
1943 DPRINT(
"Queuing RxFinishSrvCallConstruction() call\n");
1950 if (StartDispatcher)
2007 if (SrvOpen !=
NULL)
2009 SrvOpen->Flags =
Flags;
2014 SrvOpen->NodeReferenceCount = 1;
2020 ++
Fcb->SrvOpenListVersion;
2032 if (SrvOpen !=
NULL)
2040 DPRINT(
"SrvOpen %p for FCB %p\n", SrvOpen, SrvOpen->pFcb);
2062 USHORT CaseInsensitiveLength;
2066 DPRINT(
"RxCreateVNetRoot(%p, %p, %wZ, %wZ, %wZ, %p)\n", RxContext, NetRoot, CanonicalName,
2067 LocalNetRootName,
FilePath, RxConnectionId);
2073 if (LocalNetRootName->Length + NetRoot->PrefixEntry.Prefix.Length >
MAXUSHORT)
2079 CaseInsensitiveLength = LocalNetRootName->Length + NetRoot->PrefixEntry.Prefix.Length;
2081 CaseInsensitiveLength);
2082 if (VNetRoot ==
NULL)
2089 &VNetRoot->pUserName, &VNetRoot->pUserDomainName,
2090 &VNetRoot->pPassword, &VNetRoot->Flags);
2094 VNetRoot->pPassword, &VNetRoot->Flags);
2103 VNetRoot->
PrefixOffsetInBytes = LocalNetRootName->Length + NetRoot->PrefixEntry.Prefix.Length;
2117 CaseInsensitiveLength = NetRoot->PrefixEntry.CaseInsensitiveLength;
2121 CaseInsensitiveLength = NetRoot->SrvCall->PrefixEntry.CaseInsensitiveLength;
2124 for (
i = 1;
i < CanonicalName->Length /
sizeof(
WCHAR); ++
i)
2132 CaseInsensitiveLength += (
i *
sizeof(
WCHAR));
2137 VNetRoot, (
PULONG)&VNetRoot->NodeReferenceCount, CaseInsensitiveLength,
2259 ASSERT(NetRoot->pSrvCall->RxDeviceObject !=
NULL);
2271 ASSERT(VNetRoot->pNetRoot->pSrvCall->RxDeviceObject !=
NULL);
2284 if (SrvOpen->OpenCount == 0)
2329 RxDeviceObject = RxContext->RxDeviceObject;
2337 ASSERT((RxContext->ContextListEntry.Flink->Blink == &RxContext->ContextListEntry) &&
2338 (RxContext->ContextListEntry.Blink->Flink == &RxContext->ContextListEntry));
2357 ASSERT(RxContext->ReferenceCount == 0);
2362 ASSERT(RxContext->AcquireReleaseFcbTrackerX == 0);
2365 if (StopContext !=
NULL)
2367 StopContext->
Flags &= ~RX_CONTEXT_FLAG_RECURSIVE_CALL;
2373 if (RxContext->ShadowCritOwner != 0)
2375 DPRINT1(
"ShadowCritOwner not null! %lx\n", RxContext->ShadowCritOwner);
2412 if (DispatchItem ==
NULL)
2428 DPRINT1(
"RxInsertWorkQueueItem failed! Queue: %ld, Routine: %p, Context: %p, Status: %lx\n", WorkQueueType, Routine, pContext,
Status);
2431 DPRINT(
"Dispatching: %p, %p\n", Routine, pContext);
2464 SrvCallName->Buffer = FilePathName->Buffer;
2465 for (
i = 1;
i < FilePathName->Length /
sizeof(
WCHAR); ++
i)
2475 SrvCallName->MaximumLength =
Length;
2476 SrvCallName->Length =
Length;
2479 if (RestOfName !=
NULL)
2482 RestOfName->Buffer = &FilePathName->Buffer[
i];
2483 RestOfName->MaximumLength =
Length;
2484 RestOfName->Length =
Length;
2549 HashBucket = FCB_HASH_BUCKET(FcbTable,
Hash);
2558 for (ListEntry = HashBucket->
Flink;
2559 ListEntry != HashBucket;
2560 ListEntry = ListEntry->
Flink)
2575 if (ListEntry == HashBucket)
2614 FcbTable->TableEntryForNull =
NULL;
2639 IN LOGICAL ForceFilesClosed)
2643 ULONG UncleanAny, UncleanDir;
2644 LONG FilesOpen, AdditionalRef;
2645 BOOLEAN PrefixLocked, FcbTableLocked, ForceClose;
2666 PrefixTable = NetRoot->pSrvCall->RxDeviceObject->pRxNetNameTable;
2668 PrefixLocked =
FALSE;
2669 FcbTableLocked =
FALSE;
2677 PrefixLocked =
TRUE;
2682 FcbTableLocked =
TRUE;
2685 if (!VNetRoot->ConnectionFinalizationDone)
2690 DPRINT(
"Finalizing connection %p: %wZ\n", NetRoot, &NetRoot->PrefixEntry.Prefix);
2693 FcbTable = &NetRoot->FcbTable;
2700 while (
Entry != BucketList)
2743 if (VNetRoot->NumberOfFobxs == 0)
2745 VNetRoot->ConnectionFinalizationDone =
TRUE;
2750 FilesOpen = VNetRoot->NumberOfFobxs;
2751 AdditionalRef = VNetRoot->AdditionalReferenceForDeleteFsctlTaken;
2785 DPRINT(
"UncleanAny: %ld, UncleanDir: %ld, FilesOpen: %ld\n", UncleanAny, UncleanDir, FilesOpen);
2792 VNetRoot->AdditionalReferenceForDeleteFsctlTaken = 0;
2822 for (Bucket = 0; Bucket < FcbTable->NumberOfBuckets; ++Bucket)
2840 DPRINT(
"RxFinalizeNetFcb(%p, %d, %d, %d)\n", ThisFcb, RecursiveFinalize, ForceFinalize, ReferenceCount);
2841 DPRINT(
"Finalize: %wZ\n", &ThisFcb->FcbTableEntry.Path);
2851 if (RecursiveFinalize)
2855 for (ListEntry = ThisFcb->SrvOpenList.
Flink;
2856 ListEntry != &ThisFcb->SrvOpenList;
2857 ListEntry = ListEntry->
Flink)
2868 if (ThisFcb->OpenCount != 0 || ThisFcb->UncleanCount != 0)
2870 ASSERT(ReferenceCount > 0);
2876 ASSERT(ReferenceCount >= 1);
2879 if (ReferenceCount != 1 && !ForceFinalize)
2884 ASSERT(ForceFinalize || ((ThisFcb->OpenCount == 0) && (ThisFcb->UncleanCount == 0)));
2886 DPRINT(
"Finalizing FCB open: %d (%d)\n", ThisFcb->OpenCount, ForceFinalize);
2889 if (!ThisFcb->UpperFinalizationDone)
2896 while (ThisFcb->BufferedLocks.List !=
NULL)
2900 Entry = ThisFcb->BufferedLocks.List;
2901 ThisFcb->BufferedLocks.List =
Entry->Next;
2922 ThisFcb->UpperFinalizationDone =
TRUE;
2925 ASSERT(ReferenceCount >= 1);
2928 if (ReferenceCount != 1)
2934 if (ThisFcb->pBufferingStateChangeCompletedEvent !=
NULL)
2936 RxFreePool(ThisFcb->pBufferingStateChangeCompletedEvent);
2939 if (ThisFcb->MRxDispatch !=
NULL)
2941 ThisFcb->MRxDispatch->MRxDeallocateForFcb(
RX_GET_MRX_FCB(ThisFcb));
2952 ASSERT(!ThisFcb->fMiniInited);
2977 if (ThisFobx->NodeReferenceCount != 0 &&
2983 DPRINT(
"Finalize Fobx: %p (with %d ref), forced: %d\n", ThisFobx, ThisFobx->NodeReferenceCount, ForceFinalize);
2985 SrvOpen = ThisFobx->SrvOpen;
2988 if (!ThisFobx->UpperFinalizationDone)
3014 DPRINT(
"Closing SRV_OPEN %p for %p: %x\n", SrvOpen, ThisFobx,
Status);
3018 ThisFobx->UpperFinalizationDone =
TRUE;
3022 if (ThisFobx->NodeReferenceCount != 0)
3042 ThisFobx->pSrvOpen =
NULL;
3075 PrefixTable = ThisNetRoot->pSrvCall->RxDeviceObject->pRxNetNameTable;
3087 FcbTable = &ThisNetRoot->FcbTable;
3089 if (RecursiveFinalize)
3100 ListEntry = HashBucket->
Flink;
3101 while (ListEntry != HashBucket)
3108 ListEntry = ListEntry->
Flink;
3125 if (ThisNetRoot->NodeReferenceCount != 1 && !ForceFinalize)
3130 DPRINT(
"Finalizing NetRoot %p for %wZ\n", ThisNetRoot, &ThisNetRoot->PrefixEntry.Prefix);
3133 if (ThisNetRoot->NodeReferenceCount != 1)
3148 SrvCall = (
PSRV_CALL)ThisNetRoot->pSrvCall;
3152 if (SrvCall !=
NULL)
3175 PrefixTable = ThisSrvCall->RxDeviceObject->pRxNetNameTable;
3179 if (ThisSrvCall->NodeReferenceCount != 1 &&
3185 DPRINT(
"Finalizing SrvCall %p for %wZ\n", ThisSrvCall, &ThisSrvCall->PrefixEntry.Prefix);
3188 if (!ThisSrvCall->UpperFinalizationDone)
3202 ThisSrvCall->UpperFinalizationDone =
TRUE;
3205 WillFree = (ThisSrvCall->NodeReferenceCount == 1);
3208 if (ThisSrvCall->RxDeviceObject !=
NULL)
3226 MRxFinalizeSrvCall, ((
PMRX_SRV_CALL)ThisSrvCall, ForceFinalize));
3232 if (ThisSrvCall->NodeReferenceCount != 1)
3238 if (ThisSrvCall->pDomainName !=
NULL)
3267 if (RecursiveFinalize)
3271 ListEntry = ThisSrvOpen->FobxList.
Flink;
3272 while (ListEntry != &ThisSrvOpen->FobxList)
3277 ListEntry = ListEntry->
Flink;
3283 if (ThisSrvOpen->NodeReferenceCount != 0 &&
3289 DPRINT(
"Finalize SRV_OPEN: %p (with %d ref), forced: %d\n", ThisSrvOpen, ThisSrvOpen->NodeReferenceCount, ForceFinalize);
3292 Fcb = (
PFCB)ThisSrvOpen->pFcb;
3293 if ((!ThisSrvOpen->UpperFinalizationDone && ThisSrvOpen->Condition !=
Condition_Good) ||
3317 ++
Fcb->SrvOpenListVersion;
3325 ThisSrvOpen->pVNetRoot =
NULL;
3329 ThisSrvOpen->UpperFinalizationDone =
TRUE;
3333 if (ThisSrvOpen->NodeReferenceCount != 0)
3379 PrefixTable = ThisVNetRoot->pNetRoot->pSrvCall->RxDeviceObject->pRxNetNameTable;
3383 if (ThisVNetRoot->NodeReferenceCount != 1 &&
3389 DPRINT(
"Finalizing VNetRoot %p for %wZ\n", ThisVNetRoot, &ThisVNetRoot->PrefixEntry.Prefix);
3391 NetRoot = (
PNET_ROOT)ThisVNetRoot->pNetRoot;
3393 if (!ThisVNetRoot->UpperFinalizationDone)
3409 ThisVNetRoot->UpperFinalizationDone =
TRUE;
3413 if (ThisVNetRoot->NodeReferenceCount != 1)
3419 if (NetRoot->pSrvCall->RxDeviceObject !=
NULL)
3430 ThisVNetRoot->pPassword, &ThisVNetRoot->Flags);
3458 RxDeviceObject = RxContext->RxDeviceObject;
3470 DPRINT1(
"Failed to initialize connection ID\n");
3475 RxContext->Create.NetNamePrefixEntry =
NULL;
3491 if (Container !=
NULL)
3501 VNetRoot = Container;
3506 NetRoot->
SrvCall->RxDeviceObject != RxContext->RxDeviceObject)
3509 SavedVNetRoot =
NULL;
3524 SavedVNetRoot = VNetRoot;
3535 ListEntry = ListEntry->
Flink)
3550 SavedVNetRoot =
NULL;
3556 SavedVNetRoot =
NULL;
3566 if (SavedVNetRoot ==
NULL)
3572 else if (SavedVNetRoot != VNetRoot)
3575 if (SavedVNetRoot !=
NULL)
3619 DPRINT(
"CanonicalName: %wZ (%d)\n", CanonicalName, CanonicalName->Length);
3629 DPRINT(
"CSC instance, VNetRoot: %p\n", VNetRoot);
3631 VNetRoot->Flags |=
Flags;
3644 DPRINT1(
"RxFindOrConstructVirtualNetRoot() = Status: %x\n",
Status);
3649 DPRINT(
"Waiting for stable condition for: %p\n", VNetRoot);
3664 RxContext->Create.pVNetRoot =
NULL;
3694 DPRINT(
"RxFindOrCreateConnections(%p, %wZ, %x, %p, %p, %p, %p)\n",
3695 RxContext, CanonicalName, NetRootType, LocalNetRootName,
3696 FilePathName,
LockState, RxConnectionId);
3698 *FilePathName = *CanonicalName;
3699 LocalNetRootName->Length = 0;
3700 LocalNetRootName->MaximumLength = 0;
3701 LocalNetRootName->Buffer = CanonicalName->Buffer;
3704 if (FilePathName->Buffer[1] ==
';')
3710 for (
i = 2;
i < FilePathName->Length /
sizeof(
WCHAR); ++
i)
3724 FilePathName->Buffer = &FilePathName->Buffer[
i];
3726 LocalNetRootName->Length =
Length;
3727 LocalNetRootName->MaximumLength =
Length;
3728 FilePathName->Length -=
Length;
3730 DPRINT(
"CanonicalName: %wZ\n", CanonicalName);
3731 DPRINT(
" -> FilePathName: %wZ\n", FilePathName);
3732 DPRINT(
" -> LocalNetRootName: %wZ\n", LocalNetRootName);
3736 PrefixTable = RxContext->RxDeviceObject->pRxNetNameTable;
3744 if (Container !=
NULL)
3769 DPRINT(
"Container %p for path %wZ\n", Container, FilePathName);
3780 RxContext->Create.pVNetRoot =
NULL;
3781 RxContext->Create.pNetRoot =
NULL;
3782 RxContext->Create.pSrvCall =
NULL;
3783 RxContext->Create.Type = NetRootType;
3786 if (Container !=
NULL)
3791 VNetRoot = Container;
3799 DPRINT(
"Waiting for stable condition for: %p\n", NetRoot);
3818 SrvCall->RxDeviceObject == RxContext->RxDeviceObject)
3836 Status = VNetRoot->ConstructionStatus;
3846 SrvCall = Container;
3852 DPRINT(
"Waiting for stable condition for: %p\n", SrvCall);
3874 Status = SrvCall->Status;
3885 SrvCall->RxDeviceObject != RxContext->RxDeviceObject)
3910 if (Container !=
NULL)
3917 DPRINT(
" -> SrvCallName: %wZ\n", &SrvCallName);
3920 if (SrvCall ==
NULL)
3928 RxContext->Create.pVNetRoot =
NULL;
3929 RxContext->Create.pNetRoot =
NULL;
3930 RxContext->Create.pSrvCall =
NULL;
3931 RxContext->Create.Type = NetRootType;
3932 Container = SrvCall;
3952 ASSERT(SrvCall->RxDeviceObject == RxContext->RxDeviceObject);
3955 SrvCall->RxDeviceObject->Dispatch->MRxExtractNetRootName(FilePathName, (
PMRX_SRV_CALL)SrvCall, &NetRootName,
NULL);
3958 if (NetRoot ==
NULL)
3963 NetRoot->Type = NetRootType;
3968 VNetRoot =
RxCreateVNetRoot(RxContext, NetRoot, CanonicalName, LocalNetRootName, FilePathName, RxConnectionId);
3969 if (VNetRoot ==
NULL)
3988 DPRINT1(
"RxConstructNetRoot failed Ctxt: %p, VNet: %p, Status: %lx, Condition: %d\n", RxContext, VNetRoot,
Status, VNetRoot->
Condition);
3991 RxContext->Create.pNetRoot =
NULL;
3992 RxContext->Create.pVNetRoot =
NULL;
4000 Stack = RxContext->CurrentIrpSp;
4021 DPRINT(
"RxFindOrCreateConnections() = Status: %x\n",
Status);
4046 FILL_IN_FCB((
PFCB)
Fcb, 0, 0, 0, 0, 0, 0, 0, 0, 0);
4049 else if (InitPacket !=
NULL)
4051 FILL_IN_FCB((
PFCB)
Fcb, *InitPacket->pAttributes, *InitPacket->pNumLinks,
4052 InitPacket->pCreationTime->QuadPart, InitPacket->pLastAccessTime->QuadPart,
4053 InitPacket->pLastWriteTime->QuadPart, InitPacket->pLastChangeTime->QuadPart,
4054 InitPacket->pAllocationSize->QuadPart, InitPacket->pFileSize->QuadPart,
4055 InitPacket->pValidDataLength->QuadPart);
4072 ((
PFCB)
Fcb)->BufferedLocks.PendingLockOps = 0;
4098 DPRINT(
"RxFinishSrvCallConstruction(%p)\n", Calldown);
4102 PrefixTable =
Context->RxDeviceObject->pRxNetNameTable;
4112 MRxSrvCallWinnerNotify,
4138 DPRINT(
"Finishing async call\n");
4166 Context->CurrentIrp->IoStatus.Information = 0;
4179 DPRINT(
"Not completing, pending\n");
4198 DPRINT(
"RxFinishSrvCallConstructionDispatcher(%p)\n",
Context);
4341 SrvCall->RxDeviceObject =
NULL;
4349 NetRoot->pSrvCall =
NULL;
4375 Entry = SrvCall->BufferingManager.HandlerList.Flink;
4376 while (
Entry != &SrvCall->BufferingManager.HandlerList)
4380 if (
Request->SrvOpenKey == SrvOpen->Key &&
Request->SrvOpen == SrvOpen)
4389 Entry = SrvCall->BufferingManager.LastChanceHandlerList.Flink;
4390 while (
Entry != &SrvCall->BufferingManager.LastChanceHandlerList)
4394 if (
Request->SrvOpenKey == SrvOpen->Key &&
Request->SrvOpen == SrvOpen)
4457 DeviceObject = VNetRoot->pNetRoot->pSrvCall->RxDeviceObject;
4539 RxContext->NodeByteSize =
sizeof(
RX_CONTEXT);
4540 RxContext->ReferenceCount = 1;
4542 RxContext->RxDeviceObject = RxDeviceObject;
4546 RxContext->MRxCancelRoutine =
NULL;
4547 RxContext->ResumeRoutine =
NULL;
4548 RxContext->Flags |= InitialContextFlags;
4549 RxContext->CurrentIrp =
Irp;
4551 RxContext->OriginalThread = RxContext->LastExecutionThread;
4556 RxContext->CurrentIrpSp =
NULL;
4558 RxContext->MinorFunction = 0;
4598 RxContext->MajorFunction =
Stack->MajorFunction;
4599 RxContext->MinorFunction =
Stack->MinorFunction;
4601 RxContext->CurrentIrpSp =
Stack;
4611 Fobx =
Stack->FileObject->FsContext2;
4622 RxContext->pRelevantSrvOpen = Fobx->pSrvOpen;
4630 RxContext->pFobx =
NULL;
4648 if (VNetRoot !=
NULL)
4650 RxContext->NotifyChangeDirectory.pVNetRoot = (
PMRX_V_NET_ROOT)VNetRoot;
4655 RxContext->RealDevice =
Stack->FileObject->DeviceObject;
4665 DPRINT(
"New Ctxt: %p for MN: %d, IRP: %p, THRD: %p, FCB: %p, FOBX:%p #%lx\n",
4666 RxContext, RxContext->MinorFunction,
Irp,
4668 RxContext->SerialNumber);
4754 FcbTable->CaseInsensitiveMatch = CaseInsensitiveMatch;
4755 FcbTable->Version = 0;
4756 FcbTable->TableEntryForNull =
NULL;
4759 for (
i = 0;
i < FcbTable->NumberOfBuckets; ++
i)
4764 FcbTable->Lookups = 0;
4765 FcbTable->FailedLookups = 0;
4766 FcbTable->Compares = 0;
4865 pMRxDeviceObject->DispatcherContext.NumberOfWorkerThreads = 0;
4866 pMRxDeviceObject->DispatcherContext.pTearDownEvent =
NULL;
4890 ThisTable->Version = 0;
4891 ThisTable->TableEntryForNull =
NULL;
4892 ThisTable->IsNetNameTable =
FALSE;
4893 ThisTable->CaseInsensitiveMatch = CaseInsensitiveMatch;
4927 SrvCall->pPrincipalName =
NULL;
4930 if (RxContext->MajorFunction !=
IRP_MJ_CREATE || RxContext->Create.EaLength == 0)
4977 DPRINT(
"RxInitializeVNetRootParameters(%p, %p, %p, %p, %p, %p, %p)\n", RxContext,
4980 *UserNamePtr =
NULL;
4981 *UserDomainNamePtr =
NULL;
4982 *PasswordPtr =
NULL;
4984 *
Flags &= ~VNETROOT_FLAG_CSCAGENT_INSTANCE;
5006 if (RxContext->
Create.UserName.Buffer !=
NULL)
5014 if (RxContext->
Create.UserDomainName.Buffer !=
NULL)
5021 if (RxContext->
Create.Password.Buffer !=
NULL)
5049 ULONG MaximumNumberOfWorkerThreads,
5050 ULONG MinimumNumberOfWorkerThreads)
5055 WorkQueue->MaximumNumberOfWorkerThreads = MaximumNumberOfWorkerThreads;
5056 WorkQueue->MinimumNumberOfWorkerThreads = MinimumNumberOfWorkerThreads;
5061 WorkQueue->NumberOfWorkItemsDispatched = 0;
5062 WorkQueue->NumberOfWorkItemsToBeDispatched = 0;
5065 WorkQueue->NumberOfActiveWorkerThreads = 0;
5066 WorkQueue->NumberOfIdleWorkerThreads = 0;
5067 WorkQueue->NumberOfFailedSpinUpRequests = 0;
5068 WorkQueue->WorkQueueItemForSpinUpWorkerThreadInUse = 0;
5070 WorkQueue->WorkQueueItemForTearDownWorkQueue.WorkerRoutine =
NULL;
5071 WorkQueue->WorkQueueItemForTearDownWorkQueue.Parameter =
NULL;
5072 WorkQueue->WorkQueueItemForTearDownWorkQueue.pDeviceObject =
NULL;
5074 WorkQueue->WorkQueueItemForSpinUpWorkerThread.WorkerRoutine =
NULL;
5075 WorkQueue->WorkQueueItemForSpinUpWorkerThread.Parameter =
NULL;
5076 WorkQueue->WorkQueueItemForSpinUpWorkerThread.pDeviceObject =
NULL;
5078 WorkQueue->WorkQueueItemForSpinDownWorkerThread.WorkerRoutine =
NULL;
5079 WorkQueue->WorkQueueItemForSpinDownWorkerThread.Parameter =
NULL;
5080 WorkQueue->WorkQueueItemForSpinDownWorkerThread.pDeviceObject =
NULL;
5094 ULONG MaximumNumberOfWorkerThreads;
5101 MaximumNumberOfWorkerThreads = 5;
5105 MaximumNumberOfWorkerThreads = 10;
5110 MaximumNumberOfWorkerThreads, 1);
5148 SrvOpen->Key =
NULL;
5151 BufferingManager = &((
PSRV_CALL)((
PFCB)SrvOpen->pFcb)->VNetRoot->pNetRoot->pSrvCall)->BufferingManager;
5188 SpinUpThreads =
FALSE;
5195 if (
WorkQueue->NumberOfIdleWorkerThreads <
WorkQueue->NumberOfWorkItemsToBeDispatched &&
5200 SpinUpThreads =
TRUE;
5234 if (RxContext->Create.EaLength != 0)
5239 if (RxContext->Create.NtCreateParameters.DfsNameContext !=
NULL &&
5240 ((
PDFS_NAME_CONTEXT)RxContext->Create.NtCreateParameters.DfsNameContext)->NameContextType == 0xAAAAAAAA)
5261 Irp = RxContext->CurrentIrp;
5305 RxContext->IoStatusBlock.Status =
Status;
5323 DPRINT(
"RxLowIoCompletionTail(%p)\n", RxContext);
5333 DPRINT(
"Calling completion routine: %p\n", RxContext->LowIoContext.CompletionRoutine);
5334 Status = RxContext->LowIoContext.CompletionRoutine(RxContext);
5341 Operation = RxContext->LowIoContext.Operation;
5349 RxContext->RxContextSerializationQLinks.Flink =
NULL;
5350 RxContext->RxContextSerializationQLinks.Blink =
NULL;
5386 DPRINT(
"RxLowIoPopulateFsctlInfo(%p)\n", RxContext);
5388 Irp = RxContext->CurrentIrp;
5389 Stack = RxContext->CurrentIrpSp;
5392 RxContext->LowIoContext.ParamsFor.FsCtl.FsControlCode =
Stack->Parameters.FileSystemControl.FsControlCode;
5393 RxContext->LowIoContext.ParamsFor.FsCtl.InputBufferLength =
Stack->Parameters.FileSystemControl.InputBufferLength;
5394 RxContext->LowIoContext.ParamsFor.FsCtl.OutputBufferLength =
Stack->Parameters.FileSystemControl.OutputBufferLength;
5395 RxContext->LowIoContext.ParamsFor.FsCtl.MinorFunction =
Stack->MinorFunction;
5401 RxContext->LowIoContext.ParamsFor.FsCtl.pInputBuffer =
Irp->AssociatedIrp.SystemBuffer;
5402 RxContext->LowIoContext.ParamsFor.FsCtl.pOutputBuffer =
Irp->AssociatedIrp.SystemBuffer;
5410 RxContext->LowIoContext.ParamsFor.FsCtl.pInputBuffer =
Stack->Parameters.FileSystemControl.Type3InputBuffer;
5411 RxContext->LowIoContext.ParamsFor.FsCtl.pOutputBuffer =
Irp->UserBuffer;
5420 RxContext->LowIoContext.ParamsFor.FsCtl.pInputBuffer =
Irp->AssociatedIrp.SystemBuffer;
5426 if (RxContext->LowIoContext.ParamsFor.FsCtl.pOutputBuffer ==
NULL)
5433 RxContext->LowIoContext.ParamsFor.FsCtl.pOutputBuffer =
NULL;
5454 LowIoContext = &RxContext->LowIoContext;
5554 Dispatch = RxContext->RxDeviceObject->Dispatch;
5560 RxContext->IoStatusBlock.Information = 0;
5572 Status = RxContext->IoStatusBlock.Status;
5583 RxContext->CurrentIrpSp->Flags &= ~SL_PENDING_RETURNED;
5599 RxContext->IoStatusBlock.Status =
Status;
5615 Irp = RxContext->CurrentIrp;
5624 return Irp->AssociatedIrp.SystemBuffer;
5636 PFOBX ScavengerFobx;
5651 Fcb = (
PFCB)pFobx->pSrvOpen->pFcb;
5657 ScavengerFobx =
NULL;
5679 ScavengerFobx =
NULL;
5706 if (ScavengerFobx !=
NULL)
5737 Fcb = (
PFCB)Fobx->pSrvOpen->pFcb;
5749 Fcb = (
PFCB)Fobx->pSrvOpen->pFcb;
5788 return Irp->UserBuffer;
5829 NetRoot = (
PNET_ROOT)ThisVNetRoot->pNetRoot;
5835 PrefixTable = NetRoot->pSrvCall->RxDeviceObject->pRxNetNameTable;
5850 while (
Entry != BucketList)
5891 BOOLEAN ProcessBufferingStateChangeRequests)
5895 DPRINT(
"RxpAcquirePrefixTableLockShared(%p, %d, %d) -> %d\n",
pTable,
Wait, ProcessBufferingStateChangeRequests,
5896 pTable->TableLock.ActiveEntries);
5908 BOOLEAN ProcessBufferingStateChangeRequests)
5912 DPRINT(
"RxpAcquirePrefixTableLockExclusive(%p, %d, %d) -> %d\n",
pTable,
Wait, ProcessBufferingStateChangeRequests,
5913 pTable->TableLock.ActiveEntries);
5931 BOOLEAN ResourceAcquired, NetRootReferenced, Freed;
5941 if (!ForceFinalize && !RecursiveFinalize && (ThisFcb->OpenCount != 0 || ThisFcb->UncleanCount != 0 || References > 1))
5948 NetRoot = (
PNET_ROOT)ThisFcb->VNetRoot->pNetRoot;
5949 ResourceAcquired =
FALSE;
5950 NetRootReferenced =
FALSE;
5956 NetRootReferenced =
TRUE;
5980 ResourceAcquired =
TRUE;
5987 Freed =
RxFinalizeNetFcb(ThisFcb, RecursiveFinalize, ForceFinalize, References);
5991 if (ResourceAcquired)
5997 if (NetRootReferenced)
6043 PrefixTable = SrvCall->RxDeviceObject->pRxNetNameTable;
6079 Entry = DiscardedRequests->Flink;
6080 while (
Entry != DiscardedRequests)
6127 while (
Entry != &DispatcherList)
6135 if (SrvOpen !=
NULL)
6138 if (
Request->SrvOpenKey == SrvOpen->Key)
6186 StartDispatcher =
FALSE;
6194 if (StartDispatcher)
6208 if (StartDispatcher)
6211 DPRINT(
"Starting dispatcher\n");
6234 for (
Entry = SrvCall->BufferingManager.SrvOpenLists[0].Flink;
6235 Entry != &SrvCall->BufferingManager.SrvOpenLists[0];
6240 if (SrvOpen->Key ==
Request->SrvOpenKey)
6251 if (
Entry == &SrvCall->BufferingManager.SrvOpenLists[0])
6256 if (SrvCall->BufferingManager.NumberOfOutstandingOpens != 0)
6290 if (
Node->NodeReferenceCount > 1)
6304 ScavengerHead =
NULL;
6342 if (ScavengerHead !=
NULL)
6381 pWorkItem->LastTick = (TimeInterval.QuadPart / 550000) +
RxTimerTickCount + 1;
6408 pWorkQueueItem->List.Flink =
NULL;
6409 pWorkQueueItem->WorkerRoutine = Routine;
6410 pWorkQueueItem->Parameter = pContext;
6439 DPRINT(
"Insert: %wZ\n", &ThisEntry->Prefix);
6445 ThisEntry->CaseInsensitiveLength = CaseInsensitiveLength;
6446 ThisEntry->ContainingRecord = Container;
6447 ThisEntry->ContainerRefCount = ContainerRefCount;
6450 DPRINT(
"Associated hash: %x\n", ThisEntry->SavedHashValue);
6453 if (ThisEntry->Prefix.Length == 0)
6455 ThisTable->TableEntryForNull = ThisEntry;
6460 InsertTailList(HASH_BUCKET(ThisTable, ThisEntry->SavedHashValue), &ThisEntry->HashLinks);
6464 if (ConnectionId !=
NULL)
6466 ThisEntry->ConnectionId.Luid = ConnectionId->Luid;
6470 ThisEntry->ConnectionId.Luid.LowPart = 0;
6471 ThisEntry->ConnectionId.Luid.HighPart = 0;
6474 InsertTailList(&ThisTable->MemberQueue, &ThisEntry->MemberQLinks);
6476 ++ThisTable->Version;
6478 DPRINT(
"Inserted in bucket: %p\n", HASH_BUCKET(ThisTable, ThisEntry->SavedHashValue));
6498 ASSERT(CanonicalName->Length > 0);
6502 if (Container ==
NULL)
6568 BOOLEAN ProcessBufferingStateChangeRequests)
6572 DPRINT(
"RxpReleasePrefixTableLock(%p, %d) -> %d\n",
pTable, ProcessBufferingStateChangeRequests,
6573 pTable->TableLock.ActiveEntries);
6591 ASSERT(RxContext->Create.CanonicalNameBuffer ==
NULL);
6592 RxContext->Create.RdrFlags = 0;
6596 ASSERT(RxContext->RxContextSerializationQLinks.Flink ==
NULL);
6597 ASSERT(RxContext->RxContextSerializationQLinks.Blink ==
NULL);
6600 RxContext->ReferenceCount = 0;
6630 else if (SrvOpen !=
NULL)
6658 LONG NumberOfBufferingChangeRequests, LockedOldBufferingToken, OldBufferingToken;
6661 NumberOfBufferingChangeRequests = ((
PSRV_CALL)SrvOpen->pVNetRoot->pNetRoot->pSrvCall)->BufferingManager.CumulativeNumberOfBufferingChangeRequests;
6665 NumberOfBufferingChangeRequests,
6666 NumberOfBufferingChangeRequests);
6668 if (OldBufferingToken != LockedOldBufferingToken)
6736 ULONG ReferenceCount;
6748 InstanceType =
"SrvCall";
6753 InstanceType =
"NetRoot";
6758 InstanceType =
"VNetRoot";
6763 InstanceType =
"NetFobx";
6768 InstanceType =
"NetFcb";
6773 InstanceType =
"SrvOpen";
6778 DPRINT1(
"Invalid node type!\n");
6803 ULONG ReferenceCount;
6813 InstanceType =
"SrvCall";
6818 InstanceType =
"NetRoot";
6823 InstanceType =
"VNetRoot";
6828 InstanceType =
"NetFobx";
6833 InstanceType =
"NetFcb";
6838 InstanceType =
"SrvOpen";
6843 DPRINT1(
"Invalid node type!\n");
6880 DPRINT(
"Node %p no longer has the scavenger mark\n");
7019 PVOID CallersAddress, CallersCaller;
7023 DPRINT1(
"Caller was %p %p\n", CallersAddress, CallersCaller);
7029 Length, UninitializeCacheMaps);
7060 FcbToBePurged = (
PFCB)pFobx->pSrvOpen->pFcb;
7068 DPRINT1(
"Purge failed for %p (%p)\n", FcbToBePurged, pFobx);
7075 DPRINT1(
"Image section flush failed for %p (%p)\n", FcbToBePurged, pFobx);
7079 DPRINT(
"Purge OK for %p (%p)\n", FcbToBePurged, pFobx);
7088 PFOBX FobxToBePurged)
7095 FcbToBePurged = (
PFCB)FobxToBePurged->pSrvOpen->pFcb;
7112 DPRINT(
"FCB purge skipped\n");
7140 ULONG SuccessfullPurge;
7179 SuccessfullPurge = 0;
7188 DPRINT(
"Dealing with FOBX: %p\n", Fobx);
7193 if (Fobx->pSrvOpen ==
NULL ||
7194 Fobx->pSrvOpen->pFcb ==
NULL ||
7195 ((
PFCB)Fobx->pSrvOpen->pFcb)->VNetRoot ==
NULL ||
7196 (
PNET_ROOT)((
PFCB)Fobx->pSrvOpen->pFcb)->VNetRoot->pNetRoot != NetRoot)
7202 Fcb = (
PFCB)Fobx->pSrvOpen->pFcb;
7251 DPRINT1(
"Failed purging %p (%p)\n",
Fcb, Fobx);
7289 BOOLEAN KillThread, Dereference;
7302 Dereference =
FALSE;
7325 WorkQueueItem->List.Flink =
NULL;
7326 WorkQueueItem->WorkerRoutine =
NULL;
7327 WorkQueueItem->Parameter =
NULL;
7340 if (TearDownEvent !=
NULL)
7357 if (
WorkQueue->NumberOfWorkItemsToBeDispatched <= 0)
7360 if (
WorkQueue->NumberOfActiveWorkerThreads >
WorkQueue->MinimumNumberOfWorkerThreads)
7377 if (
WorkQueue->NumberOfActiveWorkerThreads >
WorkQueue->MinimumNumberOfWorkerThreads)
7397 RundownContext =
WorkQueue->pRundownContext;
7402 Dereference =
FALSE;
7404 if (
WorkQueue->NumberOfActiveWorkerThreads == 0)
7417 }
while (!KillThread);
7419 DPRINT(
"Killed worker thread\n");
7498 ULONG InitialContextFlags, SavedFlags;
7503 Irp = RxContext->CurrentIrp;
7504 RxDeviceObject = RxContext->RxDeviceObject;
7515 RxContext->Flags = SavedFlags;
7608 NetRoot = (
PNET_ROOT)ThisFcb->VNetRoot->pNetRoot;
7617 DPRINT(
"FCB (%p) %wZ removed\n", ThisFcb, &ThisFcb->FcbTableEntry.Path);
7643 RxContext->RxContextSerializationQLinks.Flink =
NULL;
7644 RxContext->RxContextSerializationQLinks.Blink =
NULL;
7665 if (
Entry->Prefix.Length == 0)
7667 ThisTable->TableEntryForNull =
NULL;
7679 ++ThisTable->Version;
7694 PrefixTable = NetRoot->pSrvCall->RxDeviceObject->pRxNetNameTable;
7730 if (NetRoot->pSrvCall !=
NULL && NetRoot->pSrvCall->RxDeviceObject !=
NULL)
7801 BOOLEAN SynchronizeWithScavenger)
7808 RxDeviceObject = NetRoot->pSrvCall->RxDeviceObject;
7812 if (SynchronizeWithScavenger)
7853 if (PurgingFcb !=
NULL && PurgingFcb !=
Fcb)
7877 if (SynchronizeWithScavenger)
7919 while (NextEntry != LastEntry)
7922 NextEntry = NextEntry->
Flink;
8117 ++
WorkQueue->NumberOfActiveWorkerThreads;
8139 --
WorkQueue->NumberOfActiveWorkerThreads;
8140 ++
WorkQueue->NumberOfFailedSpinUpRequests;
8143 if (
WorkQueue->NumberOfActiveWorkerThreads == 0 &&
8186 Loops[1] = MaxChar - 1;
8187 Loops[2] = MaxChar - 2;
8188 Loops[3] = MaxChar - 3;
8189 Loops[4] = MaxChar - 4;
8190 Loops[5] = MaxChar / 4;
8191 Loops[6] = 2 * MaxChar / 4;
8192 Loops[7] = 3 * MaxChar / 4;
8195 for (
i = 0;
i < 8; ++
i)
8200 if (Idx >= 0 && Idx < MaxChar)
8225 Loops[1] = MaxChar - 1;
8226 Loops[2] = MaxChar - 2;
8227 Loops[3] = MaxChar - 3;
8228 Loops[4] = MaxChar - 4;
8229 Loops[5] = MaxChar / 4;
8230 Loops[6] = 2 * MaxChar / 4;
8231 Loops[7] = 3 * MaxChar / 4;
8234 for (
i = 0;
i < 8; ++
i)
8239 if (Idx >= 0 && Idx < MaxChar)
8267 if (ThisTable->IsNetNameTable && RxConnectionId ==
NULL)
8271 RxConnectionId = &NullId;
8282 for (
i = 1;
i < MaxChar; ++
i)
8298 ++ThisTable->Lookups;
8301 if (CurEntry ==
NULL)
8304 ++ThisTable->FailedLookups;
8311 Container =
Entry->ContainingRecord;
8391 HashBucket = HASH_BUCKET(ThisTable,
HashValue);
8400 for (ListEntry = HashBucket->
Flink;
8401 ListEntry != HashBucket;
8402 ListEntry = ListEntry->
Flink)
8412 ++ThisTable->Considers;
8414 ASSERT(HashBucket == HASH_BUCKET(ThisTable,
Entry->SavedHashValue));
8416 Container =
Entry->ContainingRecord;
8426 ++ThisTable->Compares;
8429 if (
Entry->CaseInsensitiveLength != 0)
8436 InsensitiveName.
Length =
Entry->CaseInsensitiveLength;
8437 InsensitivePrefix.
Length =
Entry->CaseInsensitiveLength;
8445 if (
Name->Length ==
Entry->CaseInsensitiveLength)
8458 InsensitivePrefix.
Length =
Entry->Prefix.Length -
Entry->CaseInsensitiveLength;
8460 CmpName = &InsensitiveName;
8461 CmpPrefix = &InsensitivePrefix;
8467 CmpPrefix = &
Entry->Prefix;
8527 ListEntry = ListEntry->
Flink;
8534 ListEntry = ListEntry->
Flink;
8553 ListEntry = LocalList.
Flink;
8557 ListEntry = ListEntry->
Flink;
8563 WorkItem->WorkQueueItem.Parameter);
8565 while (ListEntry != &LocalList);
8586 if (RxContext ==
NULL)
8613 ++
Fcb->FcbAcquires[Case];
8617 ++
Fcb->FcbReleases[Case];
8624 ULONG TrackerHistoryPointer;
8638 if (TrackerHistoryPointer < RDBSS_TRACKER_HISTORY_SIZE)
8640 RxContext->TrackerHistory[TrackerHistoryPointer].AcquireRelease =
Operation;
8641 RxContext->TrackerHistory[TrackerHistoryPointer].LineNumber =
LineNumber;
8642 RxContext->TrackerHistory[TrackerHistoryPointer].FileName = (
PSZ)
FileName;
8643 RxContext->TrackerHistory[TrackerHistoryPointer].SavedTrackerValue = RxContext->AcquireReleaseFcbTrackerX;
8644 RxContext->TrackerHistory[TrackerHistoryPointer].Flags = RxContext->Flags;
8648 ASSERT(RxContext->AcquireReleaseFcbTrackerX >= 0);
8689 if (UserName !=
NULL)
8694 if (UserDomainName !=
NULL)
8707 (*Flags) &= ~VNETROOT_FLAG_CSCAGENT_INSTANCE;
8725 DPRINT(
"RxUpdateCondition(%d, %p, %p)\n", NewConditionValue,
Condition, TransitionWaitList);
8742 Context->Flags &= ~RX_CONTEXT_FLAG_POST_ON_STABLE_CONDITION;
8770 Irp = RxContext->CurrentIrp;
8771 Stack = RxContext->CurrentIrpSp;
8785 Fobx = RxContext->pFobx;
8791 if (SrvOpen !=
NULL)
8820 RelatedFileObject =
FileObject->RelatedFileObject;
8821 if (RelatedFileObject !=
NULL)
8825 Fcb = RelatedFileObject->FsContext;
8879 if (AsyncStatus ==
NULL)
8881 AsyncStatus = &LocalStatus;
8986 BOOLEAN SpecialContext, CanWait, Acquired, ContextIsPresent;
8990 DPRINT(
"__RxAcquireFcb(%p, %p, %d, %d, %s, %d)\n",
Fcb, RxContext,
Mode,
LineNumber,
FileName,
SerialNumber);
8992 SpecialContext =
FALSE;
8993 ContextIsPresent =
FALSE;
8997 SpecialContext =
TRUE;
9014 if (RxContext ==
NULL)
9021 ContextIsPresent =
TRUE;
9128 _In_ ULONG CapturedRxContextSerialNumber,
9134 RxContext->SerialNumber != CapturedRxContextSerialNumber)
9137 DPRINT1(
"Context %p has changed at line %d in file %s\n", RxContext,
Line,
File);
9165 RxTrackerUpdateHistory(RxContext, MrxFcb, (!BufferingPending ? TRACKER_RELEASE_FCB_NO_BUFF_PENDING : TRACKER_RELEASE_NON_EXCL_FCB_BUFF_PENDING),
9213 (!BufferingPending ? TRACKER_RELEASE_FCB_FOR_THRD_NO_BUFF_PENDING : TRACKER_RELEASE_NON_EXCL_FCB_FOR_THRD_BUFF_PENDING),
BOOLEAN NTAPI MmForceSectionClosed(IN PSECTION_OBJECT_POINTERS SectionObjectPointer, IN BOOLEAN DelayClose)
static PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(PIRP Irp)
PRTL_UNICODE_STRING_BUFFER Path
ACPI_BUFFER *RetBuffer ACPI_BUFFER *RetBuffer char ACPI_WALK_RESOURCE_CALLBACK void *Context ACPI_BUFFER *RetBuffer UINT16 ACPI_RESOURCE **ResourcePtr ACPI_GENERIC_ADDRESS *Reg UINT32 *ReturnValue UINT8 UINT8 *Slp_TypB ACPI_PHYSICAL_ADDRESS PhysicalAddress64 UINT32 UINT32 *TimeElapsed UINT32 LineNumber
#define OBJ_NAME_PATH_SEPARATOR
#define InterlockedIncrement
#define InterlockedDecrement
#define RxInitializeThrottlingState(BP, Inc, MaxDelay)
#define RX_REQUEST_PREPARED_FOR_HANDLING
#define RxReleaseBufferingManagerMutex(BufMan)
#define RxAcquireBufferingManagerMutex(BufMan)
VOID NTAPI CcFlushCache(IN PSECTION_OBJECT_POINTERS SectionObjectPointer, IN OPTIONAL PLARGE_INTEGER FileOffset, IN ULONG Length, OUT OPTIONAL PIO_STATUS_BLOCK IoStatus)
_In_ PFCB _In_ LONGLONG FileOffset
_Inout_ PFCB _Inout_ PUNICODE_STRING RemainingName
#define STATUS_NOT_IMPLEMENTED
#define DFS_DOWNLEVEL_OPEN_CONTEXT
#define NT_SUCCESS(StatCode)
#define Assert(cond, msg)
static int Hash(const char *)
static const WCHAR Message[]
VOID NTAPI KeInitializeDpc(IN PKDPC Dpc, IN PKDEFERRED_ROUTINE DeferredRoutine, IN PVOID DeferredContext)
#define IO_NETWORK_INCREMENT
#define InterlockedExchangePointer(Target, Value)
#define RemoveEntryList(Entry)
#define InsertTailList(ListHead, Entry)
#define IsListEmpty(ListHead)
#define ExReleaseResourceForThreadLite(res, thrdID)
#define PsGetCurrentThread()
NTSTATUS ExInitializeResourceLite(PULONG res)
#define KeWaitForSingleObject(pEvt, foo, a, b, c)
#define RtlCompareMemory(s1, s2, l)
#define KeInitializeEvent(pEvt, foo, foo2)
#define KeReleaseSpinLock(sl, irql)
#define ExConvertExclusiveToSharedLite(res)
#define KeSetEvent(pEvt, foo, foo2)
#define KeAcquireSpinLock(sl, irql)
#define ExAcquireResourceExclusiveLite(res, wait)
#define ExDeleteResourceLite(res)
#define RemoveHeadList(ListHead)
#define InitializeListHead(ListHead)
#define ExAcquireResourceSharedLite(res, wait)
#define KeInitializeSpinLock(sl)
VOID NTAPI KeClearEvent(IN PKEVENT Event)
PVOID NTAPI ExAllocatePoolWithTagPriority(IN POOL_TYPE PoolType, IN SIZE_T NumberOfBytes, IN ULONG Tag, IN EX_POOL_PRIORITY Priority)
#define ClearFlag(_F, _SF)
#define BooleanFlagOn(F, SF)
IN PFCB IN VBO OUT PLBO OUT PULONG OUT PBOOLEAN Allocated
struct _NON_PAGED_FCB NON_PAGED_FCB
#define FCB_STATE_DELETE_ON_CLOSE
#define FCB_STATE_PAGING_FILE
struct _SRV_OPEN SRV_OPEN
#define FCB_STATE_WRITECACHING_ENABLED
#define FCB_STATE_BUFFERING_STATE_CHANGE_PENDING
struct _NET_ROOT NET_ROOT
#define RxDereferenceNetRoot(NetRoot, LockHoldingState)
#define RxReferenceNetFobx(Fobx)
#define RxTransitionSrvCall(S, C)
struct _SRV_CALL * PSRV_CALL
#define RxDereferenceSrvOpen(SrvOpen, LockHoldingState)
#define RxTransitionVNetRoot(V, C)
#define RDBSS_REF_TRACK_SRVOPEN
#define RxWaitForStableSrvCall(S, R)
#define RxReferenceVNetRoot(VNetRoot)
#define FCB_STATE_TIME_AND_SIZE_ALREADY_SET
#define RxDereferenceNetFcb(Fcb)
#define FCB_STATE_SPECIAL_PATH
struct _V_NET_ROOT V_NET_ROOT
#define RxReferenceNetRoot(NetRoot)
#define SRVOPEN_FLAG_ENCLOSED_ALLOCATED
#define FCB_STATE_BUFFERSTATE_CHANGING
#define FOBX_FLAG_MARKED_AS_DORMANT
#define NETROOT_FLAG_NAME_ALREADY_REMOVED
#define SRVOPEN_FLAG_FOBX_USED
#define FCB_STATE_NAME_ALREADY_REMOVED
#define FOBX_FLAG_ENCLOSED_ALLOCATED
#define FCB_STATE_READCACHING_ENABLED
#define FCB_STATE_ORPHANED
@ RX_FCBTRACKER_CASE_NULLCONTEXT
@ RX_FCBTRACKER_CASE_NORMAL
@ RX_FCBTRACKER_CASE_CBS_WAIT_CONTEXT
@ RX_FCBTRACKER_CASE_CBS_CONTEXT
#define RDBSS_REF_TRACK_NETFCB
struct _V_NET_ROOT * PV_NET_ROOT
#define PRINT_REF_COUNT(TYPE, Count)
#define FCB_STATE_FAKEFCB
#define FCB_STATE_SRVOPEN_USED
#define RDBSS_REF_TRACK_SRVCALL
#define RxReferenceNetFcb(Fcb)
#define FCB_STATE_FOBX_USED
struct _SRV_OPEN * PSRV_OPEN
#define RDBSS_REF_TRACK_NETROOT
#define RxTransitionNetRoot(N, C)
struct _SRV_CALL SRV_CALL
#define FCB_STATE_FILETIMECACHEING_ENABLED
#define RxWaitForStableNetRoot(N, R)
#define FOBX_FLAG_UNC_NAME
#define RDBSS_REF_TRACK_NETFOBX
#define RDBSS_REF_TRACK_VNETROOT
#define RxDereferenceAndFinalizeNetFcb(Fcb, RxContext, RecursiveFinalize, ForceFinalize)
struct _NET_ROOT * PNET_ROOT
enum _RX_FCBTRACKER_CASES RX_FCBTRACKER_CASES
#define RxReferenceSrvOpen(SrvOpen)
#define FOBX_FLAG_FREE_UNICODE
#define FCB_STATE_BUFFERING_STATE_MASK
#define RX_PRINT_REF_TRACKING
#define FCB_STATE_ADDEDBACKSLASH
#define FCB_STATE_COLLAPSING_ENABLED
#define ASSERT_CORRECT_FCB_STRUCTURE(Fcb)
#define RxWaitForStableVNetRoot(V, R)
#define FOBX_FLAG_SRVOPEN_CLOSED
#define RxReferenceSrvCall(SrvCall)
#define RX_LOG_REF_TRACKING
#define FCB_STATE_LOCK_BUFFERING_ENABLED
#define NETROOT_FLAG_FINALIZATION_IN_PROGRESS
#define RxDereferenceNetFobx(Fobx, LockHoldingState)
#define RxDereferenceVNetRoot(VNetRoot, LockHoldingState)
#define RxDereferenceSrvCall(SrvCall, LockHoldingState)
#define RxAcquireFcbTableLockExclusive(T, W)
#define RX_FCB_TABLE_NUMBER_OF_HASH_BUCKETS
#define RxIsFcbTableLockExclusive(T)
struct _RX_FCB_TABLE RX_FCB_TABLE
#define RxReleaseFcbTableLock(T)
VOID NTAPI FsRtlInitializeFileLock(IN PFILE_LOCK FileLock, IN PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine OPTIONAL, IN PUNLOCK_ROUTINE UnlockRoutine OPTIONAL)
VOID NTAPI FsRtlUninitializeFileLock(IN PFILE_LOCK FileLock)
IN OUT PLONG IN OUT PLONG Addend IN OUT PLONG IN LONG IN OUT PLONG IN LONG Increment IN PNDIS_RW_LOCK Lock IN PNDIS_RW_LOCK IN PLOCK_STATE LockState
VOID NTAPI FsRtlTeardownPerStreamContexts(IN PFSRTL_ADVANCED_FCB_HEADER AdvFcbHeader)
_Inout_opt_ PUNICODE_STRING Extension
_Must_inspect_result_ _In_ PFLT_CALLBACK_DATA _In_ PFLT_DEFERRED_IO_WORKITEM_ROUTINE WorkerRoutine
#define FILE_CREATE_TREE_CONNECTION
#define FILE_OPEN_FOR_BACKUP_INTENT
_Must_inspect_result_ _Out_ PLARGE_INTEGER FileSize
#define FSRTL_CACHE_TOP_LEVEL_IRP
#define FSRTL_FLAG_ACQUIRE_MAIN_RSRC_SH
BOOLEAN NTAPI CcPurgeCacheSection(IN PSECTION_OBJECT_POINTERS SectionObjectPointer, IN OPTIONAL PLARGE_INTEGER FileOffset, IN ULONG Length, IN BOOLEAN UninitializeCacheMaps)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
VOID FASTCALL ExAcquireFastMutex(IN PFAST_MUTEX FastMutex)
VOID FASTCALL ExReleaseFastMutex(IN PFAST_MUTEX FastMutex)
NTSYSAPI void WINAPI DbgBreakPoint(void)
#define EXCEPTION_EXECUTE_HANDLER
#define InterlockedExchangeAdd
#define InterlockedCompareExchange
#define Add2Ptr(PTR, INC)
IoSetCancelRoutine(Irp, CancelRoutine)
#define RxLowIoIsMdlLocked(MDL)
VOID NTAPI MmProbeAndLockPages(IN PMDL Mdl, IN KPROCESSOR_MODE AccessMode, IN LOCK_OPERATION Operation)
MM_SYSTEMSIZE NTAPI MmQuerySystemSize(VOID)
#define ExFreePoolWithTag(_P, _T)
enum _RX_BLOCK_CONDITION RX_BLOCK_CONDITION
#define RDBSS_MANAGE_SRV_OPEN_EXTENSION
NTSTATUS(NTAPI * PLOWIO_COMPLETION_ROUTINE)(_In_ PRX_CONTEXT RxContext)
#define RxShouldPostCompletion()
enum _RX_BLOCK_CONDITION * PRX_BLOCK_CONDITION
#define RDBSS_MANAGE_FOBX_EXTENSION
@ LOWIO_OP_NOTIFY_CHANGE_DIRECTORY
@ LOWIO_OP_UNLOCK_MULTIPLE
#define RDBSS_MANAGE_FCB_EXTENSION
#define LOWIO_CONTEXT_FLAG_SYNCCALL
#define RDBSS_MANAGE_V_NET_ROOT_EXTENSION
#define StableCondition(X)
#define LOWIO_READWRITEFLAG_PAGING_IO
#define RDBSS_MANAGE_NET_ROOT_EXTENSION
#define RDBSS_MANAGE_SRV_CALL_EXTENSION
#define LOWIO_CONTEXT_FLAG_CAN_COMPLETE_AT_DPC_LEVEL
struct _MRX_FOBX_ * PMRX_FOBX
#define SRVOPEN_FLAG_BUFFERING_STATE_CHANGE_PENDING
#define SRVCALL_FLAG_CASE_INSENSITIVE_FILENAMES
#define VNETROOT_FLAG_CSCAGENT_INSTANCE
struct _MRX_NET_ROOT_ * PMRX_NET_ROOT
#define NETROOT_FLAG_SUPPORTS_SYMBOLIC_LINKS
#define SRVCALL_FLAG_CASE_INSENSITIVE_NETROOTS
#define SRVCALL_FLAG_FORCE_FINALIZED
#define SRVOPEN_FLAG_FILE_DELETED
struct _MRX_V_NET_ROOT_ * PMRX_V_NET_ROOT
#define SRVOPEN_FLAG_CLOSED
#define FOBX_FLAG_BACKUP_INTENT
struct _MRX_FCB_ * PMRX_FCB
struct _MRX_SRV_CALL_ * PMRX_SRV_CALL
#define NET_ROOT_MAILSLOT
#define SRVOPEN_FLAG_BUFFERING_STATE_CHANGE_REQUESTS_PURGED
#define SRVOPEN_FLAG_CLOSE_DELAYED
#define SRVOPEN_FLAG_FILE_RENAMED
__in UCHAR __in POWER_STATE __in_opt PVOID __in PIO_STATUS_BLOCK IoStatus
_In_ PNDIS_STRING _In_ PNDIS_STRING _Out_ PDEVICE_OBJECT * pDeviceObject
NTSYSAPI NTSTATUS NTAPI ZwClose(_In_ HANDLE Handle)
_In_ const STRING _In_ BOOLEAN CaseInsensitive
NTSYSAPI ULONG NTAPI DbgPrompt(_In_z_ PCCH Prompt, _Out_writes_bytes_(MaximumResponseLength) PCH Response, _In_ ULONG MaximumResponseLength)
NTSYSAPI VOID NTAPI RtlCaptureContext(_Out_ PCONTEXT ContextRecord)
VOID NTAPI MiniStatus(IN NDIS_HANDLE MiniportHandle, IN NDIS_STATUS GeneralStatus, IN PVOID StatusBuffer, IN UINT StatusBufferSize)
WCHAR NTAPI RtlUpcaseUnicodeChar(_In_ WCHAR Source)
#define THREAD_ALL_ACCESS
#define PROCESS_ALL_ACCESS
NTSYSAPI BOOLEAN NTAPI RtlEqualUnicodeString(PUNICODE_STRING String1, PUNICODE_STRING String2, BOOLEAN CaseInSensitive)
#define METHOD_OUT_DIRECT
__GNU_EXTENSION typedef __int64 * PLONGLONG
IN ULONG IN UCHAR Condition
_In_ ULONG _In_ ULONG _In_ ULONG Length
_IRQL_requires_same_ _In_ PLSA_STRING _In_ SECURITY_LOGON_TYPE _In_ ULONG _In_ ULONG _In_opt_ PTOKEN_GROUPS _In_ PTOKEN_SOURCE _Out_ PVOID _Out_ PULONG _Inout_ PLUID LogonId
VOID FASTCALL ExReleaseFastMutexUnsafe(IN OUT PFAST_MUTEX FastMutex)
VOID FASTCALL ExAcquireFastMutexUnsafe(IN OUT PFAST_MUTEX FastMutex)
BOOLEAN NTAPI ExAcquireSharedWaitForExclusive(IN PERESOURCE Resource, IN BOOLEAN Wait)
BOOLEAN NTAPI ExAcquireSharedStarveExclusive(IN PERESOURCE Resource, IN BOOLEAN Wait)
VOID FASTCALL ExReleaseResourceLite(IN PERESOURCE Resource)
BOOLEAN NTAPI FsRtlIsNtstatusExpected(IN NTSTATUS NtStatus)
#define IoCompleteRequest
BOOLEAN NTAPI IoIsOperationSynchronous(IN PIRP Irp)
VOID NTAPI IoReleaseCancelSpinLock(IN KIRQL Irql)
PEPROCESS NTAPI IoGetCurrentProcess(VOID)
VOID NTAPI IoAcquireCancelSpinLock(OUT PKIRQL Irql)
LONG NTAPI KeInsertQueue(IN PKQUEUE Queue, IN PLIST_ENTRY Entry)
VOID NTAPI KeInitializeQueue(IN PKQUEUE Queue, IN ULONG Count OPTIONAL)
PLIST_ENTRY NTAPI KeRemoveQueue(IN PKQUEUE Queue, IN KPROCESSOR_MODE WaitMode, IN PLARGE_INTEGER Timeout OPTIONAL)
NTSTATUS NTAPI PsTerminateSystemThread(IN NTSTATUS ExitStatus)
POBJECT_TYPE PsThreadType
NTSTATUS NTAPI PsCreateSystemThread(OUT PHANDLE ThreadHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, IN HANDLE ProcessHandle, IN PCLIENT_ID ClientId, IN PKSTART_ROUTINE StartRoutine, IN PVOID StartContext)
NTSTATUS NTAPI SeQueryAuthenticationIdToken(_In_ PACCESS_TOKEN Token, _Out_ PLUID LogonId)
Queries the authentication ID of an access token.
NTSTATUS NTAPI SeQuerySessionIdToken(_In_ PACCESS_TOKEN Token, _Out_ PULONG pSessionId)
Queries the session ID of an access token.
BOOLEAN NTAPI SeTokenIsRestricted(_In_ PACCESS_TOKEN Token)
Determines if a token is restricted or not, based upon the token flags.
#define RxIsResourceOwnershipStateExclusive(Resource)
#define RxAllocatePoolWithTag
#define STATUS_CONNECTION_IN_USE
#define STATUS_DELETE_PENDING
#define STATUS_BAD_NETWORK_NAME
#define STATUS_FILE_CLOSED
#define STATUS_FILE_RENAMED
#define STATUS_BAD_NETWORK_PATH
#define STATUS_CONNECTION_ACTIVE
#define STATUS_LOCK_NOT_GRANTED
#define STATUS_FILES_OPEN
NTSTATUS NTAPI ObReferenceObjectByPointer(IN PVOID Object, IN ACCESS_MASK DesiredAccess, IN POBJECT_TYPE ObjectType, IN KPROCESSOR_MODE AccessMode)
struct _RX_PREFIX_ENTRY RX_PREFIX_ENTRY
struct _RX_PREFIX_TABLE RX_PREFIX_TABLE
#define RX_PREFIX_TABLE_DEFAULT_LENGTH
#define RxAcquirePrefixTableLockShared(T, W)
#define RxIsPrefixTableLockAcquired(T)
#define RxIsPrefixTableLockExclusive(T)
#define RxAcquirePrefixTableLockExclusive(T, W)
#define RxReleasePrefixTableLock(T)
#define FILE_DEVICE_NAMED_PIPE
#define _SEH2_AbnormalTermination()
#define _SEH2_GetExceptionCode()
#define _SEH2_EXCEPT(...)
#define IRP_MJ_DIRECTORY_CONTROL
#define IRP_MN_NOTIFY_CHANGE_DIRECTORY
#define IRP_MJ_DEVICE_CONTROL
#define IRP_MJ_SET_INFORMATION
#define IRP_MJ_QUERY_INFORMATION
VOID NTAPI KeBugCheckEx(_In_ ULONG BugCheckCode, _In_ ULONG_PTR BugCheckParameter1, _In_ ULONG_PTR BugCheckParameter2, _In_ ULONG_PTR BugCheckParameter3, _In_ ULONG_PTR BugCheckParameter4)
VOID RxExclusivePrefixTableLockToShared(PRX_PREFIX_TABLE Table)
VOID __RxItsTheSameContext(_In_ PRX_CONTEXT RxContext, _In_ ULONG CapturedRxContextSerialNumber, _In_ ULONG Line, _In_ PCSTR File)
VOID RxpDiscardChangeBufferingStateRequests(_Inout_ PLIST_ENTRY DiscardedRequests)
VOID RxPurgeFcb(IN PFCB Fcb)
RX_SPIN_LOCK RxStrucSupSpinLock
PV_NET_ROOT RxCreateVNetRoot(IN PRX_CONTEXT RxContext, IN PNET_ROOT NetRoot, IN PUNICODE_STRING CanonicalName, IN PUNICODE_STRING LocalNetRootName, IN PUNICODE_STRING FilePath, IN PRX_CONNECTION_ID RxConnectionId)
VOID RxpTrackReference(_In_ ULONG TraceType, _In_ PCSTR FileName, _In_ ULONG Line, _In_ PVOID Instance)
VOID NTAPI RxProcessChangeBufferingStateRequests(_In_ PVOID SrvCall)
NTSTATUS RxFindOrConstructVirtualNetRoot(IN PRX_CONTEXT RxContext, IN PUNICODE_STRING CanonicalName, IN NET_ROOT_TYPE NetRootType, IN PUNICODE_STRING RemainingName)
NTSTATUS NTAPI RxInitializeRxTimer(VOID)
PRX_PREFIX_ENTRY RxTableLookupName_ExactLengthMatch(IN PRX_PREFIX_TABLE ThisTable, IN PUNICODE_STRING Name, IN ULONG HashValue, IN PRX_CONNECTION_ID OPTIONAL RxConnectionId)
BOOLEAN RxFinalizeNetFobx(_Out_ PFOBX ThisFobx, _In_ BOOLEAN RecursiveFinalize, _In_ BOOLEAN ForceFinalize)
VOID RxAddVirtualNetRootToNetRoot(PNET_ROOT NetRoot, PV_NET_ROOT VNetRoot)
NTSTATUS __RxAcquireFcb(_Inout_ PFCB Fcb, _Inout_opt_ PRX_CONTEXT RxContext OPTIONAL, _In_ ULONG Mode)
NTSTATUS NTAPI RxLowIoSubmit(IN PRX_CONTEXT RxContext, IN PLOWIO_COMPLETION_ROUTINE CompletionRoutine)
VOID RxVerifyOperationIsLegal(IN PRX_CONTEXT RxContext)
NTSTATUS RxPurgeFobxFromCache(PFOBX FobxToBePurged)
VOID NTAPI RxResumeBlockedOperations_Serially(IN OUT PRX_CONTEXT RxContext, IN OUT PLIST_ENTRY BlockingIoQ)
NTSTATUS RxCheckVNetRootCredentials(PRX_CONTEXT RxContext, PV_NET_ROOT VNetRoot, PLUID LogonId, PUNICODE_STRING UserName, PUNICODE_STRING UserDomain, PUNICODE_STRING Password, ULONG Flags)
VOID RxInitializeLowIoPerFcbInfo(PLOWIO_PER_FCB_INFO LowIoPerFcbInfo)
NTSTATUS RxFindOrCreateConnections(_In_ PRX_CONTEXT RxContext, _In_ PUNICODE_STRING CanonicalName, _In_ NET_ROOT_TYPE NetRootType, _Out_ PUNICODE_STRING LocalNetRootName, _Out_ PUNICODE_STRING FilePathName, _Inout_ PLOCK_HOLDING_STATE LockState, _In_ PRX_CONNECTION_ID RxConnectionId)
VOID RxLockUserBuffer(IN PRX_CONTEXT RxContext, IN LOCK_OPERATION Operation, IN ULONG BufferLength)
NTSTATUS RxInitializeSrvCallParameters(IN PRX_CONTEXT RxContext, IN OUT PSRV_CALL SrvCall)
VOID RxUndoScavengerFinalizationMarking(PVOID Instance)
BOOLEAN RxIsThisACscAgentOpen(IN PRX_CONTEXT RxContext)
BOOLEAN DumpDispatchRoutine
VOID RxSynchronizeWithScavenger(IN PRX_CONTEXT RxContext)
VOID RxProcessChangeBufferingStateRequestsForSrvOpen(PSRV_OPEN SrvOpen)
VOID RxUninitializeVNetRootParameters(IN PUNICODE_STRING UserName, IN PUNICODE_STRING UserDomainName, IN PUNICODE_STRING Password, OUT PULONG Flags)
BOOLEAN NTAPI RxAcquireFcbForLazyWrite(PVOID Context, BOOLEAN Wait)
VOID RxExtractServerName(IN PUNICODE_STRING FilePathName, OUT PUNICODE_STRING SrvCallName, OUT PUNICODE_STRING RestOfName)
BOOLEAN RxContinueFromAssert
VOID RxpReleasePrefixTableLock(PRX_PREFIX_TABLE pTable, BOOLEAN ProcessBufferingStateChangeRequests)
FAST_MUTEX RxLowIoPagingIoSyncMutex
VOID RxOrphanSrvOpensForThisFcb(IN PFCB Fcb, IN PV_NET_ROOT ThisVNetRoot, IN BOOLEAN OrphanAll)
BOOLEAN NTAPI RxNoOpAcquire(IN PVOID Fcb, IN BOOLEAN Wait)
VOID NTAPI RxDereferenceAndDeleteRxContext_Real(IN PRX_CONTEXT RxContext)
VOID RxFinalizeFcbTable(IN OUT PRX_FCB_TABLE FcbTable)
FAST_MUTEX RxContextPerFileSerializationMutex
NTSTATUS RxInsertWorkQueueItem(PRDBSS_DEVICE_OBJECT pMRxDeviceObject, WORK_QUEUE_TYPE WorkQueueType, PRX_WORK_QUEUE_ITEM WorkQueueItem)
PNET_ROOT RxCreateNetRoot(IN PSRV_CALL SrvCall, IN PUNICODE_STRING Name, IN ULONG NetRootFlags, IN PRX_CONNECTION_ID OPTIONAL RxConnectionId)
NTSTATUS RxFcbTableRemoveFcb(IN OUT PRX_FCB_TABLE FcbTable, IN OUT PFCB Fcb)
BOOLEAN RxFinalizeSrvCall(OUT PSRV_CALL ThisSrvCall, IN BOOLEAN RecursiveFinalize, IN BOOLEAN ForceFinalize)
VOID RxDereference(IN OUT PVOID Instance, IN LOCK_HOLDING_STATE LockHoldingState)
NTSTATUS RxLowIoCompletionTail(IN PRX_CONTEXT RxContext)
NTSTATUS RxSpinUpWorkerThread(PRX_WORK_QUEUE WorkQueue, PRX_WORKERTHREAD_ROUTINE Routine, PVOID Parameter)
VOID RxAssert(PVOID Assert, PVOID File, ULONG Line, PVOID Message)
NTSTATUS RxInitializeBufferingManager(PSRV_CALL SrvCall)
BOOLEAN RxStopOnLoudCompletion
NTSTATUS RxInitializeWorkQueueDispatcher(PRX_WORK_QUEUE_DISPATCHER Dispatcher)
VOID RxSetFileSizeWithLock(IN OUT PFCB Fcb, IN PLONGLONG FileSize)
BOOLEAN RxFinalizeNetRoot(OUT PNET_ROOT ThisNetRoot, IN BOOLEAN RecursiveFinalize, IN BOOLEAN ForceFinalize)
NTSTATUS RxpLookupSrvOpenForRequestLite(IN PSRV_CALL SrvCall, IN OUT PCHANGE_BUFFERING_STATE_REQUEST Request)
VOID NTAPI RxSpinUpRequestsDispatcher(PVOID Dispatcher)
VOID NTAPI RxInitializeContext(IN PIRP Irp, IN PRDBSS_DEVICE_OBJECT RxDeviceObject, IN ULONG InitialContextFlags, IN OUT PRX_CONTEXT RxContext)
ULONG ReadAheadGranularity
VOID RxResumeBlockedOperations_ALL(IN OUT PRX_CONTEXT RxContext)
VOID NTAPI RxCreateNetRootCallBack(IN PMRX_CREATENETROOT_CONTEXT CreateNetRootContext)
BOOLEAN RxSrvCallConstructionDispatcherActive
LARGE_INTEGER RxTimerInterval
NTSTATUS RxCompleteRequest(PRX_CONTEXT Context, NTSTATUS Status)
VOID NTAPI RxFinishSrvCallConstructionDispatcher(IN PVOID Context)
VOID RxInitializePrefixTable(IN OUT PRX_PREFIX_TABLE ThisTable, IN ULONG TableSize OPTIONAL, IN BOOLEAN CaseInsensitiveMatch)
VOID RxMarkFobxOnClose(PFOBX Fobx)
VOID RxScavengeFobxsForNetRoot(PNET_ROOT NetRoot, PFCB PurgingFcb, BOOLEAN SynchronizeWithScavenger)
VOID RxOrphanSrvOpens(IN PV_NET_ROOT ThisVNetRoot)
VOID NTAPI RxCreateSrvCallCallBack(IN OUT PMRX_SRVCALL_CALLBACK_CONTEXT Context)
LARGE_INTEGER RxWorkQueueWaitInterval[RxMaximumWorkQueue]
VOID RxRemoveVirtualNetRootFromNetRoot(PNET_ROOT NetRoot, PV_NET_ROOT VNetRoot)
VOID NTAPI RxReleaseFileForNtCreateSection(PFILE_OBJECT FileObject)
NTSTATUS NTAPI RxAcquireExclusiveFcbResourceInMRx(_Inout_ PMRX_FCB Fcb)
PVOID RxNewMapUserBuffer(PRX_CONTEXT RxContext)
PVOID RxAllocateObject(NODE_TYPE_CODE NodeType, PMINIRDR_DISPATCH MRxDispatch, ULONG NameLength)
NTSTATUS RxPurgeFcbInSystemCache(IN PFCB Fcb, IN PLARGE_INTEGER FileOffset OPTIONAL, IN ULONG Length, IN BOOLEAN UninitializeCacheMaps, IN BOOLEAN FlushFile)
PVOID RxPrefixTableLookupName(IN PRX_PREFIX_TABLE ThisTable, IN PUNICODE_STRING CanonicalName, OUT PUNICODE_STRING RemainingName, IN PRX_CONNECTION_ID ConnectionId)
VOID __RxReleaseFcbForThread(_Inout_opt_ PRX_CONTEXT RxContext, _Inout_ PMRX_FCB MrxFcb, _In_ ERESOURCE_THREAD ResourceThreadId)
VOID RxpMarkInstanceForScavengedFinalization(PVOID Instance)
VOID NTAPI RxReinitializeContext(IN OUT PRX_CONTEXT RxContext)
NTSTATUS RxInitializeMRxDispatcher(IN OUT PRDBSS_DEVICE_OBJECT pMRxDeviceObject)
NTSTATUS NTAPI RxReleaseForCcFlush(PFILE_OBJECT FileObject, PDEVICE_OBJECT DeviceObject)
PVOID RxAllocateFcbObject(PRDBSS_DEVICE_OBJECT RxDeviceObject, NODE_TYPE_CODE NodeType, POOL_TYPE PoolType, ULONG NameSize, PVOID AlreadyAllocatedObject)
NTSTATUS NTAPI RxPostToWorkerThread(_In_ PRDBSS_DEVICE_OBJECT pMRxDeviceObject, _In_ WORK_QUEUE_TYPE WorkQueueType, _In_ PRX_WORK_QUEUE_ITEM pWorkQueueItem, _In_ PRX_WORKERTHREAD_ROUTINE Routine, _In_ PVOID pContext)
VOID RxGatherRequestsForSrvOpen(IN OUT PSRV_CALL SrvCall, IN PSRV_OPEN SrvOpen, IN OUT PLIST_ENTRY RequestsListHead)
VOID RxScavengerFinalizeEntries(PRDBSS_DEVICE_OBJECT DeviceObject)
VOID RxTrackPagingIoResource(_Inout_ PVOID Instance, _In_ ULONG Type, _In_ ULONG Line, _In_ PCSTR File)
NTSTATUS NTAPI RxChangeBufferingState(PSRV_OPEN SrvOpen, PVOID Context, BOOLEAN ComputeNewState)
VOID RxInitializeFcbTable(IN OUT PRX_FCB_TABLE FcbTable, IN BOOLEAN CaseInsensitiveMatch)
BOOLEAN RxpAcquirePrefixTableLockExclusive(PRX_PREFIX_TABLE pTable, BOOLEAN Wait, BOOLEAN ProcessBufferingStateChangeRequests)
VOID RxReference(IN OUT PVOID Instance)
PEPROCESS NTAPI RxGetRDBSSProcess(VOID)
VOID RxCompleteSrvOpenKeyAssociation(IN OUT PSRV_OPEN SrvOpen)
PSRV_CALL RxCreateSrvCall(IN PRX_CONTEXT RxContext, IN PUNICODE_STRING Name, IN PUNICODE_STRING InnerNamePrefix OPTIONAL, IN PRX_CONNECTION_ID RxConnectionId)
RX_DISPATCHER RxDispatcher
VOID RxInitializePurgeSyncronizationContext(PPURGE_SYNCHRONIZATION_CONTEXT PurgeSyncronizationContext)
BOOLEAN RxFinalizeNetFcb(OUT PFCB ThisFcb, IN BOOLEAN RecursiveFinalize, IN BOOLEAN ForceFinalize, IN LONG ReferenceCount)
PRDBSS_DEVICE_OBJECT RxGetDeviceObjectOfInstance(PVOID Instance)
VOID RxCancelBlockingOperation(IN OUT PRX_CONTEXT RxContext)
VOID RxpProcessChangeBufferingStateRequests(PSRV_CALL SrvCall, BOOLEAN UpdateHandlerState)
PFCB RxCreateNetFcb(IN PRX_CONTEXT RxContext, IN PV_NET_ROOT VNetRoot, IN PUNICODE_STRING Name)
VOID RxpDispatchChangeBufferingStateRequests(PSRV_CALL SrvCall, PSRV_OPEN SrvOpen, PLIST_ENTRY DiscardedRequests)
VOID RxMarkFobxOnCleanup(PFOBX pFobx, PBOOLEAN NeedPurge)
ULONG RxTableComputeHashValue(IN PUNICODE_STRING Name)
BOOLEAN RxpTrackDereference(_In_ ULONG TraceType, _In_ PCSTR FileName, _In_ ULONG Line, _In_ PVOID Instance)
VOID NTAPI RxReleaseFcbFromLazyWrite(PVOID Context)
VOID RxPurgeChangeBufferingStateRequestsForSrvOpen(PSRV_OPEN SrvOpen)
BOOLEAN RxpDereferenceAndFinalizeNetFcb(OUT PFCB ThisFcb, IN PRX_CONTEXT RxContext, IN BOOLEAN RecursiveFinalize, IN BOOLEAN ForceFinalize)
PFCB RxFcbTableLookupFcb(IN PRX_FCB_TABLE FcbTable, IN PUNICODE_STRING Path)
VOID RxOrphanThisFcb(PFCB Fcb)
volatile ULONG RxContextSerialNumberCounter
NTSTATUS NTAPI RxInitializeDispatcher(VOID)
RX_WORK_QUEUE_DISPATCHER RxDispatcherWorkQueues
VOID NTAPI RxNoOpRelease(IN PVOID Fcb)
NTSTATUS RxConstructNetRoot(IN PRX_CONTEXT RxContext, IN PSRV_CALL SrvCall, IN PNET_ROOT NetRoot, IN PV_NET_ROOT VirtualNetRoot, OUT PLOCK_HOLDING_STATE LockHoldingState)
VOID NTAPI RxBootstrapWorkerThreadDispatcher(IN PVOID WorkQueue)
VOID RxGetFileSizeWithLock(IN PFCB Fcb, OUT PLONGLONG FileSize)
LIST_ENTRY RxRecurrentWorkItemsList
PMRX_FOBX NTAPI RxCreateNetFobx(OUT PRX_CONTEXT RxContext, IN PMRX_SRV_OPEN MrxSrvOpen)
VOID RxRemovePrefixTableEntry(IN OUT PRX_PREFIX_TABLE ThisTable, IN OUT PRX_PREFIX_ENTRY Entry)
NTSTATUS RxPurgeRelatedFobxs(PNET_ROOT NetRoot, PRX_CONTEXT RxContext, BOOLEAN AttemptFinalization, PFCB PurgingFcb)
ULONG RdbssReferenceTracingValue
VOID RxpWorkerThreadDispatcher(IN PRX_WORK_QUEUE WorkQueue, IN PLARGE_INTEGER WaitInterval)
NTSTATUS RxFlushFcbInSystemCache(IN PFCB Fcb, IN BOOLEAN SynchronizeWithLazyWriter)
NTSTATUS NTAPI RxDispatchToWorkerThread(IN PRDBSS_DEVICE_OBJECT pMRxDeviceObject, IN WORK_QUEUE_TYPE WorkQueueType, IN PRX_WORKERTHREAD_ROUTINE Routine, IN PVOID pContext)
VOID RxFreeFcbObject(PVOID Object)
VOID RxpScavengeFobxs(PRDBSS_SCAVENGER Scavenger, PLIST_ENTRY FobxToScavenge)
PVOID NTAPI _RxAllocatePoolWithTag(_In_ POOL_TYPE PoolType, _In_ SIZE_T NumberOfBytes, _In_ ULONG Tag)
VOID NTAPI RxAcquireFileForNtCreateSection(PFILE_OBJECT FileObject)
VOID RxRemoveNameNetFcb(OUT PFCB ThisFcb)
NTSTATUS RxFinishSrvCallConstruction(PMRX_SRVCALLDOWN_STRUCTURE Calldown)
NTSTATUS RxInitializeVNetRootParameters(PRX_CONTEXT RxContext, OUT LUID *LogonId, OUT PULONG SessionId, OUT PUNICODE_STRING *UserNamePtr, OUT PUNICODE_STRING *UserDomainNamePtr, OUT PUNICODE_STRING *PasswordPtr, OUT PULONG Flags)
PRX_PREFIX_ENTRY RxPrefixTableInsertName(IN OUT PRX_PREFIX_TABLE ThisTable, IN OUT PRX_PREFIX_ENTRY ThisEntry, IN PVOID Container, IN PULONG ContainerRefCount, IN USHORT CaseInsensitiveLength, IN PRX_CONNECTION_ID ConnectionId)
VOID RxSpinUpWorkerThreads(PRX_WORK_QUEUE WorkQueue)
VOID NTAPI RxpDestroySrvCall(IN PVOID Context)
VOID RxRemoveOperationFromBlockingQueue(IN OUT PRX_CONTEXT RxContext)
LIST_ENTRY RxSrvCalldownList
VOID RxpUndoScavengerFinalizationMarking(PVOID Instance)
VOID RxUpdateCondition(IN RX_BLOCK_CONDITION NewConditionValue, OUT PRX_BLOCK_CONDITION Condition, IN OUT PLIST_ENTRY TransitionWaitList)
volatile LONG RxNumberOfActiveFcbs
VOID RxWaitForStableCondition(IN PRX_BLOCK_CONDITION Condition, IN OUT PLIST_ENTRY TransitionWaitList, IN OUT PRX_CONTEXT RxContext, OUT NTSTATUS *AsyncStatus OPTIONAL)
VOID NTAPI RxInitializeDebugSupport(VOID)
NTSTATUS NTAPI RxLowIoPopulateFsctlInfo(IN PRX_CONTEXT RxContext)
VOID NTAPI _RxFreePool(_In_ PVOID Buffer)
BOOLEAN RxScavengeRelatedFobxs(PFCB Fcb)
LARGE_INTEGER RxSpinUpDispatcherWaitInterval
VOID __RxReleaseFcb(_Inout_opt_ PRX_CONTEXT RxContext, _Inout_ PMRX_FCB MrxFcb)
BOOLEAN RxFinalizeSrvOpen(OUT PSRV_OPEN ThisSrvOpen, IN BOOLEAN RecursiveFinalize, IN BOOLEAN ForceFinalize)
BOOLEAN RxPurgeFobx(PFOBX pFobx)
VOID RxInitiateSrvOpenKeyAssociation(IN OUT PSRV_OPEN SrvOpen)
NTSTATUS RxFcbTableInsertFcb(IN OUT PRX_FCB_TABLE FcbTable, IN OUT PFCB Fcb)
VOID NTAPI RxDispatchChangeBufferingStateRequests(PVOID Context)
LONG RxpReferenceNetFcb(PFCB Fcb)
NTSTATUS RxConstructVirtualNetRoot(IN PRX_CONTEXT RxContext, IN PUNICODE_STRING CanonicalName, IN NET_ROOT_TYPE NetRootType, OUT PV_NET_ROOT *VirtualNetRootPointer, OUT PLOCK_HOLDING_STATE LockHoldingState, OUT PRX_CONNECTION_ID RxConnectionId)
LIST_ENTRY RxTimerQueueHead
VOID RxPrepareRequestForReuse(PCHANGE_BUFFERING_STATE_REQUEST Request)
BOOLEAN NTAPI RxAcquireFcbForReadAhead(PVOID Context, BOOLEAN Wait)
NTSTATUS RxTearDownBufferingManager(PSRV_CALL SrvCall)
VOID NTAPI RxWorkItemDispatcher(PVOID Context)
VOID NTAPI RxReleaseFcbFromReadAhead(PVOID Context)
NTSTATUS NTAPI RxPostOneShotTimerRequest(IN PRDBSS_DEVICE_OBJECT pDeviceObject, IN PRX_WORK_ITEM pWorkItem, IN PRX_WORKERTHREAD_ROUTINE Routine, IN PVOID pContext, IN LARGE_INTEGER TimeInterval)
VOID RxCompleteRequest_Real(IN PRX_CONTEXT RxContext, IN PIRP Irp, IN NTSTATUS Status)
PVOID RxMapSystemBuffer(IN PRX_CONTEXT RxContext)
BOOLEAN RxScavengeVNetRoots(PRDBSS_DEVICE_OBJECT RxDeviceObject)
NTSTATUS NTAPI RxFinalizeConnection(IN OUT PNET_ROOT NetRoot, IN OUT PV_NET_ROOT VNetRoot OPTIONAL, IN LOGICAL ForceFilesClosed)
PSRV_OPEN RxCreateSrvOpen(IN PV_NET_ROOT VNetRoot, IN OUT PFCB Fcb)
VOID NTAPI RxInitializeLowIoContext(OUT PLOWIO_CONTEXT LowIoContext, IN ULONG Operation)
NTSTATUS RxConstructSrvCall(IN PRX_CONTEXT RxContext, IN PSRV_CALL SrvCall, OUT PLOCK_HOLDING_STATE LockHoldingState)
VOID NTAPI RxPrepareContextForReuse(IN OUT PRX_CONTEXT RxContext)
VOID NTAPI _RxFreePoolWithTag(_In_ PVOID Buffer, _In_ ULONG Tag)
VOID RxFreeObject(PVOID pObject)
LONG RxpDereferenceNetFcb(PFCB Fcb)
VOID NTAPI RxFinishFcbInitialization(IN OUT PMRX_FCB Fcb, IN RX_FILE_TYPE FileType, IN PFCB_INIT_PACKET InitPacket OPTIONAL)
VOID NTAPI RxTimerDispatch(_In_ struct _KDPC *Dpc, _In_opt_ PVOID DeferredContext, _In_opt_ PVOID SystemArgument1, _In_opt_ PVOID SystemArgument2)
VOID RxInitializeWorkQueue(PRX_WORK_QUEUE WorkQueue, WORK_QUEUE_TYPE WorkQueueType, ULONG MaximumNumberOfWorkerThreads, ULONG MinimumNumberOfWorkerThreads)
VOID NTAPI RxScavengerTimerRoutine(PVOID Context)
ULONG RxTableComputePathHashValue(IN PUNICODE_STRING Name)
VOID RxProcessFcbChangeBufferingStateRequest(PFCB Fcb)
NTSTATUS NTAPI RxAcquireForCcFlush(PFILE_OBJECT FileObject, PDEVICE_OBJECT DeviceObject)
PVOID RxTableLookupName(IN PRX_PREFIX_TABLE ThisTable, IN PUNICODE_STRING Name, OUT PUNICODE_STRING RemainingName, IN PRX_CONNECTION_ID OPTIONAL RxConnectionId)
BOOLEAN RxpAcquirePrefixTableLockShared(PRX_PREFIX_TABLE pTable, BOOLEAN Wait, BOOLEAN ProcessBufferingStateChangeRequests)
BOOLEAN RxFinalizeVNetRoot(OUT PV_NET_ROOT ThisVNetRoot, IN BOOLEAN RecursiveFinalize, IN BOOLEAN ForceFinalize)
PRX_CONTEXT NTAPI RxCreateRxContext(IN PIRP Irp, IN PRDBSS_DEVICE_OBJECT RxDeviceObject, IN ULONG InitialContextFlags)
#define RxWaitSync(RxContext)
NPAGED_LOOKASIDE_LIST RxContextLookasideList
@ RX_CONTEXT_FLAG_RECURSIVE_CALL
@ RX_CONTEXT_FLAG_CREATE_MAILSLOT
@ RX_CONTEXT_FLAG_THIS_DEVICE_TOP_LEVEL
@ RX_CONTEXT_FLAG_NO_PREPOSTING_NEEDED
@ RX_CONTEXT_FLAG_FROM_POOL
@ RX_CONTEXT_FLAG_CANCELLED
@ RX_CONTEXT_FLAG_POST_ON_STABLE_CONDITION
@ RX_CONTEXT_FLAG_MUST_SUCCEED_ALLOCATED
@ RX_CONTEXT_FLAG_WRITE_THROUGH
@ RX_CONTEXT_FLAG_MUST_SUCCEED_NONBLOCKING
@ RX_CONTEXT_FLAG_BYPASS_VALIDOP_CHECK
@ RX_CONTEXT_FLAG_ASYNC_OPERATION
@ RX_CONTEXT_FLAG_NO_EXCEPTION_BREAKPOINT
@ RXCONTEXT_FLAG4LOWIO_PIPE_SYNC_OPERATION
FORCEINLINE PRX_CONTEXT RxRemoveFirstContextFromSerializationQueue(PLIST_ENTRY SerializationQueue)
#define RxSignalSynchronousWaiter(RxContext)
struct _RX_CONTEXT RX_CONTEXT
#define MINIRDR_CALL_THROUGH(STATUS, DISPATCH, FUNC, ARGLIST)
PIRP RxGetTopIrpIfRdbssIrp(VOID)
#define RxTransferListWithMutex(Destination, Source, Mutex)
#define MINIRDR_CALL(STATUS, CONTEXT, DISPATCH, FUNC, ARGLIST)
#define RX_CONTEXT_PRESERVED_FLAGS
BOOLEAN RxIsThisTheTopLevelIrp(_In_ PIRP Irp)
#define RX_CONTEXT_INITIALIZATION_FLAGS
NTSTATUS RxCancelNotifyChangeDirectoryRequestsForVNetRoot(PV_NET_ROOT VNetRoot, BOOLEAN ForceFilesClosed)
BOOLEAN RxTryToBecomeTheTopLevelIrp(_Inout_ PRX_TOPLEVELIRP_CONTEXT TopLevelContext, _In_ PIRP Irp, _In_ PRDBSS_DEVICE_OBJECT RxDeviceObject, _In_ BOOLEAN ForceTopLevel)
#define RxInsertContextInSerializationQueue(SerializationQueue, RxContext)
VOID RxUnwindTopLevelIrp(_Inout_ PRX_TOPLEVELIRP_CONTEXT TopLevelContext)
#define RxTransferList(Destination, Source)
PRDBSS_DEVICE_OBJECT RxGetTopDeviceObjectIfRdbssIrp(VOID)
#define RxDereferenceAndDeleteRxContext(RXCONTEXT)
@ RX_CONTEXT_CREATE_FLAG_SPECIAL_PATH
@ RX_CONTEXT_CREATE_FLAG_UNC_NAME
@ RX_CONTEXT_CREATE_FLAG_ADDEDBACKSLASH
PRDBSS_DEVICE_OBJECT RxFileSystemDeviceObject
LIST_ENTRY RxActiveContexts
#define RxReleaseSerializationMutex()
#define RxAcquireSerializationMutex()
#define RX_DIRCTL_POOLTAG
#define RX_NETROOT_POOLTAG
#define RX_NONPAGEDFCB_POOLTAG
#define RX_V_NETROOT_POOLTAG
#define RX_SRVCALL_POOLTAG
#define RxIsFcbAcquiredExclusive(Fcb)
VOID RxPrePostIrp(_In_ PVOID Context, _In_ PIRP Irp)
VOID RxpPrepareCreateContextForReuse(_In_ PRX_CONTEXT RxContext)
#define RxAcquireExclusiveFcb(R, F)
#define RxEqualConnectionId(C1, C2)
VOID NTAPI RxUnlockOperation(_In_ PVOID Context, _In_ PFILE_LOCK_INFO LockInfo)
NTSTATUS RxFsdPostRequest(_In_ PRX_CONTEXT RxContext)
#define FCB_MODE_EXCLUSIVE
#define RxReleasePagingIoResource(RxContext, Fcb)
#define CHANGE_BUFFERING_STATE_CONTEXT
#define FCB_MODE_SHARED_WAIT_FOR_EXCLUSIVE
#define RxReleaseFcb(R, F)
#define FCB_MODE_SHARED_STARVE_EXCLUSIVE
#define RX_GET_MRX_FCB(F)
#define RxTrackerUpdateHistory(R, F, O, L, F, S)
#define CHANGE_BUFFERING_STATE_CONTEXT_WAIT
#define RxIsFcbAcquired(Fcb)
#define RxAcquirePagingIoResource(RxContext, Fcb)
NTSTATUS NTAPI RxLockOperationCompletion(_In_ PVOID Context, _In_ PIRP Irp)
NTSTATUS RxCloseAssociatedSrvOpen(_In_ PFOBX Fobx, _In_opt_ PRX_CONTEXT RxContext)
enum _LOCK_HOLDING_STATE * PLOCK_HOLDING_STATE
enum _LOCK_HOLDING_STATE LOCK_HOLDING_STATE
#define RxMaximumWorkQueue
@ RxWorkQueueRundownInProgress
VOID(NTAPI * PRX_WORKERTHREAD_ROUTINE)(_In_ PVOID Context)
@ RDBSS_SCAVENGER_INACTIVE
@ RDBSS_SCAVENGER_DORMANT
#define RxInitializeScavengerEntry(ScavengerEntry)
#define DONT_ATTEMPT_FINALIZE_ON_PURGE
#define RxReleaseScavengerMutex()
#define RxAcquireScavengerMutex()
#define RDBSS_NTC_NETROOT
#define RDBSS_NTC_STORAGE_TYPE_UNKNOWN
#define RDBSS_NTC_STORAGE_TYPE_DIRECTORY
#define RX_SCAVENGER_MASK
#define RDBSS_NTC_OPENTARGETDIR_FCB
struct _NODE_TYPE_CODE_AND_SIZE * PNODE_TYPE_AND_SIZE
#define RDBSS_NTC_INTERNAL_SRVOPEN
#define RDBSS_NTC_SRVCALL
#define RDBSS_NTC_RX_CONTEXT
#define RDBSS_NTC_FCB_TABLE
#define RDBSS_NTC_STORAGE_TYPE_FILE
#define RDBSS_NTC_MINIRDR_DISPATCH
#define RDBSS_NTC_PREFIX_TABLE
enum _RX_FILE_TYPE RX_FILE_TYPE
#define RDBSS_STORAGE_NTC(x)
#define RDBSS_NTC_MAILSLOT
#define RDBSS_NTC_SPOOLFILE
#define RDBSS_NTC_V_NETROOT
#define RDBSS_NTC_SRVOPEN
#define NodeTypeIsFcb(FCB)
#define RDBSS_FILE_SYSTEM
#define RDBSS_NTC_FCB_TABLE_ENTRY
#define RDBSS_NTC_PREFIX_ENTRY
#define ZeroAndInitializeNodeType(Node, Type, Size)
#define RDBSS_NTC_NONPAGED_FCB
#define KeQueryTickCount(CurrentCount)
#define KeAcquireSpinLockAtDpcLevel(SpinLock)
#define KeReleaseSpinLockFromDpcLevel(SpinLock)
BOOLEAN NTAPI MmFlushImageSection(IN PSECTION_OBJECT_POINTERS SectionObjectPointer, IN MMFLUSH_TYPE FlushType)
#define STATUS_MORE_PROCESSING_REQUIRED
PULONG MinorVersion OPTIONAL
base of all file and directory entries
struct _FCB::@758::@761 Fcb
PKEVENT pBufferingStateChangeCompletedEvent
PSRV_OPEN InternalSrvOpen
PMINIRDR_DISPATCH MRxDispatch
union _FCB::@758 Specific
FSRTL_ADVANCED_FCB_HEADER Header
FCB_BUFFERED_LOCKS BufferedLocks
PRDBSS_DEVICE_OBJECT RxDeviceObject
RX_FCB_TABLE_ENTRY FcbTableEntry
PCHAR PagingIoResourceFile
UNICODE_STRING PrivateAlreadyPrefixedName
ULONG PagingIoResourceLine
volatile ULONG FobxSerialNumber
LIST_ENTRY ClosePendingList
struct _FOBX::@2042::@2046 DiskFile
BOOLEAN fOpenCountDecremented
union _FOBX::@2042 Specific
LIST_ENTRY ScavengerFinalizationList
PRDBSS_DEVICE_OBJECT RxDeviceObject
struct _FOBX::@2042::@2045 NamedPipe
struct _LIST_ENTRY * Flink
XXCTL_LOWIO_COMPONENT FsCtl
union _LOWIO_CONTEXT::@2149 ParamsFor
ERESOURCE_THREAD ResourceThreadId
struct _LOWIO_CONTEXT::@2149::@2150 ReadWrite
PLOWIO_COMPLETION_ROUTINE CompletionRoutine
LIST_ENTRY PagingIoReadsOutstanding
LIST_ENTRY PagingIoWritesOutstanding
PMRX_GET_CONNECTION_ID MRxGetConnectionId
PMRX_DEALLOCATE_FOR_FOBX MRxDeallocateForFobx
PMRX_CREATE_SRVCALL MRxCreateSrvCall
PRDBSS_DEVICE_OBJECT BestFinisher
PMRX_SRVCALL_CALLBACK CallBack
ULONG BestFinisherOrdinal
MRX_SRVCALL_CALLBACK_CONTEXT CallbackContexts[1]
LIST_ENTRY SrvCalldownList
PVOID RecommunicateContext
PV_NET_ROOT DefaultVNetRoot
LIST_ENTRY ScavengerFinalizationList
PURGE_SYNCHRONIZATION_CONTEXT PurgeSyncronizationContext
ULONG NumberOfVirtualNetRoots
RX_BLOCK_CONDITION Condition
ULONG SerialNumberForEnum
LIST_ENTRY TransitionWaitList
RX_PREFIX_ENTRY PrefixEntry
LIST_ENTRY VirtualNetRoots
ERESOURCE BufferedLocksResource
ULONG OutstandingAsyncWrites
ERESOURCE PagingIoResource
FAST_MUTEX AdvancedFcbHeaderMutex
LIST_ENTRY TransitionWaitList
SECTION_OBJECT_POINTERS SectionObjectPointers
LIST_ENTRY ContextsAwaitingPurgeCompletion
RDBSS_STARTSTOP_CONTEXT StartStopContext
PMINIRDR_DISPATCH Dispatch
PRDBSS_SCAVENGER pRdbssScavenger
volatile ULONG NumberOfActiveContexts
RX_DISPATCHER_CONTEXT DispatcherContext
PRX_PREFIX_TABLE pRxNetNameTable
volatile ULONG NumberOfActiveFcbs
UNICODE_STRING DeviceName
PNET_ROOT CurrentNetRootForClosePendingProcessing
ULONG NetRootsToBeFinalized
LIST_ENTRY FobxFinalizationList
ULONG SrvCallsToBeFinalized
LIST_ENTRY ClosePendingFobxsList
KEVENT ClosePendingProcessingSyncEvent
volatile LONG NumberOfDormantFiles
LIST_ENTRY VNetRootFinalizationList
LIST_ENTRY SrvOpenFinalizationList
ULONG SrvOpensToBeFinalized
LONG MaximumNumberOfDormantFiles
RDBSS_SCAVENGER_STATE State
LIST_ENTRY NetRootFinalizationList
ULONG VNetRootsToBeFinalized
LIST_ENTRY SrvCallFinalizationList
RX_WORK_QUEUE_ITEM DispatcherWorkItem
LIST_ENTRY LastChanceHandlerList
LIST_ENTRY DispatcherList
BOOLEAN LastChanceHandlerActive
volatile LONG NumberOfOutstandingOpens
LIST_ENTRY SrvOpenLists[1]
RX_WORK_QUEUE_ITEM HandlerWorkItem
struct _RX_CONTEXT::@2232::@2244 Create
LOWIO_CONTEXT LowIoContext
PIO_STACK_LOCATION CurrentIrpSp
PRDBSS_DEVICE_OBJECT RxDeviceObject
PMRX_SRV_OPEN pRelevantSrvOpen
LIST_ENTRY RxContextSerializationQLinks
volatile PKEVENT pTearDownEvent
volatile LONG NumberOfWorkerThreads
PRX_WORK_QUEUE_DISPATCHER pWorkQueueDispatcher
KEVENT SpinUpRequestsTearDownEvent
RX_DISPATCHER_STATE State
LIST_ENTRY SpinUpRequests
KSPIN_LOCK SpinUpRequestsLock
KEVENT SpinUpRequestsEvent
PRX_FCB_TABLE_ENTRY TableEntryForNull
LIST_ENTRY HashBuckets[RX_FCB_TABLE_NUMBER_OF_HASH_BUCKETS]
NODE_TYPE_CODE NodeTypeCode
NODE_BYTE_SIZE NodeByteSize
RX_WORK_QUEUE_ITEM WorkQueueItem
PRX_WORKERTHREAD_ROUTINE DispatchRoutine
PVOID DispatchRoutineParameter
RX_WORK_QUEUE WorkQueue[RxMaximumWorkQueue]
PRDBSS_DEVICE_OBJECT pDeviceObject
KEVENT RundownCompletionEvent
LONG NumberOfThreadsSpunDown
PETHREAD * ThreadPointers
LIST_ENTRY TransitionWaitList
RX_BUFFERING_MANAGER BufferingManager
LIST_ENTRY ScavengerFinalizationList
BOOLEAN UpperFinalizationDone
RX_PREFIX_ENTRY PrefixEntry
PURGE_SYNCHRONIZATION_CONTEXT PurgeSyncronizationContext
RX_BLOCK_CONDITION Condition
ULONG SerialNumberForEnum
LIST_ENTRY ScavengerFinalizationList
LIST_ENTRY SrvOpenKeyList
volatile LONG BufferingToken
LIST_ENTRY TransitionWaitList
ULONG SerialNumberForEnum
LIST_ENTRY NetRootListEntry
BOOLEAN UpperFinalizationDone
BOOLEAN ConnectionFinalizationDone
ULONG PrefixOffsetInBytes
LIST_ENTRY ScavengerFinalizationList
UNICODE_STRING NamePrefix
RX_PREFIX_ENTRY PrefixEntry
volatile LONG AdditionalReferenceForDeleteFsctlTaken
RX_BLOCK_CONDITION Condition
LIST_ENTRY TransitionWaitList
BOOLEAN NTAPI KeSetTimer(IN OUT PKTIMER Timer, IN LARGE_INTEGER DueTime, IN PKDPC Dpc OPTIONAL)
VOID NTAPI KeInitializeTimer(OUT PKTIMER Timer)
#define FIELD_OFFSET(t, f)
#define RtlZeroMemory(Destination, Length)
#define RtlMoveMemory(Destination, Source, Length)
#define CONTAINING_RECORD(address, type, field)
#define STATUS_ACCESS_DENIED
#define STATUS_INVALID_PARAMETER
#define STATUS_UNSUCCESSFUL
#define STATUS_FILE_DELETED
#define STATUS_INVALID_USER_BUFFER
#define STATUS_OBJECT_NAME_INVALID
#define STATUS_INSUFFICIENT_RESOURCES
static const EHCI_PERIOD pTable[]
_Must_inspect_result_ _In_ WDFCOLLECTION _In_ WDFOBJECT Object
_In_ PDEVICE_OBJECT DeviceObject
_Must_inspect_result_ _In_ WDFDEVICE _In_ BOOLEAN _In_opt_ PVOID Tag
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ _Strict_type_match_ POOL_TYPE PoolType
_In_ WDFREQUEST _In_ WDFFILEOBJECT FileObject
_In_ WDFDEVICE _In_ WDF_SPECIAL_FILE_TYPE FileType
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ ULONG BufferLength
_In_ PWDFDEVICE_INIT _In_ BOOLEAN IsExclusive
_In_ WDFDEVICE _In_ PVOID _In_opt_ PMDL Mdl
_Must_inspect_result_ _In_ PWDF_DPC_CONFIG _In_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFDPC * Dpc
_In_ WDFDPC _In_ BOOLEAN Wait
_In_ WDFREQUEST _In_ BOOLEAN Requeue
_In_ WDFREQUEST _In_ PIO_STACK_LOCATION Stack
_In_ WDFREQUEST _In_opt_ PFN_WDF_REQUEST_COMPLETION_ROUTINE CompletionRoutine
_Must_inspect_result_ _In_ WDFCMRESLIST List
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_WMI_INSTANCE_CONFIG _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_opt_ WDFWMIINSTANCE * Instance
_Must_inspect_result_ _In_ PWDF_WORKITEM_CONFIG _In_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFWORKITEM * WorkItem
_IRQL_requires_same_ typedef _In_ ULONG _In_ UCHAR _In_ ULONGLONG _In_ ULONGLONG _In_opt_ PEVENT_FILTER_DESCRIPTOR _Inout_opt_ PVOID CallbackContext
_In_ USHORT _In_ ULONG _In_ PSOCKADDR _In_ PSOCKADDR _Reserved_ ULONG _In_opt_ PVOID _In_opt_ const WSK_CLIENT_CONNECTION_DISPATCH * Dispatch
_Must_inspect_result_ _In_ ULONG Flags
_In_ ERESOURCE_THREAD ResourceThreadId
#define ExInitializeWorkItem(Item, Routine, Context)
FORCEINLINE VOID ExInitializeFastMutex(_Out_ PFAST_MUTEX FastMutex)
enum _WORK_QUEUE_TYPE WORK_QUEUE_TYPE
WORKER_THREAD_ROUTINE * PWORKER_THREAD_ROUTINE
ULONG_PTR ERESOURCE_THREAD
#define SL_PENDING_RETURNED
#define SL_OPEN_PAGING_FILE
_Must_inspect_result_ typedef _Out_ PULONG TableSize
#define IRP_INPUT_OPERATION
#define IRP_MJ_FILE_SYSTEM_CONTROL
_Must_inspect_result_ typedef _In_ ULONG TableEntry
#define METHOD_FROM_CTL_CODE(ctrlCode)
#define FO_CLEANUP_COMPLETE
#define IO_DISK_INCREMENT
#define IRP_SYNCHRONOUS_PAGING_IO
#define SL_OPEN_TARGET_DIRECTORY
_Must_inspect_result_ typedef _In_ PHYSICAL_ADDRESS _Inout_ PLARGE_INTEGER NumberOfBytes
#define IRP_MJ_MAXIMUM_FUNCTION
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
enum _LOCK_OPERATION LOCK_OPERATION
_In_opt_ PVOID _In_opt_ PVOID SystemArgument1
_In_opt_ PVOID DeferredContext
_In_opt_ PVOID _In_opt_ PVOID _In_opt_ PVOID SystemArgument2
#define MmGetSystemAddressForMdlSafe(_Mdl, _Priority)
#define ObDereferenceObject
NTSYSAPI VOID NTAPI RtlGetCallersAddress(_Out_ PVOID *CallersAddress, _Out_ PVOID *CallersCaller)
_In_ BOOLEAN _In_ ULONG _Out_ PULONG HashValue
_In_ __drv_aliasesMem PSTRING Prefix
_Inout_opt_ PVOID Parameter
#define SeQuerySubjectContextToken(SubjectContext)