1 #ifndef _FCB_STRUCTS_DEFINED_
2 #define _FCB_STRUCTS_DEFINED_
6 struct _FCB_INIT_PACKET
;
7 typedef struct _FCB_INIT_PACKET
*PFCB_INIT_PACKET
;
9 typedef struct _SRV_CALL
16 MRX_NORMAL_NODE_HEADER spacer
;
19 BOOLEAN UpperFinalizationDone
;
20 RX_PREFIX_ENTRY PrefixEntry
;
21 RX_BLOCK_CONDITION Condition
;
22 ULONG SerialNumberForEnum
;
23 volatile LONG NumberOfCloseDelayedFiles
;
24 LIST_ENTRY TransitionWaitList
;
25 LIST_ENTRY ScavengerFinalizationList
;
26 PURGE_SYNCHRONIZATION_CONTEXT PurgeSyncronizationContext
;
27 RX_BUFFERING_MANAGER BufferingManager
;
28 } SRV_CALL
, *PSRV_CALL
;
30 #define NETROOT_FLAG_FINALIZATION_IN_PROGRESS 0x00040000
31 #define NETROOT_FLAG_NAME_ALREADY_REMOVED 0x00080000
33 typedef struct _NET_ROOT
40 MRX_NORMAL_NODE_HEADER spacer
;
44 BOOLEAN UpperFinalizationDone
;
45 RX_BLOCK_CONDITION Condition
;
46 LIST_ENTRY TransitionWaitList
;
47 LIST_ENTRY ScavengerFinalizationList
;
48 PURGE_SYNCHRONIZATION_CONTEXT PurgeSyncronizationContext
;
49 PV_NET_ROOT DefaultVNetRoot
;
50 LIST_ENTRY VirtualNetRoots
;
51 ULONG NumberOfVirtualNetRoots
;
52 ULONG SerialNumberForEnum
;
53 RX_PREFIX_ENTRY PrefixEntry
;
54 RX_FCB_TABLE FcbTable
;
55 } NET_ROOT
, *PNET_ROOT
;
57 typedef struct _V_NET_ROOT
64 MRX_NORMAL_NODE_HEADER spacer
;
68 BOOLEAN UpperFinalizationDone
;
69 BOOLEAN ConnectionFinalizationDone
;
70 RX_BLOCK_CONDITION Condition
;
71 volatile LONG AdditionalReferenceForDeleteFsctlTaken
;
72 RX_PREFIX_ENTRY PrefixEntry
;
73 UNICODE_STRING NamePrefix
;
74 ULONG PrefixOffsetInBytes
;
75 LIST_ENTRY NetRootListEntry
;
76 ULONG SerialNumberForEnum
;
77 LIST_ENTRY TransitionWaitList
;
78 LIST_ENTRY ScavengerFinalizationList
;
79 } V_NET_ROOT
, *PV_NET_ROOT
;
81 typedef struct _NON_PAGED_FCB
83 NODE_TYPE_CODE NodeTypeCode
;
84 NODE_BYTE_SIZE NodeByteSize
;
85 SECTION_OBJECT_POINTERS SectionObjectPointers
;
86 ERESOURCE HeaderResource
;
87 ERESOURCE PagingIoResource
;
88 #ifdef USE_FILESIZE_LOCK
89 FAST_MUTEX FileSizeLock
;
91 LIST_ENTRY TransitionWaitList
;
92 ULONG OutstandingAsyncWrites
;
93 PKEVENT OutstandingAsyncEvent
;
94 KEVENT TheActualEvent
;
95 PVOID MiniRdrContext
[2];
96 FAST_MUTEX AdvancedFcbHeaderMutex
;
97 ERESOURCE BufferedLocksResource
;
101 } NON_PAGED_FCB
, *PNON_PAGED_FCB
;
103 typedef enum _RX_FCBTRACKER_CASES
105 RX_FCBTRACKER_CASE_NORMAL
,
106 RX_FCBTRACKER_CASE_NULLCONTEXT
,
107 RX_FCBTRACKER_CASE_CBS_CONTEXT
,
108 RX_FCBTRACKER_CASE_CBS_WAIT_CONTEXT
,
109 RX_FCBTRACKER_CASE_MAXIMUM
110 } RX_FCBTRACKER_CASES
;
112 typedef struct _FCB_LOCK
114 struct _FCB_LOCK
* Next
;
115 LARGE_INTEGER Length
;
116 LARGE_INTEGER BytesOffset
;
118 BOOLEAN ExclusiveLock
;
119 } FCB_LOCK
, *PFCB_LOCK
;
121 typedef struct _FCB_BUFFERED_LOCKS
123 struct _FCB_LOCK
* List
;
124 volatile ULONG PendingLockOps
;
126 } FCB_BUFFERED_LOCKS
, *PFCB_BUFFERED_LOCKS
;
135 FSRTL_ADVANCED_FCB_HEADER spacer
;
139 PV_NET_ROOT VNetRoot
;
140 PNON_PAGED_FCB NonPaged
;
141 LIST_ENTRY ScavengerFinalizationList
;
142 PKEVENT pBufferingStateChangeCompletedEvent
;
143 LONG NumberOfBufferingStateChangeWaiters
;
144 RX_FCB_TABLE_ENTRY FcbTableEntry
;
145 UNICODE_STRING PrivateAlreadyPrefixedName
;
146 BOOLEAN UpperFinalizationDone
;
147 RX_BLOCK_CONDITION Condition
;
148 PRX_FSD_DISPATCH_VECTOR PrivateDispatchVector
;
149 PRDBSS_DEVICE_OBJECT RxDeviceObject
;
150 PMINIRDR_DISPATCH MRxDispatch
;
151 PFAST_IO_DISPATCH MRxFastIoDispatch
;
152 PSRV_OPEN InternalSrvOpen
;
154 SHARE_ACCESS ShareAccess
;
155 SHARE_ACCESS ShareAccessPerSrvOpens
;
157 LARGE_INTEGER CreationTime
;
158 LARGE_INTEGER LastAccessTime
;
159 LARGE_INTEGER LastWriteTime
;
160 LARGE_INTEGER LastChangeTime
;
161 #if (_WIN32_WINNT < 0x0600)
162 PETHREAD CreateSectionThread
;
164 ULONG ulFileSizeVersion
;
165 #if (_WIN32_WINNT < 0x0600)
172 #if (_WIN32_WINNT < 0x0600)
173 PVOID LazyWriteThread
;
178 LOWIO_PER_FCB_INFO LowIoPerFcbInfo
;
180 #ifdef USE_FILESIZE_LOCK
181 PFAST_MUTEX FileSizeLock
;
183 #if (_WIN32_WINNT < 0x0600)
187 ULONG EaModificationCount
;
188 FCB_BUFFERED_LOCKS BufferedLocks
;
190 PNON_PAGED_FCB CopyOfNonPaged
;
193 ULONG FcbAcquires
[RX_FCBTRACKER_CASE_MAXIMUM
];
194 ULONG FcbReleases
[RX_FCBTRACKER_CASE_MAXIMUM
];
196 #error tracker must be defined
198 PCHAR PagingIoResourceFile
;
199 ULONG PagingIoResourceLine
;
202 #define FCB_STATE_DELETE_ON_CLOSE 0x00000001
203 #define FCB_STATE_TRUNCATE_ON_CLOSE 0x00000002
204 #define FCB_STATE_PAGING_FILE 0x00000004
205 #define FCB_STATE_DISABLE_LOCAL_BUFFERING 0x00000010
206 #define FCB_STATE_TEMPORARY 0x00000020
207 #define FCB_STATE_BUFFERING_STATE_CHANGE_PENDING 0x00000040
208 #define FCB_STATE_ORPHANED 0x00000080
209 #define FCB_STATE_READAHEAD_DEFERRED 0x00000100
210 #define FCB_STATE_DELAY_CLOSE 0x00000800
211 #define FCB_STATE_FAKEFCB 0x00001000
212 #define FCB_STATE_FILE_IS_BUF_COMPRESSED 0x00004000
213 #define FCB_STATE_FILE_IS_DISK_COMPRESSED 0x00008000
214 #define FCB_STATE_FILE_IS_SHADOWED 0x00010000
215 #define FCB_STATE_BUFFERSTATE_CHANGING 0x00002000
216 #define FCB_STATE_SPECIAL_PATH 0x00020000
217 #define FCB_STATE_TIME_AND_SIZE_ALREADY_SET 0x00040000
218 #define FCB_STATE_FILETIMECACHEING_ENABLED 0x00080000
219 #define FCB_STATE_FILESIZECACHEING_ENABLED 0x00100000
220 #define FCB_STATE_LOCK_BUFFERING_ENABLED 0x00200000
221 #define FCB_STATE_COLLAPSING_ENABLED 0x00400000
222 #define FCB_STATE_OPENSHARING_ENABLED 0x00800000
223 #define FCB_STATE_READBUFFERING_ENABLED 0x01000000
224 #define FCB_STATE_READCACHING_ENABLED 0x02000000
225 #define FCB_STATE_WRITEBUFFERING_ENABLED 0x04000000
226 #define FCB_STATE_WRITECACHING_ENABLED 0x08000000
227 #define FCB_STATE_NAME_ALREADY_REMOVED 0x10000000
228 #define FCB_STATE_ADDEDBACKSLASH 0x20000000
229 #define FCB_STATE_FOBX_USED 0x40000000
230 #define FCB_STATE_SRVOPEN_USED 0x80000000
232 #define FCB_STATE_BUFFERING_STATE_MASK \
233 ((FCB_STATE_WRITECACHING_ENABLED \
234 | FCB_STATE_WRITEBUFFERING_ENABLED \
235 | FCB_STATE_READCACHING_ENABLED \
236 | FCB_STATE_READBUFFERING_ENABLED \
237 | FCB_STATE_OPENSHARING_ENABLED \
238 | FCB_STATE_COLLAPSING_ENABLED \
239 | FCB_STATE_LOCK_BUFFERING_ENABLED \
240 | FCB_STATE_FILESIZECACHEING_ENABLED \
241 | FCB_STATE_FILETIMECACHEING_ENABLED))
243 typedef struct _FCB_INIT_PACKET
247 PLARGE_INTEGER pCreationTime
;
248 PLARGE_INTEGER pLastAccessTime
;
249 PLARGE_INTEGER pLastWriteTime
;
250 PLARGE_INTEGER pLastChangeTime
;
251 PLARGE_INTEGER pAllocationSize
;
252 PLARGE_INTEGER pFileSize
;
253 PLARGE_INTEGER pValidDataLength
;
256 #define SRVOPEN_FLAG_ENCLOSED_ALLOCATED 0x10000
257 #define SRVOPEN_FLAG_FOBX_USED 0x20000
258 #define SRVOPEN_FLAG_SHAREACCESS_UPDATED 0x40000
260 typedef struct _SRV_OPEN
267 MRX_NORMAL_NODE_HEADER spacer
;
269 #if (_WIN32_WINNT >= 0x600)
270 PV_NET_ROOT VNetRoot
;
274 BOOLEAN UpperFinalizationDone
;
275 RX_BLOCK_CONDITION Condition
;
276 volatile LONG BufferingToken
;
277 LIST_ENTRY ScavengerFinalizationList
;
278 LIST_ENTRY TransitionWaitList
;
283 LIST_ENTRY SrvOpenKeyList
;
284 ULONG SequenceNumber
;
287 } SRV_OPEN
, *PSRV_OPEN
;
289 #define FOBX_FLAG_MATCH_ALL 0x10000
290 #define FOBX_FLAG_FREE_UNICODE 0x20000
291 #define FOBX_FLAG_USER_SET_LAST_WRITE 0x40000
292 #define FOBX_FLAG_USER_SET_LAST_ACCESS 0x80000
293 #define FOBX_FLAG_USER_SET_CREATION 0x100000
294 #define FOBX_FLAG_USER_SET_LAST_CHANGE 0x200000
295 #define FOBX_FLAG_DELETE_ON_CLOSE 0x800000
296 #define FOBX_FLAG_SRVOPEN_CLOSED 0x1000000
297 #define FOBX_FLAG_UNC_NAME 0x2000000
298 #define FOBX_FLAG_ENCLOSED_ALLOCATED 0x4000000
299 #define FOBX_FLAG_MARKED_AS_DORMANT 0x8000000
301 #define FOBX_FLAG_DISABLE_COLLAPSING 0x20000000
311 MRX_NORMAL_NODE_HEADER spacer
;
315 volatile ULONG FobxSerialNumber
;
316 LIST_ENTRY FobxQLinks
;
317 LIST_ENTRY ScavengerFinalizationList
;
318 LIST_ENTRY ClosePendingList
;
319 LARGE_INTEGER CloseTime
;
320 BOOLEAN UpperFinalizationDone
;
321 BOOLEAN ContainsWildCards
;
322 BOOLEAN fOpenCountDecremented
;
329 MRX_PIPE_HANDLE_INFORMATION
;
330 MRX_PIPE_HANDLE_INFORMATION PipeHandleInformation
;
332 LARGE_INTEGER CollectDataTime
;
333 ULONG CollectDataSize
;
334 THROTTLING_STATE ThrottlingState
;
335 LIST_ENTRY ReadSerializationQueue
;
336 LIST_ENTRY WriteSerializationQueue
;
339 RXVBO PredictedReadOffset
;
340 RXVBO PredictedWriteOffset
;
341 THROTTLING_STATE LockThrottlingState
;
342 LARGE_INTEGER LastLockOffset
;
343 LARGE_INTEGER LastLockRange
;
346 PRDBSS_DEVICE_OBJECT RxDeviceObject
;
349 #define RDBSS_REF_TRACK_SRVCALL 0x00000001
350 #define RDBSS_REF_TRACK_NETROOT 0x00000002
351 #define RDBSS_REF_TRACK_VNETROOT 0x00000004
352 #define RDBSS_REF_TRACK_NETFOBX 0x00000008
353 #define RDBSS_REF_TRACK_NETFCB 0x00000010
354 #define RDBSS_REF_TRACK_SRVOPEN 0x00000020
355 #define RX_PRINT_REF_TRACKING 0x40000000
356 #define RX_LOG_REF_TRACKING 0x80000000
358 extern ULONG RdbssReferenceTracingValue
;
362 _In_ ULONG TraceType
,
365 _In_ PVOID Instance
);
369 _In_ ULONG TraceType
,
372 _In_ PVOID Instance
);
374 #define REF_TRACING_ON(TraceMask) (TraceMask & RdbssReferenceTracingValue)
376 #define PRINT_REF_COUNT(TYPE, Count) \
377 if (REF_TRACING_ON( RDBSS_REF_TRACK_ ## TYPE) && \
378 (RdbssReferenceTracingValue & RX_PRINT_REF_TRACKING)) \
380 DbgPrint("%ld\n", Count); \
383 #define PRINT_REF_COUNT(TYPE, Count) \
384 if (REF_TRACING_ON( RDBSS_REF_TRACK_ ## TYPE) && \
385 (RdbssReferenceTracingValue & RX_PRINT_REF_TRACKING)) \
387 DbgPrint("(%s:%d) %s: %ld\n", __FILE__, __LINE__, #TYPE, Count); \
391 #define RxReferenceSrvCall(SrvCall) \
392 RxpTrackReference(RDBSS_REF_TRACK_SRVCALL, __FILE__, __LINE__, SrvCall); \
395 #define RxDereferenceSrvCall(SrvCall, LockHoldingState) \
396 RxpTrackDereference(RDBSS_REF_TRACK_SRVCALL, __FILE__, __LINE__, SrvCall); \
397 RxDereference(SrvCall, LockHoldingState)
399 #define RxReferenceNetRoot(NetRoot) \
400 RxpTrackReference(RDBSS_REF_TRACK_NETROOT, __FILE__, __LINE__, NetRoot); \
403 #define RxDereferenceNetRoot(NetRoot, LockHoldingState) \
404 RxpTrackDereference(RDBSS_REF_TRACK_NETROOT, __FILE__, __LINE__, NetRoot); \
405 RxDereference(NetRoot, LockHoldingState)
407 #define RxReferenceVNetRoot(VNetRoot) \
408 RxpTrackReference(RDBSS_REF_TRACK_VNETROOT, __FILE__, __LINE__, VNetRoot); \
409 RxReference(VNetRoot)
411 #define RxDereferenceVNetRoot(VNetRoot, LockHoldingState) \
412 RxpTrackDereference(RDBSS_REF_TRACK_VNETROOT, __FILE__, __LINE__, VNetRoot); \
413 RxDereference(VNetRoot, LockHoldingState)
415 #define RxReferenceNetFobx(Fobx) \
416 RxpTrackReference(RDBSS_REF_TRACK_NETFOBX, __FILE__, __LINE__, Fobx); \
419 #define RxDereferenceNetFobx(Fobx, LockHoldingState) \
420 RxpTrackDereference(RDBSS_REF_TRACK_NETFOBX, __FILE__, __LINE__, Fobx); \
421 RxDereference(Fobx, LockHoldingState)
423 #define RxReferenceSrvOpen(SrvOpen) \
424 RxpTrackReference(RDBSS_REF_TRACK_SRVOPEN, __FILE__, __LINE__, SrvOpen); \
427 #define RxDereferenceSrvOpen(SrvOpen, LockHoldingState) \
428 RxpTrackDereference(RDBSS_REF_TRACK_SRVOPEN, __FILE__, __LINE__, SrvOpen); \
429 RxDereference(SrvOpen, LockHoldingState)
431 #define RxReferenceNetFcb(Fcb) \
432 (RxpTrackReference(RDBSS_REF_TRACK_NETFCB, __FILE__, __LINE__, Fcb), \
433 RxpReferenceNetFcb(Fcb))
435 #define RxDereferenceNetFcb(Fcb) \
436 ((LONG)RxpTrackDereference(RDBSS_REF_TRACK_NETFCB, __FILE__, __LINE__, Fcb), \
437 RxpDereferenceNetFcb(Fcb))
439 #define RxDereferenceAndFinalizeNetFcb(Fcb, RxContext, RecursiveFinalize, ForceFinalize) \
440 (RxpTrackDereference(RDBSS_REF_TRACK_NETFCB, __FILE__, __LINE__, Fcb), \
441 RxpDereferenceAndFinalizeNetFcb(Fcb, RxContext, RecursiveFinalize, ForceFinalize))
445 _In_ PRX_CONTEXT RxContext
,
446 _In_ PUNICODE_STRING Name
,
447 _In_opt_ PUNICODE_STRING InnerNamePrefix
,
448 _In_ PRX_CONNECTION_ID RxConnectionId
);
450 #define RxWaitForStableSrvCall(S, R) RxWaitForStableCondition(&(S)->Condition, &(S)->TransitionWaitList, (R), NULL)
451 #define RxTransitionSrvCall(S, C) RxUpdateCondition((C), &(S)->Condition, &(S)->TransitionWaitList)
453 #if (_WIN32_WINNT >= 0x0600)
456 _Out_ PSRV_CALL ThisSrvCall
,
457 _In_ BOOLEAN ForceFinalize
);
461 _Out_ PSRV_CALL ThisSrvCall
,
462 _In_ BOOLEAN RecursiveFinalize
,
463 _In_ BOOLEAN ForceFinalize
);
468 _In_ PSRV_CALL SrvCall
,
469 _In_ PUNICODE_STRING Name
,
470 _In_ ULONG NetRootFlags
,
471 _In_opt_ PRX_CONNECTION_ID RxConnectionId
);
473 #define RxWaitForStableNetRoot(N, R) RxWaitForStableCondition(&(N)->Condition, &(N)->TransitionWaitList, (R), NULL)
474 #define RxTransitionNetRoot(N, C) RxUpdateCondition((C), &(N)->Condition, &(N)->TransitionWaitList)
478 _Out_ PNET_ROOT ThisNetRoot
,
479 _In_ BOOLEAN RecursiveFinalize
,
480 _In_ BOOLEAN ForceFinalize
);
483 RxInitializeVNetRootParameters(
484 _In_ PRX_CONTEXT RxContext
,
486 _Out_ PULONG SessionId
,
487 _Out_ PUNICODE_STRING
*UserNamePtr
,
488 _Out_ PUNICODE_STRING
*UserDomainNamePtr
,
489 _Out_ PUNICODE_STRING
*PasswordPtr
,
493 RxUninitializeVNetRootParameters(
494 _In_ PUNICODE_STRING UserName
,
495 _In_ PUNICODE_STRING UserDomainName
,
496 _In_ PUNICODE_STRING Password
,
501 _In_ PRX_CONTEXT RxContext
,
502 _In_ PNET_ROOT NetRoot
,
503 _In_ PUNICODE_STRING CanonicalName
,
504 _In_ PUNICODE_STRING LocalNetRootName
,
505 _In_ PUNICODE_STRING FilePath
,
506 _In_ PRX_CONNECTION_ID RxConnectionId
);
510 _Out_ PV_NET_ROOT ThisVNetRoot
,
511 _In_ BOOLEAN RecursiveFinalize
,
512 _In_ BOOLEAN ForceFinalize
);
514 #define RxWaitForStableVNetRoot(V, R) RxWaitForStableCondition(&(V)->Condition, &(V)->TransitionWaitList, (R), NULL)
515 #define RxTransitionVNetRoot(V, C) RxUpdateCondition((C), &(V)->Condition, &(V)->TransitionWaitList)
518 RxSetFileSizeWithLock(
520 _In_ PLONGLONG FileSize
);
523 RxGetFileSizeWithLock(
525 _Out_ PLONGLONG FileSize
);
527 #if (_WIN32_WINNT >= 0x0600)
530 _In_ PRX_CONTEXT RxContext
,
532 _In_ PV_NET_ROOT VNetRoot
,
533 _In_ PUNICODE_STRING Name
);
537 _In_ PRX_CONTEXT RxContext
,
538 _In_ PV_NET_ROOT VNetRoot
,
539 _In_ PUNICODE_STRING Name
);
542 #define RxWaitForStableNetFcb(F, R) RxWaitForStableCondition(&(F)->Condition, &(F)->NonPaged->TransitionWaitList, (R), NULL )
543 #define RxTransitionNetFcb(F, C) RxUpdateCondition((C), &(F)->Condition, &(F)->NonPaged->TransitionWaitList)
545 #define RxFormInitPacket(IP, I1, I1a, I2, I3, I4a, I4b, I5, I6, I7) ( \
546 IP.pAttributes = I1, IP.pNumLinks = I1a, \
547 IP.pCreationTime = I2, IP.pLastAccessTime = I3, \
548 IP.pLastWriteTime = I4a, IP.pLastChangeTime = I4b, \
549 IP.pAllocationSize = I5, IP.pFileSize = I6, \
550 IP.pValidDataLength = I7, &IP)
553 #define ASSERT_CORRECT_FCB_STRUCTURE_DBG_ONLY(Fcb) \
555 ASSERT(Fcb->NonPaged == Fcb->CopyOfNonPaged); \
556 ASSERT(Fcb->NonPaged->FcbBackPointer == Fcb); \
559 #define ASSERT_CORRECT_FCB_STRUCTURE_DBG_ONLY(Fcb)
562 #define ASSERT_CORRECT_FCB_STRUCTURE(Fcb) \
564 ASSERT(NodeTypeIsFcb(Fcb)); \
565 ASSERT(Fcb->NonPaged != NULL ); \
566 ASSERT(NodeType(Fcb->NonPaged) == RDBSS_NTC_NONPAGED_FCB); \
567 ASSERT_CORRECT_FCB_STRUCTURE_DBG_ONLY(Fcb); \
572 RxFinishFcbInitialization(
573 _In_ OUT PMRX_FCB Fcb
,
574 _In_ RX_FILE_TYPE FileType
,
575 _In_opt_ PFCB_INIT_PACKET InitPacket
);
577 #define RxWaitForStableSrvOpen(S, R) RxWaitForStableCondition(&(S)->Condition, &(S)->TransitionWaitList, (R), NULL)
578 #define RxTransitionSrvOpen(S, C) RxUpdateCondition((C), &(S)->Condition, &(S)->TransitionWaitList)
589 RxpDereferenceNetFcb(
593 RxpDereferenceAndFinalizeNetFcb(
595 _In_ PRX_CONTEXT RxContext
,
596 _In_ BOOLEAN RecursiveFinalize
,
597 _In_ BOOLEAN ForceFinalize
);
601 _In_ PV_NET_ROOT VNetRoot
,
606 _Out_ PSRV_OPEN ThisSrvOpen
,
607 _In_ BOOLEAN RecursiveFinalize
,
608 _In_ BOOLEAN ForceFinalize
);
612 GET_ALREADY_PREFIXED_NAME(
613 PMRX_SRV_OPEN SrvOpen
,
616 PFCB ThisFcb
= (PFCB
)Fcb
;
621 ASSERT(NodeType(SrvOpen
) == RDBSS_NTC_SRVOPEN
);
622 ASSERT(ThisFcb
!= NULL
);
623 ASSERT(NodeTypeIsFcb(Fcb
));
624 ASSERT(SrvOpen
->pFcb
== Fcb
);
625 ASSERT(SrvOpen
->pAlreadyPrefixedName
== &ThisFcb
->PrivateAlreadyPrefixedName
);
629 return &ThisFcb
->PrivateAlreadyPrefixedName
;
631 #define GET_ALREADY_PREFIXED_NAME_FROM_CONTEXT(Rxcontext) GET_ALREADY_PREFIXED_NAME((Rxcontext)->pRelevantSrvOpen, (Rxcontext)->pFcb)
636 _Out_ PRX_CONTEXT RxContext
,
637 _In_ PMRX_SRV_OPEN MrxSrvOpen
);
641 _Out_ PFOBX ThisFobx
,
642 _In_ BOOLEAN RecursiveFinalize
,
643 _In_ BOOLEAN ForceFinalize
);
646 #define FILL_IN_FCB(Fcb, a, nl, ct, lat, lwt, lct, as, fs, vdl) \
647 (Fcb)->Attributes = a; \
648 (Fcb)->NumberOfLinks = nl; \
649 (Fcb)->CreationTime.QuadPart = ct; \
650 (Fcb)->LastAccessTime.QuadPart = lat; \
651 (Fcb)->LastWriteTime.QuadPart = lwt; \
652 (Fcb)->LastChangeTime.QuadPart = lct; \
653 (Fcb)->ActualAllocationLength = as; \
654 (Fcb)->Header.AllocationSize.QuadPart = as; \
655 (Fcb)->Header.FileSize.QuadPart = fs; \
656 (Fcb)->Header.ValidDataLength.QuadPart = vdl; \
657 SetFlag((Fcb)->FcbState, FCB_STATE_TIME_AND_SIZE_ALREADY_SET)
659 #define TRACKER_ACQUIRE_FCB 0x61616161
660 #define TRACKER_RELEASE_FCB_NO_BUFF_PENDING 0x72727272
661 #define TRACKER_RELEASE_NON_EXCL_FCB_BUFF_PENDING 0x72727230
662 #define TRACKER_RELEASE_EXCL_FCB_BUFF_PENDING 0x72727231
663 #define TRACKER_RELEASE_FCB_FOR_THRD_NO_BUFF_PENDING 0x72727474
664 #define TRACKER_RELEASE_NON_EXCL_FCB_FOR_THRD_BUFF_PENDING 0x72727430
665 #define TRACKER_RELEASE_EXCL_FCB_FOR_THRD_BUFF_PENDING 0x72727431
666 #define TRACKER_FCB_FREE 0x72724372
668 #define FCB_STATE_BUFFERING_STATE_WITH_NO_SHARES \
669 (( FCB_STATE_WRITECACHING_ENABLED \
670 | FCB_STATE_WRITEBUFFERING_ENABLED \
671 | FCB_STATE_READCACHING_ENABLED \
672 | FCB_STATE_READBUFFERING_ENABLED \
673 | FCB_STATE_LOCK_BUFFERING_ENABLED \
674 | FCB_STATE_FILESIZECACHEING_ENABLED \
675 | FCB_STATE_FILETIMECACHEING_ENABLED))