11#define RxLogFailure(DO, Originator, Event, Status) \
12 RxLogEventDirect(DO, Originator, Event, Status, __LINE__)
54#if (_WIN32_WINNT >= 0x0600)
94#if (_WIN32_WINNT >= 0x0600)
106#if (_WIN32_WINNT >= 0x0600)
130#define FCB_MODE_EXCLUSIVE 1
131#define FCB_MODE_SHARED 2
132#define FCB_MODE_SHARED_WAIT_FOR_EXCLUSIVE 3
133#define FCB_MODE_SHARED_STARVE_EXCLUSIVE 4
135#define CHANGE_BUFFERING_STATE_CONTEXT ((PRX_CONTEXT)IntToPtr(0xffffffff))
136#define CHANGE_BUFFERING_STATE_CONTEXT_WAIT ((PRX_CONTEXT)IntToPtr(0xfffffffe))
152#define RxAcquireExclusiveFcb(R, F) __RxAcquireFcb((F), (R), FCB_MODE_EXCLUSIVE, __LINE__, __FILE__, 0)
154#define RxAcquireExclusiveFcb(R, F) __RxAcquireFcb((F), (R), FCB_MODE_EXCLUSIVE)
157#define RX_GET_MRX_FCB(F) ((PMRX_FCB)((F)))
160#define RxAcquireSharedFcb(R, F) __RxAcquireFcb((F), (R), FCB_MODE_SHARED, __LINE__, __FILE__, 0)
162#define RxAcquireSharedFcb(R, F) __RxAcquireFcb((F), (R), FCB_MODE_SHARED)
166#define RxAcquireSharedFcbWaitForEx(R, F) __RxAcquireFcb((F),(R), FCB_MODE_SHARED_WAIT_FOR_EXCLUSIVE, __LINE__, __FILE__,0)
168#define RxAcquireSharedFcbWaitForEx(R, F) __RxAcquireFcb((F), (R), FCB_MODE_SHARED_WAIT_FOR_EXCLUSIVE)
184#define RxReleaseFcb(R, F) __RxReleaseFcb((R), RX_GET_MRX_FCB(F), __LINE__, __FILE__, 0)
186#define RxReleaseFcb(R, F) __RxReleaseFcb((R), RX_GET_MRX_FCB(F))
203#define RxReleaseFcbForThread(R, F, T) __RxReleaseFcbForThread((R), RX_GET_MRX_FCB(F), (T), __LINE__, __FILE__, 0)
205#define RxReleaseFcbForThread(R, F, T) __RxReleaseFcbForThread((R), RX_GET_MRX_FCB(F), (T))
218#define RxTrackerUpdateHistory(R, F, O, L, F, S) { NOTHING; }
228#define RxIsFcbAcquiredShared(Fcb) ExIsResourceAcquiredSharedLite((Fcb)->Header.Resource)
229#define RxIsFcbAcquiredExclusive(Fcb) ExIsResourceAcquiredExclusiveLite((Fcb)->Header.Resource)
230#define RxIsFcbAcquired(Fcb) (ExIsResourceAcquiredSharedLite((Fcb)->Header.Resource) || \
231 ExIsResourceAcquiredExclusiveLite((Fcb)->Header.Resource))
233#define RxAcquirePagingIoResource(RxContext, Fcb) \
234 ExAcquireResourceExclusiveLite((Fcb)->Header.PagingIoResource, TRUE); \
235 if (RxContext != NULL) \
237 (RxContext)->FcbPagingIoResourceAcquired = TRUE; \
239 RxTrackPagingIoResource(Fcb, 1, __LINE__, __FILE__)
242#define RxAcquirePagingIoResourceShared(RxContext, Fcb, Flag) \
243 ExAcquireResourceSharedLite((Fcb)->Header.PagingIoResource, Flag); \
246 if (RxContext != NULL) \
248 ((PRX_CONTEXT)RxContext)->FcbPagingIoResourceAcquired = TRUE; \
250 RxTrackPagingIoResource(Fcb, 2, __LINE__, __FILE__); \
253#define RxAcquirePagingIoResourceShared(RxContext, Fcb, Flag) \
255 BOOLEAN AcquiredFile; \
256 AcquiredFile = ExAcquireResourceSharedLite((Fcb)->Header.PagingIoResource, Flag); \
259 if (RxContext != NULL) \
261 ((PRX_CONTEXT)RxContext)->FcbPagingIoResourceAcquired = TRUE; \
263 RxTrackPagingIoResource(Fcb, 2, __LINE__, __FILE__); \
268#define RxReleasePagingIoResource(RxContext, Fcb) \
269 RxTrackPagingIoResource(Fcb, 3, __LINE__, __FILE__); \
270 if (RxContext != NULL) \
272 (RxContext)->FcbPagingIoResourceAcquired = FALSE; \
274 ExReleaseResourceLite((Fcb)->Header.PagingIoResource)
276#define RxReleasePagingIoResourceForThread(RxContext, Fcb, Thread) \
277 RxTrackPagingIoResource(Fcb, 3, __LINE__, __FILE__); \
278 if (RxContext != NULL) \
280 (RxContext)->FcbPagingIoResourceAcquired = FALSE; \
282 ExReleaseResourceForThreadLite((Fcb)->Header.PagingIoResource, (Thread))
298#define RxWriteReleaseResources(R, B) __RxWriteReleaseResources((R), (B), __LINE__, __FILE__, 0)
300#define RxWriteReleaseResources(R, B) __RxWriteReleaseResources((R), (B))
337#define RxConvertToSharedFcb(R, F) ExConvertExclusiveToSharedLite(RX_GET_MRX_FCB(F)->Header.Resource)
358#define QuadAlign(V) (ALIGN_UP(V, ULONGLONG))
371#if (_WIN32_WINNT >= 0x600)
386#define RxCompleteAsynchronousRequest(C, S) RxCompleteRequest(C, S)
396#if (_WIN32_WINNT >= 0x0600)
433#if (_WIN32_WINNT >= 0x0600)
464 BOOLEAN SymbolicLinkEmbeddedInOldPath,
491#if (_WIN32_WINNT >= 0x0600)
508 _In_ LOGICAL ForceFilesClosed);
526#define RxDumpWantedAccess(w1,w2,wlt,DA,DSA) {NOTHING;}
527#define RxDumpCurrentAccess(w1,w2,wlt,SA) {NOTHING;}
578#define RxCheckShareAccess(a1, a2, a3, a4, a5, a6, a7) IoCheckShareAccess(a1, a2, a3, a4, a5)
579#define RxRemoveShareAccess(a1, a2, a3, a4) IoRemoveShareAccess(a1, a2)
580#define RxSetShareAccess(a1, a2, a3, a4, a5, a6) IoSetShareAccess(a1, a2, a3, a4)
581#define RxUpdateShareAccess(a1, a2, a3, a4) IoUpdateShareAccess(a1, a2)
628 PFOBX FobxToBePurged);
719 _In_ ULONG MinimumNumberOfWorkerThreads);
774#define RxEqualConnectionId(C1, C2) RtlEqualMemory(C1, C2, sizeof(RX_CONNECTION_ID))
788#if (_WIN32_WINNT >= 0x0600)
806#define RxWriteCacheingAllowed(F, S) ( \
807 BooleanFlagOn((F)->FcbState, FCB_STATE_WRITECACHING_ENABLED) && \
808 !BooleanFlagOn((S)->Flags, SRVOPEN_FLAG_DONTUSE_WRITE_CACHING))
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
_Inout_ PFCB _Inout_ PUNICODE_STRING RemainingName
_In_ PIO_STACK_LOCATION IrpSp
_In_ PIO_STACK_LOCATION _Inout_ PFILE_OBJECT _Inout_ PVCB _Outptr_result_maybenull_ PDCB _In_ PDCB _In_ PDIRENT _In_ ULONG _In_ ULONG _In_ PUNICODE_STRING _In_ PACCESS_MASK _In_ USHORT ShareAccess
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
_Must_inspect_result_ _In_ PFILE_OBJECT _In_ ULONG _In_opt_ GUID _In_ USHORT DataBufferLength
enum _RX_BLOCK_CONDITION RX_BLOCK_CONDITION
enum _RX_BLOCK_CONDITION * PRX_BLOCK_CONDITION
#define _Out_writes_bytes_(size)
IN ULONG IN UCHAR Condition
VOID __RxWriteReleaseResources(PRX_CONTEXT RxContext, BOOLEAN ResourceOwnerSet, ULONG LineNumber, PCSTR FileName, ULONG SerialNumber)
VOID RxpDiscardChangeBufferingStateRequests(_Inout_ PLIST_ENTRY DiscardedRequests)
NTSTATUS __RxAcquireFcb(_Inout_ PFCB Fcb, _Inout_opt_ PRX_CONTEXT RxContext, _In_ ULONG Mode)
#define RxDumpWantedAccess(w1, w2, wlt, DA, DSA)
VOID NTAPI RxIndicateChangeOfBufferingStateForSrvOpen(PMRX_SRV_CALL SrvCall, PMRX_SRV_OPEN SrvOpen, PVOID SrvOpenKey, PVOID Context)
VOID RxRemoveShareAccessPerSrvOpens(_Inout_ PSRV_OPEN SrvOpen)
NTSTATUS NTAPI RxDriverEntry(_In_ PDRIVER_OBJECT DriverObject, _In_ PUNICODE_STRING RegistryPath)
#define RxDumpCurrentAccess(w1, w2, wlt, SA)
VOID NTAPI RxSpinUpRequestsDispatcher(_In_ PVOID Dispatcher)
VOID NTAPI RxCreateNetRootCallBack(_In_ PMRX_CREATENETROOT_CONTEXT CreateNetRootContext)
PVOID RxMapSystemBuffer(_In_ PRX_CONTEXT RxContext)
NTSTATUS RxPurgeFobxFromCache(PFOBX FobxToBePurged)
ULONG RxTableComputePathHashValue(_In_ PUNICODE_STRING Name)
VOID RxPrePostIrp(_In_ PVOID Context, _In_ PIRP Irp)
NTSTATUS RxCheckShareAccessPerSrvOpens(_In_ PFCB Fcb, _In_ ACCESS_MASK DesiredAccess, _In_ ULONG DesiredShareAccess)
VOID NTAPI RxNoOpRelease(_In_ PVOID Fcb)
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 NTAPI RxBootstrapWorkerThreadDispatcher(_In_ PVOID WorkQueue)
BOOLEAN RxIsThisACscAgentOpen(_In_ PRX_CONTEXT RxContext)
VOID RxSpinUpWorkerThreads(_In_ PRX_WORK_QUEUE WorkQueue)
VOID RxUndoScavengerFinalizationMarking(PVOID Instance)
NTSTATUS RxSpinUpWorkerThread(_In_ PRX_WORK_QUEUE WorkQueue, _In_ PRX_WORKERTHREAD_ROUTINE Routine, _In_ PVOID Parameter)
NTSTATUS NTAPI RxFinalizeConnection(_Inout_ PNET_ROOT NetRoot, _Inout_opt_ PV_NET_ROOT VNetRoot, _In_ LOGICAL ForceFilesClosed)
VOID RxProcessChangeBufferingStateRequestsForSrvOpen(PSRV_OPEN SrvOpen)
VOID RxpPrepareCreateContextForReuse(_In_ PRX_CONTEXT RxContext)
VOID RxInitializeMinirdrDispatchTable(_In_ PDRIVER_OBJECT DriverObject)
NTSTATUS NTAPI RxCompleteMdl(_In_ PRX_CONTEXT RxContext)
VOID NTAPI RxUnload(_In_ PDRIVER_OBJECT DriverObject)
VOID RxDereference(_Inout_ PVOID Instance, _In_ LOCK_HOLDING_STATE LockHoldingState)
VOID RxCompleteRequest_Real(_In_ PRX_CONTEXT RxContext, _In_ PIRP Irp, _In_ NTSTATUS Status)
NTSTATUS RxLowIoLockControlShell(_In_ PRX_CONTEXT RxContext)
VOID RxExtractServerName(_In_ PUNICODE_STRING FilePathName, _Out_ PUNICODE_STRING SrvCallName, _Out_ PUNICODE_STRING RestOfName)
#define RxSetShareAccess(a1, a2, a3, a4, a5, a6)
NTSTATUS RxPrefixClaim(_In_ PRX_CONTEXT RxContext)
VOID NTAPI RxUnlockOperation(_In_ PVOID Context, _In_ PFILE_LOCK_INFO LockInfo)
NTSTATUS RxFsdPostRequest(_In_ PRX_CONTEXT RxContext)
VOID NTAPI RxCancelRoutine(_In_ PDEVICE_OBJECT DeviceObject, _In_ PIRP Irp)
VOID RxpWorkerThreadDispatcher(_In_ PRX_WORK_QUEUE WorkQueue, _In_ PLARGE_INTEGER WaitInterval)
NTSTATUS RxConstructSrvCall(_In_ PRX_CONTEXT RxContext, _In_ PSRV_CALL SrvCall, _Out_ PLOCK_HOLDING_STATE LockHoldingState)
enum _RX_NAME_CONJURING_METHODS RX_NAME_CONJURING_METHODS
VOID __RxReleaseFcbForThread(_Inout_opt_ PRX_CONTEXT RxContext, _Inout_ PMRX_FCB MrxFcb, _In_ ERESOURCE_THREAD ResourceThreadId)
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)
VOID RxVerifyOperationIsLegal(_In_ PRX_CONTEXT RxContext)
_RX_NAME_CONJURING_METHODS
@ VNetRoot_As_DriveLetter
NTSTATUS RxInitializeSrvCallParameters(_In_ PRX_CONTEXT RxContext, _Inout_ PSRV_CALL SrvCall)
VOID NTAPI RxReleaseFcbFromReadAhead(_In_ PVOID Null)
VOID RxOrphanSrvOpensForThisFcb(_In_ PFCB Fcb, _In_ PV_NET_ROOT ThisVNetRoot, _In_ BOOLEAN OrphanAll)
ULONG RxGetNetworkProviderPriority(_In_ PUNICODE_STRING DeviceName)
NTSTATUS RxPostStackOverflowRead(_In_ PRX_CONTEXT RxContext)
NTSTATUS RxFindOrConstructVirtualNetRoot(_In_ PRX_CONTEXT RxContext, _In_ PUNICODE_STRING CanonicalName, _In_ NET_ROOT_TYPE NetRootType, _In_ PUNICODE_STRING RemainingName)
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 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 RxConstructNetRoot(_In_ PRX_CONTEXT RxContext, _In_ PSRV_CALL SrvCall, _In_ PNET_ROOT NetRoot, _In_ PV_NET_ROOT VirtualNetRoot, _Out_ PLOCK_HOLDING_STATE LockHoldingState)
BOOLEAN NTAPI RxAcquireFcbForReadAhead(_In_ PVOID Null, _In_ BOOLEAN Wait)
NTSTATUS RxpLookupSrvOpenForRequestLite(_In_ PSRV_CALL SrvCall, _Inout_ PCHANGE_BUFFERING_STATE_REQUEST Request)
#define RxCheckShareAccess(a1, a2, a3, a4, a5, a6, a7)
VOID RxWaitForStableCondition(_In_ PRX_BLOCK_CONDITION Condition, _Inout_ PLIST_ENTRY TransitionWaitList, _Inout_ PRX_CONTEXT RxContext, _Out_opt_ NTSTATUS *AsyncStatus)
#define RxUpdateShareAccess(a1, a2, a3, a4)
VOID RxOrphanSrvOpens(_In_ PV_NET_ROOT ThisVNetRoot)
NTSTATUS RxInitializeWorkQueueDispatcher(_In_ PRX_WORK_QUEUE_DISPATCHER Dispatcher)
VOID RxReference(_Inout_ PVOID Instance)
VOID RxOrphanThisFcb(_In_ PFCB Fcb)
#define RxTrackerUpdateHistory(R, F, O, L, F, S)
BOOLEAN NTAPI RxNoOpAcquire(_In_ PVOID Fcb, _In_ BOOLEAN Wait)
VOID RxFreeObject(_In_ PVOID pObject)
BOOLEAN NTAPI RxAcquireFcbForLazyWrite(_In_ PVOID Null, _In_ BOOLEAN Wait)
ULONG RxGetSessionId(_In_ PIO_STACK_LOCATION IrpSp)
VOID RxInitializeWorkQueue(_In_ PRX_WORK_QUEUE WorkQueue, _In_ WORK_QUEUE_TYPE WorkQueueType, _In_ ULONG MaximumNumberOfWorkerThreads, _In_ ULONG MinimumNumberOfWorkerThreads)
PVOID RxAllocateFcbObject(_In_ PRDBSS_DEVICE_OBJECT RxDeviceObject, _In_ NODE_TYPE_CODE NodeType, _In_ POOL_TYPE PoolType, _In_ ULONG NameSize, _In_opt_ PVOID AlreadyAllocatedObject)
VOID RxRemoveVirtualNetRootFromNetRoot(_In_ PNET_ROOT NetRoot, _In_ PV_NET_ROOT VNetRoot)
NTSTATUS RxCompleteRequest(_In_ PRX_CONTEXT pContext, _In_ NTSTATUS Status)
VOID RxUpdateShareAccessPerSrvOpens(_In_ PSRV_OPEN SrvOpen)
VOID RxFreeFcbObject(_In_ PVOID Object)
NTSTATUS RxLowIoCompletionTail(_In_ PRX_CONTEXT RxContext)
NTSTATUS NTAPI RxLockOperationCompletion(_In_ PVOID Context, _In_ PIRP Irp)
VOID RxAddVirtualNetRootToNetRoot(_In_ PNET_ROOT NetRoot, _In_ PV_NET_ROOT VNetRoot)
VOID __RxReleaseFcb(_Inout_opt_ PRX_CONTEXT RxContext, _Inout_ PMRX_FCB MrxFcb)
VOID NTAPI RxCheckFcbStructuresForAlignment(VOID)
BOOLEAN RxPurgeFobx(PFOBX pFobx)
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 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)
LUID RxGetUid(_In_ PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext)
VOID RxGatherRequestsForSrvOpen(_Inout_ PSRV_CALL SrvCall, _In_ PSRV_OPEN SrvOpen, _Inout_ PLIST_ENTRY RequestsListHead)
BOOLEAN RxFinalizeNetFcb(_Out_ PFCB ThisFcb, _In_ BOOLEAN RecursiveFinalize, _In_ BOOLEAN ForceFinalize, _In_ LONG ReferenceCount)
VOID RxPrepareRequestForReuse(PCHANGE_BUFFERING_STATE_REQUEST Request)
VOID RxPurgeFcb(_In_ PFCB Fcb)
VOID NTAPI RxAddToWorkque(_In_ PRX_CONTEXT RxContext, _In_ PIRP Irp)
VOID RxUpdateCondition(_In_ RX_BLOCK_CONDITION NewConditionValue, _Out_ PRX_BLOCK_CONDITION Condition, _In_ OUT PLIST_ENTRY TransitionWaitList)
PVOID RxAllocateObject(_In_ NODE_TYPE_CODE NodeType, _In_opt_ PMINIRDR_DISPATCH MRxDispatch, _In_ ULONG NameLength)
VOID NTAPI RxLogEventDirect(_In_ PRDBSS_DEVICE_OBJECT DeviceObject, _In_ PUNICODE_STRING OriginatorId, _In_ ULONG EventId, _In_ NTSTATUS Status, _In_ ULONG Line)
VOID RxLockUserBuffer(_In_ PRX_CONTEXT RxContext, _In_ LOCK_OPERATION Operation, _In_ ULONG BufferLength)
NTSTATUS NTAPI RxPrepareToReparseSymbolicLink(PRX_CONTEXT RxContext, BOOLEAN SymbolicLinkEmbeddedInOldPath, PUNICODE_STRING NewPath, BOOLEAN NewPathIsAbsolute, PBOOLEAN ReparseRequired)
#define RxRemoveShareAccess(a1, a2, a3, a4)
NTSTATUS RxCloseAssociatedSrvOpen(_In_ PFOBX Fobx, _In_opt_ PRX_CONTEXT RxContext)
VOID NTAPI RxReleaseFcbFromLazyWrite(_In_ PVOID Null)
enum _LOCK_HOLDING_STATE * PLOCK_HOLDING_STATE
enum _LOCK_HOLDING_STATE LOCK_HOLDING_STATE
VOID(NTAPI * PRX_WORKERTHREAD_ROUTINE)(_In_ PVOID Context)
_Must_inspect_result_ _In_ WDFCOLLECTION _In_ WDFOBJECT Object
_In_ PDEVICE_OBJECT DeviceObject
_Must_inspect_result_ _In_ WDFDEVICE _In_ ULONG _In_ ACCESS_MASK DesiredAccess
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ _Strict_type_match_ POOL_TYPE PoolType
_In_ WDFREQUEST _In_ WDFFILEOBJECT FileObject
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ ULONG BufferLength
_Must_inspect_result_ _In_ PWDFDEVICE_INIT _In_opt_ PCUNICODE_STRING DeviceName
_In_ WDFDPC _In_ BOOLEAN Wait
_Must_inspect_result_ _In_ PDRIVER_OBJECT _In_ PCUNICODE_STRING RegistryPath
_Must_inspect_result_ _In_ PDRIVER_OBJECT DriverObject
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_WMI_INSTANCE_CONFIG _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_opt_ WDFWMIINSTANCE * Instance
_In_ ERESOURCE_THREAD ResourceThreadId
enum _WORK_QUEUE_TYPE WORK_QUEUE_TYPE
ULONG_PTR ERESOURCE_THREAD
_In_ ULONG DesiredShareAccess
enum _LOCK_OPERATION LOCK_OPERATION
_In_ BOOLEAN _In_ ULONG _Out_ PULONG HashValue
_Inout_opt_ PVOID Parameter
_In_ PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext