Something went wrong. Try again.
Reactos
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812#ifndef _RDBSSPROCS_#define _RDBSSPROCS_
#include "backpack.h"#include "rxlog.h"#include "rxtimer.h"#include "rxstruc.h"
extern PVOID RxNull;
#define RxLogFailure(DO, Originator, Event, Status) \ RxLogEventDirect(DO, Originator, Event, Status, __LINE__)
VOIDNTAPIRxLogEventDirect( _In_ PRDBSS_DEVICE_OBJECT DeviceObject, _In_ PUNICODE_STRING OriginatorId, _In_ ULONG EventId, _In_ NTSTATUS Status, _In_ ULONG Line);
VOIDNTAPIRxLogEventWithAnnotation( _In_ PRDBSS_DEVICE_OBJECT DeviceObject, _In_ ULONG EventId, _In_ NTSTATUS Status, _In_ PVOID DataBuffer, _In_ USHORT DataBufferLength, _In_ PUNICODE_STRING Annotation, _In_ ULONG AnnotationCount);
NTSTATUSRxPrefixClaim( _In_ PRX_CONTEXT RxContext);
VOIDRxpPrepareCreateContextForReuse( _In_ PRX_CONTEXT RxContext);
NTSTATUSRxLowIoCompletionTail( _In_ PRX_CONTEXT RxContext);
LUIDRxGetUid( _In_ PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext);
ULONGRxGetSessionId( _In_ PIO_STACK_LOCATION IrpSp);
#if (_WIN32_WINNT >= 0x0600)NTSTATUSRxFindOrCreateConnections( _In_ PRX_CONTEXT RxContext, _In_ PIRP Irp, _In_ PUNICODE_STRING CanonicalName, _In_ NET_ROOT_TYPE NetRootType, _In_ BOOLEAN TreeConnect, _Out_ PUNICODE_STRING LocalNetRootName, _Out_ PUNICODE_STRING FilePathName, _Inout_ PLOCK_HOLDING_STATE LockState, _In_ PRX_CONNECTION_ID RxConnectionId);#elseNTSTATUSRxFindOrCreateConnections( _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);#endif
typedef enum _RX_NAME_CONJURING_METHODS{ VNetRoot_As_Prefix, VNetRoot_As_UNC_Name, VNetRoot_As_DriveLetter} RX_NAME_CONJURING_METHODS;
VOIDRxConjureOriginalName( _Inout_ PFCB Fcb, _Inout_ PFOBX Fobx, _Out_ PULONG ActualNameLength, _Out_writes_bytes_( *LengthRemaining) PWCHAR OriginalName, _Inout_ PLONG LengthRemaining, _In_ RX_NAME_CONJURING_METHODS NameConjuringMethod);
#if (_WIN32_WINNT >= 0x0600)NTSTATUSRxCompleteMdl( _In_ PRX_CONTEXT RxContext, _In_ PIRP Irp);#elseNTSTATUSNTAPIRxCompleteMdl( _In_ PRX_CONTEXT RxContext);#endif
#if (_WIN32_WINNT >= 0x0600)VOIDRxLockUserBuffer( _In_ PRX_CONTEXT RxContext, _In_ PIRP Irp, _In_ LOCK_OPERATION Operation, _In_ ULONG BufferLength);
PVOIDRxMapSystemBuffer( _In_ PRX_CONTEXT RxContext, _In_ PIRP Irp);#elseVOIDRxLockUserBuffer( _In_ PRX_CONTEXT RxContext, _In_ LOCK_OPERATION Operation, _In_ ULONG BufferLength);
PVOIDRxMapSystemBuffer( _In_ PRX_CONTEXT RxContext);#endif
#define FCB_MODE_EXCLUSIVE 1#define FCB_MODE_SHARED 2#define FCB_MODE_SHARED_WAIT_FOR_EXCLUSIVE 3#define FCB_MODE_SHARED_STARVE_EXCLUSIVE 4
#define CHANGE_BUFFERING_STATE_CONTEXT ((PRX_CONTEXT)IntToPtr(0xffffffff))#define CHANGE_BUFFERING_STATE_CONTEXT_WAIT ((PRX_CONTEXT)IntToPtr(0xfffffffe))
NTSTATUS__RxAcquireFcb( _Inout_ PFCB Fcb, _Inout_opt_ PRX_CONTEXT RxContext, _In_ ULONG Mode#ifdef RDBSS_TRACKER , _In_ ULONG LineNumber, _In_ PCSTR FileName, _In_ ULONG SerialNumber#endif );
#ifdef RDBSS_TRACKER#define RxAcquireExclusiveFcb(R, F) __RxAcquireFcb((F), (R), FCB_MODE_EXCLUSIVE, __LINE__, __FILE__, 0)#else#define RxAcquireExclusiveFcb(R, F) __RxAcquireFcb((F), (R), FCB_MODE_EXCLUSIVE)#endif
#define RX_GET_MRX_FCB(F) ((PMRX_FCB)((F)))
#ifdef RDBSS_TRACKER#define RxAcquireSharedFcb(R, F) __RxAcquireFcb((F), (R), FCB_MODE_SHARED, __LINE__, __FILE__, 0)#else#define RxAcquireSharedFcb(R, F) __RxAcquireFcb((F), (R), FCB_MODE_SHARED)#endif
#ifdef RDBSS_TRACKER#define RxAcquireSharedFcbWaitForEx(R, F) __RxAcquireFcb((F),(R), FCB_MODE_SHARED_WAIT_FOR_EXCLUSIVE, __LINE__, __FILE__,0)#else#define RxAcquireSharedFcbWaitForEx(R, F) __RxAcquireFcb((F), (R), FCB_MODE_SHARED_WAIT_FOR_EXCLUSIVE)#endif
VOID__RxReleaseFcb( _Inout_opt_ PRX_CONTEXT RxContext, _Inout_ PMRX_FCB MrxFcb#ifdef RDBSS_TRACKER , _In_ ULONG LineNumber, _In_ PCSTR FileName, _In_ ULONG SerialNumber#endif );
#ifdef RDBSS_TRACKER#define RxReleaseFcb(R, F) __RxReleaseFcb((R), RX_GET_MRX_FCB(F), __LINE__, __FILE__, 0)#else#define RxReleaseFcb(R, F) __RxReleaseFcb((R), RX_GET_MRX_FCB(F))#endif
VOID__RxReleaseFcbForThread( _Inout_opt_ PRX_CONTEXT RxContext, _Inout_ PMRX_FCB MrxFcb, _In_ ERESOURCE_THREAD ResourceThreadId#ifdef RDBSS_TRACKER , _In_ ULONG LineNumber, _In_ PCSTR FileName, _In_ ULONG SerialNumber#endif );
#ifdef RDBSS_TRACKER#define RxReleaseFcbForThread(R, F, T) __RxReleaseFcbForThread((R), RX_GET_MRX_FCB(F), (T), __LINE__, __FILE__, 0)#else#define RxReleaseFcbForThread(R, F, T) __RxReleaseFcbForThread((R), RX_GET_MRX_FCB(F), (T))#endif
#ifdef RDBSS_TRACKERVOIDRxTrackerUpdateHistory( _Inout_opt_ PRX_CONTEXT RxContext, _Inout_ PMRX_FCB MrxFcb, _In_ ULONG Operation, _In_ ULONG LineNumber, _In_ PCSTR FileName, _In_ ULONG SerialNumber);#else#define RxTrackerUpdateHistory(R, F, O, L, F, S) { NOTHING; }#endif
VOIDRxTrackPagingIoResource( _Inout_ PVOID Instance, _In_ ULONG Type, _In_ ULONG Line, _In_ PCSTR File);
#define RxIsFcbAcquiredShared(Fcb) ExIsResourceAcquiredSharedLite((Fcb)->Header.Resource)#define RxIsFcbAcquiredExclusive(Fcb) ExIsResourceAcquiredExclusiveLite((Fcb)->Header.Resource)#define RxIsFcbAcquired(Fcb) (ExIsResourceAcquiredSharedLite((Fcb)->Header.Resource) || \ ExIsResourceAcquiredExclusiveLite((Fcb)->Header.Resource))
#define RxAcquirePagingIoResource(RxContext, Fcb) \ ExAcquireResourceExclusiveLite((Fcb)->Header.PagingIoResource, TRUE); \ if (RxContext != NULL) \ { \ (RxContext)->FcbPagingIoResourceAcquired = TRUE; \ } \ RxTrackPagingIoResource(Fcb, 1, __LINE__, __FILE__)
#ifndef __REACTOS__#define RxAcquirePagingIoResourceShared(RxContext, Fcb, Flag) \ ExAcquireResourceSharedLite((Fcb)->Header.PagingIoResource, Flag); \ if (AcquiredFile) \ { \ if (RxContext != NULL) \ { \ ((PRX_CONTEXT)RxContext)->FcbPagingIoResourceAcquired = TRUE; \ } \ RxTrackPagingIoResource(Fcb, 2, __LINE__, __FILE__); \ }#else#define RxAcquirePagingIoResourceShared(RxContext, Fcb, Flag) \ { \ BOOLEAN AcquiredFile; \ AcquiredFile = ExAcquireResourceSharedLite((Fcb)->Header.PagingIoResource, Flag); \ if (AcquiredFile) \ { \ if (RxContext != NULL) \ { \ ((PRX_CONTEXT)RxContext)->FcbPagingIoResourceAcquired = TRUE; \ } \ RxTrackPagingIoResource(Fcb, 2, __LINE__, __FILE__); \ } \ }#endif
#define RxReleasePagingIoResource(RxContext, Fcb) \ RxTrackPagingIoResource(Fcb, 3, __LINE__, __FILE__); \ if (RxContext != NULL) \ { \ (RxContext)->FcbPagingIoResourceAcquired = FALSE; \ } \ ExReleaseResourceLite((Fcb)->Header.PagingIoResource)
#define RxReleasePagingIoResourceForThread(RxContext, Fcb, Thread) \ RxTrackPagingIoResource(Fcb, 3, __LINE__, __FILE__); \ if (RxContext != NULL) \ { \ (RxContext)->FcbPagingIoResourceAcquired = FALSE; \ } \ ExReleaseResourceForThreadLite((Fcb)->Header.PagingIoResource, (Thread))
#ifdef __REACTOS__VOID__RxWriteReleaseResources( PRX_CONTEXT RxContext, BOOLEAN ResourceOwnerSet#ifdef RDBSS_TRACKER , ULONG LineNumber, PCSTR FileName, ULONG SerialNumber#endif );
#ifdef RDBSS_TRACKER#define RxWriteReleaseResources(R, B) __RxWriteReleaseResources((R), (B), __LINE__, __FILE__, 0)#else#define RxWriteReleaseResources(R, B) __RxWriteReleaseResources((R), (B))#endif#endif
BOOLEANNTAPIRxAcquireFcbForLazyWrite( _In_ PVOID Null, _In_ BOOLEAN Wait);
VOIDNTAPIRxReleaseFcbFromLazyWrite( _In_ PVOID Null);
BOOLEANNTAPIRxAcquireFcbForReadAhead( _In_ PVOID Null, _In_ BOOLEAN Wait);
VOIDNTAPIRxReleaseFcbFromReadAhead( _In_ PVOID Null);
BOOLEANNTAPIRxNoOpAcquire( _In_ PVOID Fcb, _In_ BOOLEAN Wait);
VOIDNTAPIRxNoOpRelease( _In_ PVOID Fcb);
#define RxConvertToSharedFcb(R, F) ExConvertExclusiveToSharedLite(RX_GET_MRX_FCB(F)->Header.Resource)
VOIDRxVerifyOperationIsLegal( _In_ PRX_CONTEXT RxContext);
VOIDRxPrePostIrp( _In_ PVOID Context, _In_ PIRP Irp);
VOIDNTAPIRxAddToWorkque( _In_ PRX_CONTEXT RxContext, _In_ PIRP Irp);
NTSTATUSRxFsdPostRequest( _In_ PRX_CONTEXT RxContext);
#define QuadAlign(V) (ALIGN_UP(V, ULONGLONG))
VOIDRxCompleteRequest_Real( _In_ PRX_CONTEXT RxContext, _In_ PIRP Irp, _In_ NTSTATUS Status);
NTSTATUSRxCompleteRequest( _In_ PRX_CONTEXT pContext, _In_ NTSTATUS Status);
#if (_WIN32_WINNT >= 0x600)NTSTATUSRxConstructSrvCall( _In_ PRX_CONTEXT RxContext, _In_ PIRP Irp, _In_ PSRV_CALL SrvCall, _Out_ PLOCK_HOLDING_STATE LockHoldingState);#elseNTSTATUSRxConstructSrvCall( _In_ PRX_CONTEXT RxContext, _In_ PSRV_CALL SrvCall, _Out_ PLOCK_HOLDING_STATE LockHoldingState);#endif
#define RxCompleteAsynchronousRequest(C, S) RxCompleteRequest(C, S)
NTSTATUSRxConstructNetRoot( _In_ PRX_CONTEXT RxContext, _In_ PSRV_CALL SrvCall, _In_ PNET_ROOT NetRoot, _In_ PV_NET_ROOT VirtualNetRoot, _Out_ PLOCK_HOLDING_STATE LockHoldingState);
#if (_WIN32_WINNT >= 0x0600)NTSTATUSRxConstructVirtualNetRoot( _In_ PRX_CONTEXT RxContext, _In_ PIRP Irp, _In_ PUNICODE_STRING CanonicalName, _In_ NET_ROOT_TYPE NetRootType, _In_ BOOLEAN TreeConnect, _Out_ PV_NET_ROOT *VirtualNetRootPointer, _Out_ PLOCK_HOLDING_STATE LockHoldingState, _Out_ PRX_CONNECTION_ID RxConnectionId);
NTSTATUSRxFindOrConstructVirtualNetRoot( _In_ PRX_CONTEXT RxContext, _In_ PIRP Irp, _In_ PUNICODE_STRING CanonicalName, _In_ NET_ROOT_TYPE NetRootType, _In_ PUNICODE_STRING RemainingName);#elseNTSTATUSRxConstructVirtualNetRoot( _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);
NTSTATUSRxFindOrConstructVirtualNetRoot( _In_ PRX_CONTEXT RxContext, _In_ PUNICODE_STRING CanonicalName, _In_ NET_ROOT_TYPE NetRootType, _In_ PUNICODE_STRING RemainingName);#endif
#if (_WIN32_WINNT >= 0x0600)NTSTATUSRxLowIoLockControlShell( _In_ PRX_CONTEXT RxContext, _In_ PIRP Irp, _In_ PFCB Fcb);#elseNTSTATUSRxLowIoLockControlShell( _In_ PRX_CONTEXT RxContext);#endif
NTSTATUSNTAPIRxChangeBufferingState( PSRV_OPEN SrvOpen, PVOID Context, BOOLEAN ComputeNewState);
VOIDNTAPIRxIndicateChangeOfBufferingStateForSrvOpen( PMRX_SRV_CALL SrvCall, PMRX_SRV_OPEN SrvOpen, PVOID SrvOpenKey, PVOID Context);
NTSTATUSNTAPIRxPrepareToReparseSymbolicLink( PRX_CONTEXT RxContext, BOOLEAN SymbolicLinkEmbeddedInOldPath, PUNICODE_STRING NewPath, BOOLEAN NewPathIsAbsolute, PBOOLEAN ReparseRequired);
VOIDRxReference( _Inout_ PVOID Instance);
VOIDRxDereference( _Inout_ PVOID Instance, _In_ LOCK_HOLDING_STATE LockHoldingState);
VOIDRxWaitForStableCondition( _In_ PRX_BLOCK_CONDITION Condition, _Inout_ PLIST_ENTRY TransitionWaitList, _Inout_ PRX_CONTEXT RxContext, _Out_opt_ NTSTATUS *AsyncStatus);
VOIDRxUpdateCondition( _In_ RX_BLOCK_CONDITION NewConditionValue, _Out_ PRX_BLOCK_CONDITION Condition, _In_ OUT PLIST_ENTRY TransitionWaitList);
#if (_WIN32_WINNT >= 0x0600)NTSTATUSRxCloseAssociatedSrvOpen( _In_opt_ PRX_CONTEXT RxContext, _In_ PFOBX Fobx);#elseNTSTATUSRxCloseAssociatedSrvOpen( _In_ PFOBX Fobx, _In_opt_ PRX_CONTEXT RxContext);#endif
NTSTATUSNTAPIRxFinalizeConnection( _Inout_ PNET_ROOT NetRoot, _Inout_opt_ PV_NET_ROOT VNetRoot, _In_ LOGICAL ForceFilesClosed);
#if DBGVOIDRxDumpWantedAccess( _In_ PSZ where1, _In_ PSZ where2, _In_ PSZ wherelogtag, _In_ ACCESS_MASK DesiredAccess, _In_ ULONG DesiredShareAccess);
VOIDRxDumpCurrentAccess( _In_ PSZ where1, _In_ PSZ where2, _In_ PSZ wherelogtag, _In_ PSHARE_ACCESS ShareAccess);#else#define RxDumpWantedAccess(w1,w2,wlt,DA,DSA) {NOTHING;}#define RxDumpCurrentAccess(w1,w2,wlt,SA) {NOTHING;}#endif
NTSTATUSRxCheckShareAccessPerSrvOpens( _In_ PFCB Fcb, _In_ ACCESS_MASK DesiredAccess, _In_ ULONG DesiredShareAccess);
VOIDRxUpdateShareAccessPerSrvOpens( _In_ PSRV_OPEN SrvOpen);
VOIDRxRemoveShareAccessPerSrvOpens( _Inout_ PSRV_OPEN SrvOpen);
#if DBGNTSTATUSRxCheckShareAccess( _In_ ACCESS_MASK DesiredAccess, _In_ ULONG DesiredShareAccess, _Inout_ PFILE_OBJECT FileObject, _Inout_ PSHARE_ACCESS ShareAccess, _In_ BOOLEAN Update, _In_ PSZ where, _In_ PSZ wherelogtag);
VOIDRxRemoveShareAccess( _Inout_ PFILE_OBJECT FileObject, _Inout_ PSHARE_ACCESS ShareAccess, _In_ PSZ where, _In_ PSZ wherelogtag);
VOIDRxSetShareAccess( _In_ ACCESS_MASK DesiredAccess, _In_ ULONG DesiredShareAccess, _Inout_ PFILE_OBJECT FileObject, _Out_ PSHARE_ACCESS ShareAccess, _In_ PSZ where, _In_ PSZ wherelogtag);
VOIDRxUpdateShareAccess( _Inout_ PFILE_OBJECT FileObject, _Inout_ PSHARE_ACCESS ShareAccess, _In_ PSZ where, _In_ PSZ wherelogtag);#else#define RxCheckShareAccess(a1, a2, a3, a4, a5, a6, a7) IoCheckShareAccess(a1, a2, a3, a4, a5)#define RxRemoveShareAccess(a1, a2, a3, a4) IoRemoveShareAccess(a1, a2)#define RxSetShareAccess(a1, a2, a3, a4, a5, a6) IoSetShareAccess(a1, a2, a3, a4)#define RxUpdateShareAccess(a1, a2, a3, a4) IoUpdateShareAccess(a1, a2)#endif
NTSTATUSNTAPIRxDriverEntry( _In_ PDRIVER_OBJECT DriverObject, _In_ PUNICODE_STRING RegistryPath);
VOIDNTAPIRxUnload( _In_ PDRIVER_OBJECT DriverObject);
VOIDRxInitializeMinirdrDispatchTable( _In_ PDRIVER_OBJECT DriverObject);
ULONGRxGetNetworkProviderPriority( _In_ PUNICODE_STRING DeviceName);
VOIDRxPrepareRequestForReuse( PCHANGE_BUFFERING_STATE_REQUEST Request);
VOIDRxpDiscardChangeBufferingStateRequests( _Inout_ PLIST_ENTRY DiscardedRequests);
VOIDRxGatherRequestsForSrvOpen( _Inout_ PSRV_CALL SrvCall, _In_ PSRV_OPEN SrvOpen, _Inout_ PLIST_ENTRY RequestsListHead);
NTSTATUSRxpLookupSrvOpenForRequestLite( _In_ PSRV_CALL SrvCall, _Inout_ PCHANGE_BUFFERING_STATE_REQUEST Request);
VOIDRxProcessChangeBufferingStateRequestsForSrvOpen( PSRV_OPEN SrvOpen);
NTSTATUSRxPurgeFobxFromCache( PFOBX FobxToBePurged);
BOOLEANRxPurgeFobx( PFOBX pFobx);
VOIDRxUndoScavengerFinalizationMarking( PVOID Instance);
ULONGRxTableComputePathHashValue( _In_ PUNICODE_STRING Name);
VOIDRxExtractServerName( _In_ PUNICODE_STRING FilePathName, _Out_ PUNICODE_STRING SrvCallName, _Out_ PUNICODE_STRING RestOfName);
VOIDNTAPIRxCreateNetRootCallBack( _In_ PMRX_CREATENETROOT_CONTEXT CreateNetRootContext);
PVOIDRxAllocateObject( _In_ NODE_TYPE_CODE NodeType, _In_opt_ PMINIRDR_DISPATCH MRxDispatch, _In_ ULONG NameLength);
VOIDRxFreeObject( _In_ PVOID pObject);
NTSTATUSRxInitializeSrvCallParameters( _In_ PRX_CONTEXT RxContext, _Inout_ PSRV_CALL SrvCall);
VOIDRxAddVirtualNetRootToNetRoot( _In_ PNET_ROOT NetRoot, _In_ PV_NET_ROOT VNetRoot);
VOIDRxRemoveVirtualNetRootFromNetRoot( _In_ PNET_ROOT NetRoot, _In_ PV_NET_ROOT VNetRoot);
PVOIDRxAllocateFcbObject( _In_ PRDBSS_DEVICE_OBJECT RxDeviceObject, _In_ NODE_TYPE_CODE NodeType, _In_ POOL_TYPE PoolType, _In_ ULONG NameSize, _In_opt_ PVOID AlreadyAllocatedObject);
VOIDRxFreeFcbObject( _In_ PVOID Object);
VOIDRxPurgeFcb( _In_ PFCB Fcb);
BOOLEANRxFinalizeNetFcb( _Out_ PFCB ThisFcb, _In_ BOOLEAN RecursiveFinalize, _In_ BOOLEAN ForceFinalize, _In_ LONG ReferenceCount);
BOOLEANRxIsThisACscAgentOpen( _In_ PRX_CONTEXT RxContext);
VOIDNTAPIRxCheckFcbStructuresForAlignment( VOID);
NTSTATUSRxInitializeWorkQueueDispatcher( _In_ PRX_WORK_QUEUE_DISPATCHER Dispatcher);
VOIDRxInitializeWorkQueue( _In_ PRX_WORK_QUEUE WorkQueue, _In_ WORK_QUEUE_TYPE WorkQueueType, _In_ ULONG MaximumNumberOfWorkerThreads, _In_ ULONG MinimumNumberOfWorkerThreads);
NTSTATUSRxSpinUpWorkerThread( _In_ PRX_WORK_QUEUE WorkQueue, _In_ PRX_WORKERTHREAD_ROUTINE Routine, _In_ PVOID Parameter);
VOIDRxSpinUpWorkerThreads( _In_ PRX_WORK_QUEUE WorkQueue);
VOIDNTAPIRxSpinUpRequestsDispatcher( _In_ PVOID Dispatcher);
VOIDRxpWorkerThreadDispatcher( _In_ PRX_WORK_QUEUE WorkQueue, _In_ PLARGE_INTEGER WaitInterval);
VOIDNTAPIRxBootstrapWorkerThreadDispatcher( _In_ PVOID WorkQueue);
PRX_PREFIX_ENTRYRxTableLookupName_ExactLengthMatch( _In_ PRX_PREFIX_TABLE ThisTable, _In_ PUNICODE_STRING Name, _In_ ULONG HashValue, _In_opt_ PRX_CONNECTION_ID RxConnectionId);
PVOIDRxTableLookupName( _In_ PRX_PREFIX_TABLE ThisTable, _In_ PUNICODE_STRING Name, _Out_ PUNICODE_STRING RemainingName, _In_opt_ PRX_CONNECTION_ID RxConnectionId);
VOIDRxOrphanSrvOpens( _In_ PV_NET_ROOT ThisVNetRoot);
VOIDRxOrphanThisFcb( _In_ PFCB Fcb);
VOIDRxOrphanSrvOpensForThisFcb( _In_ PFCB Fcb, _In_ PV_NET_ROOT ThisVNetRoot, _In_ BOOLEAN OrphanAll);
#define RxEqualConnectionId(C1, C2) RtlEqualMemory(C1, C2, sizeof(RX_CONNECTION_ID))
NTSTATUSNTAPIRxLockOperationCompletion( _In_ PVOID Context, _In_ PIRP Irp);
VOIDNTAPIRxUnlockOperation( _In_ PVOID Context, _In_ PFILE_LOCK_INFO LockInfo);
#if (_WIN32_WINNT >= 0x0600)NTSTATUSRxPostStackOverflowRead( _In_ PRX_CONTEXT RxContext, _In_ PFCB Fcb);#elseNTSTATUSRxPostStackOverflowRead( _In_ PRX_CONTEXT RxContext);#endif
VOIDNTAPIRxCancelRoutine( _In_ PDEVICE_OBJECT DeviceObject, _In_ PIRP Irp);
#ifdef __REACTOS__#define RxWriteCacheingAllowed(F, S) ( \ BooleanFlagOn((F)->FcbState, FCB_STATE_WRITECACHING_ENABLED) && \ !BooleanFlagOn((S)->Flags, SRVOPEN_FLAG_DONTUSE_WRITE_CACHING))#endif
#endif