mirror of
https://github.com/reactos/reactos.git
synced 2024-08-28 14:18:41 +00:00
812 lines
20 KiB
C
812 lines
20 KiB
C
#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__)
|
|
|
|
VOID
|
|
NTAPI
|
|
RxLogEventDirect(
|
|
_In_ PRDBSS_DEVICE_OBJECT DeviceObject,
|
|
_In_ PUNICODE_STRING OriginatorId,
|
|
_In_ ULONG EventId,
|
|
_In_ NTSTATUS Status,
|
|
_In_ ULONG Line);
|
|
|
|
VOID
|
|
NTAPI
|
|
RxLogEventWithAnnotation(
|
|
_In_ PRDBSS_DEVICE_OBJECT DeviceObject,
|
|
_In_ ULONG EventId,
|
|
_In_ NTSTATUS Status,
|
|
_In_ PVOID DataBuffer,
|
|
_In_ USHORT DataBufferLength,
|
|
_In_ PUNICODE_STRING Annotation,
|
|
_In_ ULONG AnnotationCount);
|
|
|
|
NTSTATUS
|
|
RxPrefixClaim(
|
|
_In_ PRX_CONTEXT RxContext);
|
|
|
|
VOID
|
|
RxpPrepareCreateContextForReuse(
|
|
_In_ PRX_CONTEXT RxContext);
|
|
|
|
NTSTATUS
|
|
RxLowIoCompletionTail(
|
|
_In_ PRX_CONTEXT RxContext);
|
|
|
|
LUID
|
|
RxGetUid(
|
|
_In_ PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext);
|
|
|
|
ULONG
|
|
RxGetSessionId(
|
|
_In_ PIO_STACK_LOCATION IrpSp);
|
|
|
|
#if (_WIN32_WINNT >= 0x0600)
|
|
NTSTATUS
|
|
RxFindOrCreateConnections(
|
|
_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);
|
|
#else
|
|
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);
|
|
#endif
|
|
|
|
typedef enum _RX_NAME_CONJURING_METHODS
|
|
{
|
|
VNetRoot_As_Prefix,
|
|
VNetRoot_As_UNC_Name,
|
|
VNetRoot_As_DriveLetter
|
|
} RX_NAME_CONJURING_METHODS;
|
|
|
|
VOID
|
|
RxConjureOriginalName(
|
|
_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)
|
|
NTSTATUS
|
|
RxCompleteMdl(
|
|
_In_ PRX_CONTEXT RxContext,
|
|
_In_ PIRP Irp);
|
|
#else
|
|
NTSTATUS
|
|
NTAPI
|
|
RxCompleteMdl(
|
|
_In_ PRX_CONTEXT RxContext);
|
|
#endif
|
|
|
|
#if (_WIN32_WINNT >= 0x0600)
|
|
VOID
|
|
RxLockUserBuffer(
|
|
_In_ PRX_CONTEXT RxContext,
|
|
_In_ PIRP Irp,
|
|
_In_ LOCK_OPERATION Operation,
|
|
_In_ ULONG BufferLength);
|
|
|
|
PVOID
|
|
RxMapSystemBuffer(
|
|
_In_ PRX_CONTEXT RxContext,
|
|
_In_ PIRP Irp);
|
|
#else
|
|
VOID
|
|
RxLockUserBuffer(
|
|
_In_ PRX_CONTEXT RxContext,
|
|
_In_ LOCK_OPERATION Operation,
|
|
_In_ ULONG BufferLength);
|
|
|
|
PVOID
|
|
RxMapSystemBuffer(
|
|
_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_TRACKER
|
|
VOID
|
|
RxTrackerUpdateHistory(
|
|
_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
|
|
|
|
VOID
|
|
RxTrackPagingIoResource(
|
|
_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
|
|
|
|
BOOLEAN
|
|
NTAPI
|
|
RxAcquireFcbForLazyWrite(
|
|
_In_ PVOID Null,
|
|
_In_ BOOLEAN Wait);
|
|
|
|
VOID
|
|
NTAPI
|
|
RxReleaseFcbFromLazyWrite(
|
|
_In_ PVOID Null);
|
|
|
|
BOOLEAN
|
|
NTAPI
|
|
RxAcquireFcbForReadAhead(
|
|
_In_ PVOID Null,
|
|
_In_ BOOLEAN Wait);
|
|
|
|
VOID
|
|
NTAPI
|
|
RxReleaseFcbFromReadAhead(
|
|
_In_ PVOID Null);
|
|
|
|
BOOLEAN
|
|
NTAPI
|
|
RxNoOpAcquire(
|
|
_In_ PVOID Fcb,
|
|
_In_ BOOLEAN Wait);
|
|
|
|
VOID
|
|
NTAPI
|
|
RxNoOpRelease(
|
|
_In_ PVOID Fcb);
|
|
|
|
#define RxConvertToSharedFcb(R, F) ExConvertExclusiveToSharedLite(RX_GET_MRX_FCB(F)->Header.Resource)
|
|
|
|
VOID
|
|
RxVerifyOperationIsLegal(
|
|
_In_ PRX_CONTEXT RxContext);
|
|
|
|
VOID
|
|
RxPrePostIrp(
|
|
_In_ PVOID Context,
|
|
_In_ PIRP Irp);
|
|
|
|
VOID
|
|
NTAPI
|
|
RxAddToWorkque(
|
|
_In_ PRX_CONTEXT RxContext,
|
|
_In_ PIRP Irp);
|
|
|
|
NTSTATUS
|
|
RxFsdPostRequest(
|
|
_In_ PRX_CONTEXT RxContext);
|
|
|
|
#define QuadAlign(V) (ALIGN_UP(V, ULONGLONG))
|
|
|
|
VOID
|
|
RxCompleteRequest_Real(
|
|
_In_ PRX_CONTEXT RxContext,
|
|
_In_ PIRP Irp,
|
|
_In_ NTSTATUS Status);
|
|
|
|
NTSTATUS
|
|
RxCompleteRequest(
|
|
_In_ PRX_CONTEXT pContext,
|
|
_In_ NTSTATUS Status);
|
|
|
|
#if (_WIN32_WINNT >= 0x600)
|
|
NTSTATUS
|
|
RxConstructSrvCall(
|
|
_In_ PRX_CONTEXT RxContext,
|
|
_In_ PIRP Irp,
|
|
_In_ PSRV_CALL SrvCall,
|
|
_Out_ PLOCK_HOLDING_STATE LockHoldingState);
|
|
#else
|
|
NTSTATUS
|
|
RxConstructSrvCall(
|
|
_In_ PRX_CONTEXT RxContext,
|
|
_In_ PSRV_CALL SrvCall,
|
|
_Out_ PLOCK_HOLDING_STATE LockHoldingState);
|
|
#endif
|
|
|
|
#define RxCompleteAsynchronousRequest(C, S) RxCompleteRequest(C, S)
|
|
|
|
NTSTATUS
|
|
RxConstructNetRoot(
|
|
_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)
|
|
NTSTATUS
|
|
RxConstructVirtualNetRoot(
|
|
_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);
|
|
|
|
NTSTATUS
|
|
RxFindOrConstructVirtualNetRoot(
|
|
_In_ PRX_CONTEXT RxContext,
|
|
_In_ PIRP Irp,
|
|
_In_ PUNICODE_STRING CanonicalName,
|
|
_In_ NET_ROOT_TYPE NetRootType,
|
|
_In_ PUNICODE_STRING RemainingName);
|
|
#else
|
|
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);
|
|
|
|
NTSTATUS
|
|
RxFindOrConstructVirtualNetRoot(
|
|
_In_ PRX_CONTEXT RxContext,
|
|
_In_ PUNICODE_STRING CanonicalName,
|
|
_In_ NET_ROOT_TYPE NetRootType,
|
|
_In_ PUNICODE_STRING RemainingName);
|
|
#endif
|
|
|
|
#if (_WIN32_WINNT >= 0x0600)
|
|
NTSTATUS
|
|
RxLowIoLockControlShell(
|
|
_In_ PRX_CONTEXT RxContext,
|
|
_In_ PIRP Irp,
|
|
_In_ PFCB Fcb);
|
|
#else
|
|
NTSTATUS
|
|
RxLowIoLockControlShell(
|
|
_In_ PRX_CONTEXT RxContext);
|
|
#endif
|
|
|
|
NTSTATUS
|
|
NTAPI
|
|
RxChangeBufferingState(
|
|
PSRV_OPEN SrvOpen,
|
|
PVOID Context,
|
|
BOOLEAN ComputeNewState);
|
|
|
|
VOID
|
|
NTAPI
|
|
RxIndicateChangeOfBufferingStateForSrvOpen(
|
|
PMRX_SRV_CALL SrvCall,
|
|
PMRX_SRV_OPEN SrvOpen,
|
|
PVOID SrvOpenKey,
|
|
PVOID Context);
|
|
|
|
NTSTATUS
|
|
NTAPI
|
|
RxPrepareToReparseSymbolicLink(
|
|
PRX_CONTEXT RxContext,
|
|
BOOLEAN SymbolicLinkEmbeddedInOldPath,
|
|
PUNICODE_STRING NewPath,
|
|
BOOLEAN NewPathIsAbsolute,
|
|
PBOOLEAN ReparseRequired);
|
|
|
|
VOID
|
|
RxReference(
|
|
_Inout_ PVOID Instance);
|
|
|
|
VOID
|
|
RxDereference(
|
|
_Inout_ PVOID Instance,
|
|
_In_ LOCK_HOLDING_STATE LockHoldingState);
|
|
|
|
VOID
|
|
RxWaitForStableCondition(
|
|
_In_ PRX_BLOCK_CONDITION Condition,
|
|
_Inout_ PLIST_ENTRY TransitionWaitList,
|
|
_Inout_ PRX_CONTEXT RxContext,
|
|
_Out_opt_ NTSTATUS *AsyncStatus);
|
|
|
|
VOID
|
|
RxUpdateCondition(
|
|
_In_ RX_BLOCK_CONDITION NewConditionValue,
|
|
_Out_ PRX_BLOCK_CONDITION Condition,
|
|
_In_ OUT PLIST_ENTRY TransitionWaitList);
|
|
|
|
#if (_WIN32_WINNT >= 0x0600)
|
|
NTSTATUS
|
|
RxCloseAssociatedSrvOpen(
|
|
_In_opt_ PRX_CONTEXT RxContext,
|
|
_In_ PFOBX Fobx);
|
|
#else
|
|
NTSTATUS
|
|
RxCloseAssociatedSrvOpen(
|
|
_In_ PFOBX Fobx,
|
|
_In_opt_ PRX_CONTEXT RxContext);
|
|
#endif
|
|
|
|
NTSTATUS
|
|
NTAPI
|
|
RxFinalizeConnection(
|
|
_Inout_ PNET_ROOT NetRoot,
|
|
_Inout_opt_ PV_NET_ROOT VNetRoot,
|
|
_In_ LOGICAL ForceFilesClosed);
|
|
|
|
#if DBG
|
|
VOID
|
|
RxDumpWantedAccess(
|
|
_In_ PSZ where1,
|
|
_In_ PSZ where2,
|
|
_In_ PSZ wherelogtag,
|
|
_In_ ACCESS_MASK DesiredAccess,
|
|
_In_ ULONG DesiredShareAccess);
|
|
|
|
VOID
|
|
RxDumpCurrentAccess(
|
|
_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
|
|
|
|
NTSTATUS
|
|
RxCheckShareAccessPerSrvOpens(
|
|
_In_ PFCB Fcb,
|
|
_In_ ACCESS_MASK DesiredAccess,
|
|
_In_ ULONG DesiredShareAccess);
|
|
|
|
VOID
|
|
RxUpdateShareAccessPerSrvOpens(
|
|
_In_ PSRV_OPEN SrvOpen);
|
|
|
|
VOID
|
|
RxRemoveShareAccessPerSrvOpens(
|
|
_Inout_ PSRV_OPEN SrvOpen);
|
|
|
|
#if DBG
|
|
NTSTATUS
|
|
RxCheckShareAccess(
|
|
_In_ ACCESS_MASK DesiredAccess,
|
|
_In_ ULONG DesiredShareAccess,
|
|
_Inout_ PFILE_OBJECT FileObject,
|
|
_Inout_ PSHARE_ACCESS ShareAccess,
|
|
_In_ BOOLEAN Update,
|
|
_In_ PSZ where,
|
|
_In_ PSZ wherelogtag);
|
|
|
|
VOID
|
|
RxRemoveShareAccess(
|
|
_Inout_ PFILE_OBJECT FileObject,
|
|
_Inout_ PSHARE_ACCESS ShareAccess,
|
|
_In_ PSZ where,
|
|
_In_ PSZ wherelogtag);
|
|
|
|
VOID
|
|
RxSetShareAccess(
|
|
_In_ ACCESS_MASK DesiredAccess,
|
|
_In_ ULONG DesiredShareAccess,
|
|
_Inout_ PFILE_OBJECT FileObject,
|
|
_Out_ PSHARE_ACCESS ShareAccess,
|
|
_In_ PSZ where,
|
|
_In_ PSZ wherelogtag);
|
|
|
|
VOID
|
|
RxUpdateShareAccess(
|
|
_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
|
|
|
|
NTSTATUS
|
|
NTAPI
|
|
RxDriverEntry(
|
|
_In_ PDRIVER_OBJECT DriverObject,
|
|
_In_ PUNICODE_STRING RegistryPath);
|
|
|
|
VOID
|
|
NTAPI
|
|
RxUnload(
|
|
_In_ PDRIVER_OBJECT DriverObject);
|
|
|
|
VOID
|
|
RxInitializeMinirdrDispatchTable(
|
|
_In_ PDRIVER_OBJECT DriverObject);
|
|
|
|
ULONG
|
|
RxGetNetworkProviderPriority(
|
|
_In_ PUNICODE_STRING DeviceName);
|
|
|
|
VOID
|
|
RxPrepareRequestForReuse(
|
|
PCHANGE_BUFFERING_STATE_REQUEST Request);
|
|
|
|
VOID
|
|
RxpDiscardChangeBufferingStateRequests(
|
|
_Inout_ PLIST_ENTRY DiscardedRequests);
|
|
|
|
VOID
|
|
RxGatherRequestsForSrvOpen(
|
|
_Inout_ PSRV_CALL SrvCall,
|
|
_In_ PSRV_OPEN SrvOpen,
|
|
_Inout_ PLIST_ENTRY RequestsListHead);
|
|
|
|
NTSTATUS
|
|
RxpLookupSrvOpenForRequestLite(
|
|
_In_ PSRV_CALL SrvCall,
|
|
_Inout_ PCHANGE_BUFFERING_STATE_REQUEST Request);
|
|
|
|
VOID
|
|
RxProcessChangeBufferingStateRequestsForSrvOpen(
|
|
PSRV_OPEN SrvOpen);
|
|
|
|
NTSTATUS
|
|
RxPurgeFobxFromCache(
|
|
PFOBX FobxToBePurged);
|
|
|
|
BOOLEAN
|
|
RxPurgeFobx(
|
|
PFOBX pFobx);
|
|
|
|
VOID
|
|
RxUndoScavengerFinalizationMarking(
|
|
PVOID Instance);
|
|
|
|
ULONG
|
|
RxTableComputePathHashValue(
|
|
_In_ PUNICODE_STRING Name);
|
|
|
|
VOID
|
|
RxExtractServerName(
|
|
_In_ PUNICODE_STRING FilePathName,
|
|
_Out_ PUNICODE_STRING SrvCallName,
|
|
_Out_ PUNICODE_STRING RestOfName);
|
|
|
|
VOID
|
|
NTAPI
|
|
RxCreateNetRootCallBack(
|
|
_In_ PMRX_CREATENETROOT_CONTEXT CreateNetRootContext);
|
|
|
|
PVOID
|
|
RxAllocateObject(
|
|
_In_ NODE_TYPE_CODE NodeType,
|
|
_In_opt_ PMINIRDR_DISPATCH MRxDispatch,
|
|
_In_ ULONG NameLength);
|
|
|
|
VOID
|
|
RxFreeObject(
|
|
_In_ PVOID pObject);
|
|
|
|
NTSTATUS
|
|
RxInitializeSrvCallParameters(
|
|
_In_ PRX_CONTEXT RxContext,
|
|
_Inout_ PSRV_CALL SrvCall);
|
|
|
|
VOID
|
|
RxAddVirtualNetRootToNetRoot(
|
|
_In_ PNET_ROOT NetRoot,
|
|
_In_ PV_NET_ROOT VNetRoot);
|
|
|
|
VOID
|
|
RxRemoveVirtualNetRootFromNetRoot(
|
|
_In_ PNET_ROOT NetRoot,
|
|
_In_ PV_NET_ROOT VNetRoot);
|
|
|
|
PVOID
|
|
RxAllocateFcbObject(
|
|
_In_ PRDBSS_DEVICE_OBJECT RxDeviceObject,
|
|
_In_ NODE_TYPE_CODE NodeType,
|
|
_In_ POOL_TYPE PoolType,
|
|
_In_ ULONG NameSize,
|
|
_In_opt_ PVOID AlreadyAllocatedObject);
|
|
|
|
VOID
|
|
RxFreeFcbObject(
|
|
_In_ PVOID Object);
|
|
|
|
VOID
|
|
RxPurgeFcb(
|
|
_In_ PFCB Fcb);
|
|
|
|
BOOLEAN
|
|
RxFinalizeNetFcb(
|
|
_Out_ PFCB ThisFcb,
|
|
_In_ BOOLEAN RecursiveFinalize,
|
|
_In_ BOOLEAN ForceFinalize,
|
|
_In_ LONG ReferenceCount);
|
|
|
|
BOOLEAN
|
|
RxIsThisACscAgentOpen(
|
|
_In_ PRX_CONTEXT RxContext);
|
|
|
|
VOID
|
|
NTAPI
|
|
RxCheckFcbStructuresForAlignment(
|
|
VOID);
|
|
|
|
NTSTATUS
|
|
RxInitializeWorkQueueDispatcher(
|
|
_In_ PRX_WORK_QUEUE_DISPATCHER Dispatcher);
|
|
|
|
VOID
|
|
RxInitializeWorkQueue(
|
|
_In_ PRX_WORK_QUEUE WorkQueue,
|
|
_In_ WORK_QUEUE_TYPE WorkQueueType,
|
|
_In_ ULONG MaximumNumberOfWorkerThreads,
|
|
_In_ ULONG MinimumNumberOfWorkerThreads);
|
|
|
|
NTSTATUS
|
|
RxSpinUpWorkerThread(
|
|
_In_ PRX_WORK_QUEUE WorkQueue,
|
|
_In_ PRX_WORKERTHREAD_ROUTINE Routine,
|
|
_In_ PVOID Parameter);
|
|
|
|
VOID
|
|
RxSpinUpWorkerThreads(
|
|
_In_ PRX_WORK_QUEUE WorkQueue);
|
|
|
|
VOID
|
|
NTAPI
|
|
RxSpinUpRequestsDispatcher(
|
|
_In_ PVOID Dispatcher);
|
|
|
|
VOID
|
|
RxpWorkerThreadDispatcher(
|
|
_In_ PRX_WORK_QUEUE WorkQueue,
|
|
_In_ PLARGE_INTEGER WaitInterval);
|
|
|
|
VOID
|
|
NTAPI
|
|
RxBootstrapWorkerThreadDispatcher(
|
|
_In_ PVOID WorkQueue);
|
|
|
|
PRX_PREFIX_ENTRY
|
|
RxTableLookupName_ExactLengthMatch(
|
|
_In_ PRX_PREFIX_TABLE ThisTable,
|
|
_In_ PUNICODE_STRING Name,
|
|
_In_ ULONG HashValue,
|
|
_In_opt_ PRX_CONNECTION_ID RxConnectionId);
|
|
|
|
PVOID
|
|
RxTableLookupName(
|
|
_In_ PRX_PREFIX_TABLE ThisTable,
|
|
_In_ PUNICODE_STRING Name,
|
|
_Out_ PUNICODE_STRING RemainingName,
|
|
_In_opt_ PRX_CONNECTION_ID RxConnectionId);
|
|
|
|
VOID
|
|
RxOrphanSrvOpens(
|
|
_In_ PV_NET_ROOT ThisVNetRoot);
|
|
|
|
VOID
|
|
RxOrphanThisFcb(
|
|
_In_ PFCB Fcb);
|
|
|
|
VOID
|
|
RxOrphanSrvOpensForThisFcb(
|
|
_In_ PFCB Fcb,
|
|
_In_ PV_NET_ROOT ThisVNetRoot,
|
|
_In_ BOOLEAN OrphanAll);
|
|
|
|
#define RxEqualConnectionId(C1, C2) RtlEqualMemory(C1, C2, sizeof(RX_CONNECTION_ID))
|
|
|
|
NTSTATUS
|
|
NTAPI
|
|
RxLockOperationCompletion(
|
|
_In_ PVOID Context,
|
|
_In_ PIRP Irp);
|
|
|
|
VOID
|
|
NTAPI
|
|
RxUnlockOperation(
|
|
_In_ PVOID Context,
|
|
_In_ PFILE_LOCK_INFO LockInfo);
|
|
|
|
#if (_WIN32_WINNT >= 0x0600)
|
|
NTSTATUS
|
|
RxPostStackOverflowRead(
|
|
_In_ PRX_CONTEXT RxContext,
|
|
_In_ PFCB Fcb);
|
|
#else
|
|
NTSTATUS
|
|
RxPostStackOverflowRead(
|
|
_In_ PRX_CONTEXT RxContext);
|
|
#endif
|
|
|
|
VOID
|
|
NTAPI
|
|
RxCancelRoutine(
|
|
_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
|