10 extern RX_SPIN_LOCK RxStrucSupSpinLock
;
12 typedef struct _RDBSS_EXPORTS
14 PRX_SPIN_LOCK pRxStrucSupSpinLock
;
15 PLONG pRxDebugTraceIndent
;
16 } RDBSS_EXPORTS
, *PRDBSS_EXPORTS
;
18 typedef enum _LOCK_HOLDING_STATE
23 } LOCK_HOLDING_STATE
, *PLOCK_HOLDING_STATE
;
25 typedef struct _RDBSS_DATA
27 NODE_TYPE_CODE NodeTypeCode
;
28 NODE_BYTE_SIZE NodeByteSize
;
29 PDRIVER_OBJECT DriverObject
;
30 volatile LONG NumberOfMinirdrsStarted
;
31 FAST_MUTEX MinirdrRegistrationMutex
;
32 LIST_ENTRY RegisteredMiniRdrs
;
33 LONG NumberOfMinirdrsRegistered
;
35 CACHE_MANAGER_CALLBACKS CacheManagerCallbacks
;
36 #if (_WIN32_WINNT < 0x0600)
37 CACHE_MANAGER_CALLBACKS CacheManagerNoOpCallbacks
;
41 typedef RDBSS_DATA
*PRDBSS_DATA
;
43 extern RDBSS_DATA RxData
;
50 typedef enum _RX_RDBSS_STATE_
54 RDBSS_STOP_IN_PROGRESS
55 } RX_RDBSS_STATE
, *PRX_RDBSS_STATE
;
57 typedef struct _RDBSS_STARTSTOP_CONTEXT_
61 PRX_CONTEXT pStopContext
;
62 } RDBSS_STARTSTOP_CONTEXT
, *PRDBSS_STARTSTOP_CONTEXT
;
64 typedef struct _RX_DISPATCHER_CONTEXT_
66 volatile LONG NumberOfWorkerThreads
;
67 volatile PKEVENT pTearDownEvent
;
68 } RX_DISPATCHER_CONTEXT
, *PRX_DISPATCHER_CONTEXT
;
70 #define RxSetRdbssState(RxDeviceObject, NewState) \
73 KeAcquireSpinLock(&RxStrucSupSpinLock, &OldIrql); \
74 RxDeviceObject->StartStopContext.State = (NewState); \
75 KeReleaseSpinLock(&RxStrucSupSpinLock, OldIrql); \
78 #define RxGetRdbssState(RxDeviceObject) RxDeviceObject->StartStopContext.State
80 typedef struct _RDBSS_DEVICE_OBJECT
{
83 DEVICE_OBJECT DeviceObject
;
86 ULONG RegistrationControls
;
87 PRDBSS_EXPORTS RdbssExports
;
88 PDEVICE_OBJECT RDBSSDeviceObject
;
89 PMINIRDR_DISPATCH Dispatch
;
90 UNICODE_STRING DeviceName
;
91 ULONG NetworkProviderPriority
;
93 BOOLEAN RegisterUncProvider
;
94 BOOLEAN RegisterMailSlotProvider
;
95 BOOLEAN RegisteredAsFileSystem
;
97 LIST_ENTRY MiniRdrListLinks
;
98 volatile ULONG NumberOfActiveFcbs
;
99 volatile ULONG NumberOfActiveContexts
;
102 LARGE_INTEGER PagingReadBytesRequested
;
103 LARGE_INTEGER NonPagingReadBytesRequested
;
104 LARGE_INTEGER CacheReadBytesRequested
;
105 LARGE_INTEGER FastReadBytesRequested
;
106 LARGE_INTEGER NetworkReadBytesRequested
;
107 volatile ULONG ReadOperations
;
108 ULONG FastReadOperations
;
109 volatile ULONG RandomReadOperations
;
110 LARGE_INTEGER PagingWriteBytesRequested
;
111 LARGE_INTEGER NonPagingWriteBytesRequested
;
112 LARGE_INTEGER CacheWriteBytesRequested
;
113 LARGE_INTEGER FastWriteBytesRequested
;
114 LARGE_INTEGER NetworkWriteBytesRequested
;
115 volatile ULONG WriteOperations
;
116 ULONG FastWriteOperations
;
117 volatile ULONG RandomWriteOperations
;
119 volatile LONG PostedRequestCount
[RxMaximumWorkQueue
];
120 LONG OverflowQueueCount
[RxMaximumWorkQueue
];
121 LIST_ENTRY OverflowQueue
[RxMaximumWorkQueue
];
122 RX_SPIN_LOCK OverflowQueueSpinLock
;
123 LONG AsynchronousRequestsPending
;
124 PKEVENT pAsynchronousRequestsCompletionEvent
;
125 RDBSS_STARTSTOP_CONTEXT StartStopContext
;
126 RX_DISPATCHER_CONTEXT DispatcherContext
;
127 PRX_PREFIX_TABLE pRxNetNameTable
;
128 RX_PREFIX_TABLE RxNetNameTableInDeviceObject
;
129 PRDBSS_SCAVENGER pRdbssScavenger
;
130 RDBSS_SCAVENGER RdbssScavengerInDeviceObject
;
131 } RDBSS_DEVICE_OBJECT
, *PRDBSS_DEVICE_OBJECT
;
137 _In_ PRDBSS_DEVICE_OBJECT RxDeviceObject
)
139 PDEVICE_OBJECT RDBSSDeviceObject
;
141 RDBSSDeviceObject
= RxDeviceObject
->RDBSSDeviceObject
;
143 RxpUnregisterMinirdr(RxDeviceObject
);
145 if (RDBSSDeviceObject
!= NULL
)
147 ObDereferenceObject(RDBSSDeviceObject
);