[DDK][PSDK] Add some missing NDIS definitions/types. Caught by Benjamin Aerni.
[reactos.git] / sdk / include / ddk / rxprocs.h
1 #ifndef _RDBSSPROCS_
2 #define _RDBSSPROCS_
3
4 #include "backpack.h"
5 #include "rxlog.h"
6 #include "rxtimer.h"
7 #include "rxstruc.h"
8
9 extern PVOID RxNull;
10
11 #define RxLogFailure(DO, Originator, Event, Status) \
12 RxLogEventDirect(DO, Originator, Event, Status, __LINE__)
13
14 VOID
15 NTAPI
16 RxLogEventDirect(
17 _In_ PRDBSS_DEVICE_OBJECT DeviceObject,
18 _In_ PUNICODE_STRING OriginatorId,
19 _In_ ULONG EventId,
20 _In_ NTSTATUS Status,
21 _In_ ULONG Line);
22
23 VOID
24 NTAPI
25 RxLogEventWithAnnotation(
26 _In_ PRDBSS_DEVICE_OBJECT DeviceObject,
27 _In_ ULONG EventId,
28 _In_ NTSTATUS Status,
29 _In_ PVOID DataBuffer,
30 _In_ USHORT DataBufferLength,
31 _In_ PUNICODE_STRING Annotation,
32 _In_ ULONG AnnotationCount);
33
34 NTSTATUS
35 RxPrefixClaim(
36 _In_ PRX_CONTEXT RxContext);
37
38 VOID
39 RxpPrepareCreateContextForReuse(
40 _In_ PRX_CONTEXT RxContext);
41
42 NTSTATUS
43 RxLowIoCompletionTail(
44 _In_ PRX_CONTEXT RxContext);
45
46 LUID
47 RxGetUid(
48 _In_ PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext);
49
50 ULONG
51 RxGetSessionId(
52 _In_ PIO_STACK_LOCATION IrpSp);
53
54 #if (_WIN32_WINNT >= 0x0600)
55 NTSTATUS
56 RxFindOrCreateConnections(
57 _In_ PRX_CONTEXT RxContext,
58 _In_ PIRP Irp,
59 _In_ PUNICODE_STRING CanonicalName,
60 _In_ NET_ROOT_TYPE NetRootType,
61 _In_ BOOLEAN TreeConnect,
62 _Out_ PUNICODE_STRING LocalNetRootName,
63 _Out_ PUNICODE_STRING FilePathName,
64 _Inout_ PLOCK_HOLDING_STATE LockState,
65 _In_ PRX_CONNECTION_ID RxConnectionId);
66 #else
67 NTSTATUS
68 RxFindOrCreateConnections(
69 _In_ PRX_CONTEXT RxContext,
70 _In_ PUNICODE_STRING CanonicalName,
71 _In_ NET_ROOT_TYPE NetRootType,
72 _Out_ PUNICODE_STRING LocalNetRootName,
73 _Out_ PUNICODE_STRING FilePathName,
74 _Inout_ PLOCK_HOLDING_STATE LockState,
75 _In_ PRX_CONNECTION_ID RxConnectionId);
76 #endif
77
78 typedef enum _RX_NAME_CONJURING_METHODS
79 {
80 VNetRoot_As_Prefix,
81 VNetRoot_As_UNC_Name,
82 VNetRoot_As_DriveLetter
83 } RX_NAME_CONJURING_METHODS;
84
85 VOID
86 RxConjureOriginalName(
87 _Inout_ PFCB Fcb,
88 _Inout_ PFOBX Fobx,
89 _Out_ PULONG ActualNameLength,
90 _Out_writes_bytes_( *LengthRemaining) PWCHAR OriginalName,
91 _Inout_ PLONG LengthRemaining,
92 _In_ RX_NAME_CONJURING_METHODS NameConjuringMethod);
93
94 #if (_WIN32_WINNT >= 0x0600)
95 NTSTATUS
96 RxCompleteMdl(
97 _In_ PRX_CONTEXT RxContext,
98 _In_ PIRP Irp);
99 #else
100 NTSTATUS
101 NTAPI
102 RxCompleteMdl(
103 _In_ PRX_CONTEXT RxContext);
104 #endif
105
106 #if (_WIN32_WINNT >= 0x0600)
107 VOID
108 RxLockUserBuffer(
109 _In_ PRX_CONTEXT RxContext,
110 _In_ PIRP Irp,
111 _In_ LOCK_OPERATION Operation,
112 _In_ ULONG BufferLength);
113
114 PVOID
115 RxMapSystemBuffer(
116 _In_ PRX_CONTEXT RxContext,
117 _In_ PIRP Irp);
118 #else
119 VOID
120 RxLockUserBuffer(
121 _In_ PRX_CONTEXT RxContext,
122 _In_ LOCK_OPERATION Operation,
123 _In_ ULONG BufferLength);
124
125 PVOID
126 RxMapSystemBuffer(
127 _In_ PRX_CONTEXT RxContext);
128 #endif
129
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
134
135 #define CHANGE_BUFFERING_STATE_CONTEXT ((PRX_CONTEXT)IntToPtr(0xffffffff))
136 #define CHANGE_BUFFERING_STATE_CONTEXT_WAIT ((PRX_CONTEXT)IntToPtr(0xfffffffe))
137
138 NTSTATUS
139 __RxAcquireFcb(
140 _Inout_ PFCB Fcb,
141 _Inout_opt_ PRX_CONTEXT RxContext,
142 _In_ ULONG Mode
143 #ifdef RDBSS_TRACKER
144 ,
145 _In_ ULONG LineNumber,
146 _In_ PCSTR FileName,
147 _In_ ULONG SerialNumber
148 #endif
149 );
150
151 #ifdef RDBSS_TRACKER
152 #define RxAcquireExclusiveFcb(R, F) __RxAcquireFcb((F), (R), FCB_MODE_EXCLUSIVE, __LINE__, __FILE__, 0)
153 #else
154 #define RxAcquireExclusiveFcb(R, F) __RxAcquireFcb((F), (R), FCB_MODE_EXCLUSIVE)
155 #endif
156
157 #define RX_GET_MRX_FCB(F) ((PMRX_FCB)((F)))
158
159 #ifdef RDBSS_TRACKER
160 #define RxAcquireSharedFcb(R, F) __RxAcquireFcb((F), (R), FCB_MODE_SHARED, __LINE__, __FILE__, 0)
161 #else
162 #define RxAcquireSharedFcb(R, F) __RxAcquireFcb((F), (R), FCB_MODE_SHARED)
163 #endif
164
165 #ifdef RDBSS_TRACKER
166 #define RxAcquireSharedFcbWaitForEx(R, F) __RxAcquireFcb((F),(R), FCB_MODE_SHARED_WAIT_FOR_EXCLUSIVE, __LINE__, __FILE__,0)
167 #else
168 #define RxAcquireSharedFcbWaitForEx(R, F) __RxAcquireFcb((F), (R), FCB_MODE_SHARED_WAIT_FOR_EXCLUSIVE)
169 #endif
170
171 VOID
172 __RxReleaseFcb(
173 _Inout_opt_ PRX_CONTEXT RxContext,
174 _Inout_ PMRX_FCB MrxFcb
175 #ifdef RDBSS_TRACKER
176 ,
177 _In_ ULONG LineNumber,
178 _In_ PCSTR FileName,
179 _In_ ULONG SerialNumber
180 #endif
181 );
182
183 #ifdef RDBSS_TRACKER
184 #define RxReleaseFcb(R, F) __RxReleaseFcb((R), RX_GET_MRX_FCB(F), __LINE__, __FILE__, 0)
185 #else
186 #define RxReleaseFcb(R, F) __RxReleaseFcb((R), RX_GET_MRX_FCB(F))
187 #endif
188
189 VOID
190 __RxReleaseFcbForThread(
191 _Inout_opt_ PRX_CONTEXT RxContext,
192 _Inout_ PMRX_FCB MrxFcb,
193 _In_ ERESOURCE_THREAD ResourceThreadId
194 #ifdef RDBSS_TRACKER
195 ,
196 _In_ ULONG LineNumber,
197 _In_ PCSTR FileName,
198 _In_ ULONG SerialNumber
199 #endif
200 );
201
202 #ifdef RDBSS_TRACKER
203 #define RxReleaseFcbForThread(R, F, T) __RxReleaseFcbForThread((R), RX_GET_MRX_FCB(F), (T), __LINE__, __FILE__, 0)
204 #else
205 #define RxReleaseFcbForThread(R, F, T) __RxReleaseFcbForThread((R), RX_GET_MRX_FCB(F), (T))
206 #endif
207
208 #ifdef RDBSS_TRACKER
209 VOID
210 RxTrackerUpdateHistory(
211 _Inout_opt_ PRX_CONTEXT RxContext,
212 _Inout_ PMRX_FCB MrxFcb,
213 _In_ ULONG Operation,
214 _In_ ULONG LineNumber,
215 _In_ PCSTR FileName,
216 _In_ ULONG SerialNumber);
217 #else
218 #define RxTrackerUpdateHistory(R, F, O, L, F, S) { NOTHING; }
219 #endif
220
221 VOID
222 RxTrackPagingIoResource(
223 _Inout_ PVOID Instance,
224 _In_ ULONG Type,
225 _In_ ULONG Line,
226 _In_ PCSTR File);
227
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))
232
233 #define RxAcquirePagingIoResource(RxContext, Fcb) \
234 ExAcquireResourceExclusiveLite((Fcb)->Header.PagingIoResource, TRUE); \
235 if (RxContext != NULL) \
236 { \
237 (RxContext)->FcbPagingIoResourceAcquired = TRUE; \
238 } \
239 RxTrackPagingIoResource(Fcb, 1, __LINE__, __FILE__)
240
241 #ifndef __REACTOS__
242 #define RxAcquirePagingIoResourceShared(RxContext, Fcb, Flag) \
243 ExAcquireResourceSharedLite((Fcb)->Header.PagingIoResource, Flag); \
244 if (AcquiredFile) \
245 { \
246 if (RxContext != NULL) \
247 { \
248 ((PRX_CONTEXT)RxContext)->FcbPagingIoResourceAcquired = TRUE; \
249 } \
250 RxTrackPagingIoResource(Fcb, 2, __LINE__, __FILE__); \
251 }
252 #else
253 #define RxAcquirePagingIoResourceShared(RxContext, Fcb, Flag) \
254 { \
255 BOOLEAN AcquiredFile; \
256 AcquiredFile = ExAcquireResourceSharedLite((Fcb)->Header.PagingIoResource, Flag); \
257 if (AcquiredFile) \
258 { \
259 if (RxContext != NULL) \
260 { \
261 ((PRX_CONTEXT)RxContext)->FcbPagingIoResourceAcquired = TRUE; \
262 } \
263 RxTrackPagingIoResource(Fcb, 2, __LINE__, __FILE__); \
264 } \
265 }
266 #endif
267
268 #define RxReleasePagingIoResource(RxContext, Fcb) \
269 RxTrackPagingIoResource(Fcb, 3, __LINE__, __FILE__); \
270 if (RxContext != NULL) \
271 { \
272 (RxContext)->FcbPagingIoResourceAcquired = FALSE; \
273 } \
274 ExReleaseResourceLite((Fcb)->Header.PagingIoResource)
275
276 #define RxReleasePagingIoResourceForThread(RxContext, Fcb, Thread) \
277 RxTrackPagingIoResource(Fcb, 3, __LINE__, __FILE__); \
278 if (RxContext != NULL) \
279 { \
280 (RxContext)->FcbPagingIoResourceAcquired = FALSE; \
281 } \
282 ExReleaseResourceForThreadLite((Fcb)->Header.PagingIoResource, (Thread))
283
284 #ifdef __REACTOS__
285 VOID
286 __RxWriteReleaseResources(
287 PRX_CONTEXT RxContext,
288 BOOLEAN ResourceOwnerSet
289 #ifdef RDBSS_TRACKER
290 ,
291 ULONG LineNumber,
292 PCSTR FileName,
293 ULONG SerialNumber
294 #endif
295 );
296
297 #ifdef RDBSS_TRACKER
298 #define RxWriteReleaseResources(R, B) __RxWriteReleaseResources((R), (B), __LINE__, __FILE__, 0)
299 #else
300 #define RxWriteReleaseResources(R, B) __RxWriteReleaseResources((R), (B))
301 #endif
302 #endif
303
304 BOOLEAN
305 NTAPI
306 RxAcquireFcbForLazyWrite(
307 _In_ PVOID Null,
308 _In_ BOOLEAN Wait);
309
310 VOID
311 NTAPI
312 RxReleaseFcbFromLazyWrite(
313 _In_ PVOID Null);
314
315 BOOLEAN
316 NTAPI
317 RxAcquireFcbForReadAhead(
318 _In_ PVOID Null,
319 _In_ BOOLEAN Wait);
320
321 VOID
322 NTAPI
323 RxReleaseFcbFromReadAhead(
324 _In_ PVOID Null);
325
326 BOOLEAN
327 NTAPI
328 RxNoOpAcquire(
329 _In_ PVOID Fcb,
330 _In_ BOOLEAN Wait);
331
332 VOID
333 NTAPI
334 RxNoOpRelease(
335 _In_ PVOID Fcb);
336
337 #define RxConvertToSharedFcb(R, F) ExConvertExclusiveToSharedLite(RX_GET_MRX_FCB(F)->Header.Resource)
338
339 VOID
340 RxVerifyOperationIsLegal(
341 _In_ PRX_CONTEXT RxContext);
342
343 VOID
344 RxPrePostIrp(
345 _In_ PVOID Context,
346 _In_ PIRP Irp);
347
348 VOID
349 NTAPI
350 RxAddToWorkque(
351 _In_ PRX_CONTEXT RxContext,
352 _In_ PIRP Irp);
353
354 NTSTATUS
355 RxFsdPostRequest(
356 _In_ PRX_CONTEXT RxContext);
357
358 #define QuadAlign(V) (ALIGN_UP(V, ULONGLONG))
359
360 VOID
361 RxCompleteRequest_Real(
362 _In_ PRX_CONTEXT RxContext,
363 _In_ PIRP Irp,
364 _In_ NTSTATUS Status);
365
366 NTSTATUS
367 RxCompleteRequest(
368 _In_ PRX_CONTEXT pContext,
369 _In_ NTSTATUS Status);
370
371 #if (_WIN32_WINNT >= 0x600)
372 NTSTATUS
373 RxConstructSrvCall(
374 _In_ PRX_CONTEXT RxContext,
375 _In_ PIRP Irp,
376 _In_ PSRV_CALL SrvCall,
377 _Out_ PLOCK_HOLDING_STATE LockHoldingState);
378 #else
379 NTSTATUS
380 RxConstructSrvCall(
381 _In_ PRX_CONTEXT RxContext,
382 _In_ PSRV_CALL SrvCall,
383 _Out_ PLOCK_HOLDING_STATE LockHoldingState);
384 #endif
385
386 #define RxCompleteAsynchronousRequest(C, S) RxCompleteRequest(C, S)
387
388 NTSTATUS
389 RxConstructNetRoot(
390 _In_ PRX_CONTEXT RxContext,
391 _In_ PSRV_CALL SrvCall,
392 _In_ PNET_ROOT NetRoot,
393 _In_ PV_NET_ROOT VirtualNetRoot,
394 _Out_ PLOCK_HOLDING_STATE LockHoldingState);
395
396 #if (_WIN32_WINNT >= 0x0600)
397 NTSTATUS
398 RxConstructVirtualNetRoot(
399 _In_ PRX_CONTEXT RxContext,
400 _In_ PIRP Irp,
401 _In_ PUNICODE_STRING CanonicalName,
402 _In_ NET_ROOT_TYPE NetRootType,
403 _In_ BOOLEAN TreeConnect,
404 _Out_ PV_NET_ROOT *VirtualNetRootPointer,
405 _Out_ PLOCK_HOLDING_STATE LockHoldingState,
406 _Out_ PRX_CONNECTION_ID RxConnectionId);
407
408 NTSTATUS
409 RxFindOrConstructVirtualNetRoot(
410 _In_ PRX_CONTEXT RxContext,
411 _In_ PIRP Irp,
412 _In_ PUNICODE_STRING CanonicalName,
413 _In_ NET_ROOT_TYPE NetRootType,
414 _In_ PUNICODE_STRING RemainingName);
415 #else
416 NTSTATUS
417 RxConstructVirtualNetRoot(
418 _In_ PRX_CONTEXT RxContext,
419 _In_ PUNICODE_STRING CanonicalName,
420 _In_ NET_ROOT_TYPE NetRootType,
421 _Out_ PV_NET_ROOT *VirtualNetRootPointer,
422 _Out_ PLOCK_HOLDING_STATE LockHoldingState,
423 _Out_ PRX_CONNECTION_ID RxConnectionId);
424
425 NTSTATUS
426 RxFindOrConstructVirtualNetRoot(
427 _In_ PRX_CONTEXT RxContext,
428 _In_ PUNICODE_STRING CanonicalName,
429 _In_ NET_ROOT_TYPE NetRootType,
430 _In_ PUNICODE_STRING RemainingName);
431 #endif
432
433 #if (_WIN32_WINNT >= 0x0600)
434 NTSTATUS
435 RxLowIoLockControlShell(
436 _In_ PRX_CONTEXT RxContext,
437 _In_ PIRP Irp,
438 _In_ PFCB Fcb);
439 #else
440 NTSTATUS
441 RxLowIoLockControlShell(
442 _In_ PRX_CONTEXT RxContext);
443 #endif
444
445 NTSTATUS
446 NTAPI
447 RxChangeBufferingState(
448 PSRV_OPEN SrvOpen,
449 PVOID Context,
450 BOOLEAN ComputeNewState);
451
452 VOID
453 NTAPI
454 RxIndicateChangeOfBufferingStateForSrvOpen(
455 PMRX_SRV_CALL SrvCall,
456 PMRX_SRV_OPEN SrvOpen,
457 PVOID SrvOpenKey,
458 PVOID Context);
459
460 NTSTATUS
461 NTAPI
462 RxPrepareToReparseSymbolicLink(
463 PRX_CONTEXT RxContext,
464 BOOLEAN SymbolicLinkEmbeddedInOldPath,
465 PUNICODE_STRING NewPath,
466 BOOLEAN NewPathIsAbsolute,
467 PBOOLEAN ReparseRequired);
468
469 VOID
470 RxReference(
471 _Inout_ PVOID Instance);
472
473 VOID
474 RxDereference(
475 _Inout_ PVOID Instance,
476 _In_ LOCK_HOLDING_STATE LockHoldingState);
477
478 VOID
479 RxWaitForStableCondition(
480 _In_ PRX_BLOCK_CONDITION Condition,
481 _Inout_ PLIST_ENTRY TransitionWaitList,
482 _Inout_ PRX_CONTEXT RxContext,
483 _Out_opt_ NTSTATUS *AsyncStatus);
484
485 VOID
486 RxUpdateCondition(
487 _In_ RX_BLOCK_CONDITION NewConditionValue,
488 _Out_ PRX_BLOCK_CONDITION Condition,
489 _In_ OUT PLIST_ENTRY TransitionWaitList);
490
491 #if (_WIN32_WINNT >= 0x0600)
492 NTSTATUS
493 RxCloseAssociatedSrvOpen(
494 _In_opt_ PRX_CONTEXT RxContext,
495 _In_ PFOBX Fobx);
496 #else
497 NTSTATUS
498 RxCloseAssociatedSrvOpen(
499 _In_ PFOBX Fobx,
500 _In_opt_ PRX_CONTEXT RxContext);
501 #endif
502
503 NTSTATUS
504 NTAPI
505 RxFinalizeConnection(
506 _Inout_ PNET_ROOT NetRoot,
507 _Inout_opt_ PV_NET_ROOT VNetRoot,
508 _In_ LOGICAL ForceFilesClosed);
509
510 #if DBG
511 VOID
512 RxDumpWantedAccess(
513 _In_ PSZ where1,
514 _In_ PSZ where2,
515 _In_ PSZ wherelogtag,
516 _In_ ACCESS_MASK DesiredAccess,
517 _In_ ULONG DesiredShareAccess);
518
519 VOID
520 RxDumpCurrentAccess(
521 _In_ PSZ where1,
522 _In_ PSZ where2,
523 _In_ PSZ wherelogtag,
524 _In_ PSHARE_ACCESS ShareAccess);
525 #else
526 #define RxDumpWantedAccess(w1,w2,wlt,DA,DSA) {NOTHING;}
527 #define RxDumpCurrentAccess(w1,w2,wlt,SA) {NOTHING;}
528 #endif
529
530 NTSTATUS
531 RxCheckShareAccessPerSrvOpens(
532 _In_ PFCB Fcb,
533 _In_ ACCESS_MASK DesiredAccess,
534 _In_ ULONG DesiredShareAccess);
535
536 VOID
537 RxUpdateShareAccessPerSrvOpens(
538 _In_ PSRV_OPEN SrvOpen);
539
540 VOID
541 RxRemoveShareAccessPerSrvOpens(
542 _Inout_ PSRV_OPEN SrvOpen);
543
544 #if DBG
545 NTSTATUS
546 RxCheckShareAccess(
547 _In_ ACCESS_MASK DesiredAccess,
548 _In_ ULONG DesiredShareAccess,
549 _Inout_ PFILE_OBJECT FileObject,
550 _Inout_ PSHARE_ACCESS ShareAccess,
551 _In_ BOOLEAN Update,
552 _In_ PSZ where,
553 _In_ PSZ wherelogtag);
554
555 VOID
556 RxRemoveShareAccess(
557 _Inout_ PFILE_OBJECT FileObject,
558 _Inout_ PSHARE_ACCESS ShareAccess,
559 _In_ PSZ where,
560 _In_ PSZ wherelogtag);
561
562 VOID
563 RxSetShareAccess(
564 _In_ ACCESS_MASK DesiredAccess,
565 _In_ ULONG DesiredShareAccess,
566 _Inout_ PFILE_OBJECT FileObject,
567 _Out_ PSHARE_ACCESS ShareAccess,
568 _In_ PSZ where,
569 _In_ PSZ wherelogtag);
570
571 VOID
572 RxUpdateShareAccess(
573 _Inout_ PFILE_OBJECT FileObject,
574 _Inout_ PSHARE_ACCESS ShareAccess,
575 _In_ PSZ where,
576 _In_ PSZ wherelogtag);
577 #else
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)
582 #endif
583
584 NTSTATUS
585 NTAPI
586 RxDriverEntry(
587 _In_ PDRIVER_OBJECT DriverObject,
588 _In_ PUNICODE_STRING RegistryPath);
589
590 VOID
591 NTAPI
592 RxUnload(
593 _In_ PDRIVER_OBJECT DriverObject);
594
595 VOID
596 RxInitializeMinirdrDispatchTable(
597 _In_ PDRIVER_OBJECT DriverObject);
598
599 ULONG
600 RxGetNetworkProviderPriority(
601 _In_ PUNICODE_STRING DeviceName);
602
603 VOID
604 RxPrepareRequestForReuse(
605 PCHANGE_BUFFERING_STATE_REQUEST Request);
606
607 VOID
608 RxpDiscardChangeBufferingStateRequests(
609 _Inout_ PLIST_ENTRY DiscardedRequests);
610
611 VOID
612 RxGatherRequestsForSrvOpen(
613 _Inout_ PSRV_CALL SrvCall,
614 _In_ PSRV_OPEN SrvOpen,
615 _Inout_ PLIST_ENTRY RequestsListHead);
616
617 NTSTATUS
618 RxpLookupSrvOpenForRequestLite(
619 _In_ PSRV_CALL SrvCall,
620 _Inout_ PCHANGE_BUFFERING_STATE_REQUEST Request);
621
622 VOID
623 RxProcessChangeBufferingStateRequestsForSrvOpen(
624 PSRV_OPEN SrvOpen);
625
626 NTSTATUS
627 RxPurgeFobxFromCache(
628 PFOBX FobxToBePurged);
629
630 BOOLEAN
631 RxPurgeFobx(
632 PFOBX pFobx);
633
634 VOID
635 RxUndoScavengerFinalizationMarking(
636 PVOID Instance);
637
638 ULONG
639 RxTableComputePathHashValue(
640 _In_ PUNICODE_STRING Name);
641
642 VOID
643 RxExtractServerName(
644 _In_ PUNICODE_STRING FilePathName,
645 _Out_ PUNICODE_STRING SrvCallName,
646 _Out_ PUNICODE_STRING RestOfName);
647
648 VOID
649 NTAPI
650 RxCreateNetRootCallBack(
651 _In_ PMRX_CREATENETROOT_CONTEXT CreateNetRootContext);
652
653 PVOID
654 RxAllocateObject(
655 _In_ NODE_TYPE_CODE NodeType,
656 _In_opt_ PMINIRDR_DISPATCH MRxDispatch,
657 _In_ ULONG NameLength);
658
659 VOID
660 RxFreeObject(
661 _In_ PVOID pObject);
662
663 NTSTATUS
664 RxInitializeSrvCallParameters(
665 _In_ PRX_CONTEXT RxContext,
666 _Inout_ PSRV_CALL SrvCall);
667
668 VOID
669 RxAddVirtualNetRootToNetRoot(
670 _In_ PNET_ROOT NetRoot,
671 _In_ PV_NET_ROOT VNetRoot);
672
673 VOID
674 RxRemoveVirtualNetRootFromNetRoot(
675 _In_ PNET_ROOT NetRoot,
676 _In_ PV_NET_ROOT VNetRoot);
677
678 PVOID
679 RxAllocateFcbObject(
680 _In_ PRDBSS_DEVICE_OBJECT RxDeviceObject,
681 _In_ NODE_TYPE_CODE NodeType,
682 _In_ POOL_TYPE PoolType,
683 _In_ ULONG NameSize,
684 _In_opt_ PVOID AlreadyAllocatedObject);
685
686 VOID
687 RxFreeFcbObject(
688 _In_ PVOID Object);
689
690 VOID
691 RxPurgeFcb(
692 _In_ PFCB Fcb);
693
694 BOOLEAN
695 RxFinalizeNetFcb(
696 _Out_ PFCB ThisFcb,
697 _In_ BOOLEAN RecursiveFinalize,
698 _In_ BOOLEAN ForceFinalize,
699 _In_ LONG ReferenceCount);
700
701 BOOLEAN
702 RxIsThisACscAgentOpen(
703 _In_ PRX_CONTEXT RxContext);
704
705 VOID
706 NTAPI
707 RxCheckFcbStructuresForAlignment(
708 VOID);
709
710 NTSTATUS
711 RxInitializeWorkQueueDispatcher(
712 _In_ PRX_WORK_QUEUE_DISPATCHER Dispatcher);
713
714 VOID
715 RxInitializeWorkQueue(
716 _In_ PRX_WORK_QUEUE WorkQueue,
717 _In_ WORK_QUEUE_TYPE WorkQueueType,
718 _In_ ULONG MaximumNumberOfWorkerThreads,
719 _In_ ULONG MinimumNumberOfWorkerThreads);
720
721 NTSTATUS
722 RxSpinUpWorkerThread(
723 _In_ PRX_WORK_QUEUE WorkQueue,
724 _In_ PRX_WORKERTHREAD_ROUTINE Routine,
725 _In_ PVOID Parameter);
726
727 VOID
728 RxSpinUpWorkerThreads(
729 _In_ PRX_WORK_QUEUE WorkQueue);
730
731 VOID
732 NTAPI
733 RxSpinUpRequestsDispatcher(
734 _In_ PVOID Dispatcher);
735
736 VOID
737 RxpWorkerThreadDispatcher(
738 _In_ PRX_WORK_QUEUE WorkQueue,
739 _In_ PLARGE_INTEGER WaitInterval);
740
741 VOID
742 NTAPI
743 RxBootstrapWorkerThreadDispatcher(
744 _In_ PVOID WorkQueue);
745
746 PRX_PREFIX_ENTRY
747 RxTableLookupName_ExactLengthMatch(
748 _In_ PRX_PREFIX_TABLE ThisTable,
749 _In_ PUNICODE_STRING Name,
750 _In_ ULONG HashValue,
751 _In_opt_ PRX_CONNECTION_ID RxConnectionId);
752
753 PVOID
754 RxTableLookupName(
755 _In_ PRX_PREFIX_TABLE ThisTable,
756 _In_ PUNICODE_STRING Name,
757 _Out_ PUNICODE_STRING RemainingName,
758 _In_opt_ PRX_CONNECTION_ID RxConnectionId);
759
760 VOID
761 RxOrphanSrvOpens(
762 _In_ PV_NET_ROOT ThisVNetRoot);
763
764 VOID
765 RxOrphanThisFcb(
766 _In_ PFCB Fcb);
767
768 VOID
769 RxOrphanSrvOpensForThisFcb(
770 _In_ PFCB Fcb,
771 _In_ PV_NET_ROOT ThisVNetRoot,
772 _In_ BOOLEAN OrphanAll);
773
774 #define RxEqualConnectionId(C1, C2) RtlEqualMemory(C1, C2, sizeof(RX_CONNECTION_ID))
775
776 NTSTATUS
777 NTAPI
778 RxLockOperationCompletion(
779 _In_ PVOID Context,
780 _In_ PIRP Irp);
781
782 VOID
783 NTAPI
784 RxUnlockOperation(
785 _In_ PVOID Context,
786 _In_ PFILE_LOCK_INFO LockInfo);
787
788 #if (_WIN32_WINNT >= 0x0600)
789 NTSTATUS
790 RxPostStackOverflowRead(
791 _In_ PRX_CONTEXT RxContext,
792 _In_ PFCB Fcb);
793 #else
794 NTSTATUS
795 RxPostStackOverflowRead(
796 _In_ PRX_CONTEXT RxContext);
797 #endif
798
799 VOID
800 NTAPI
801 RxCancelRoutine(
802 _In_ PDEVICE_OBJECT DeviceObject,
803 _In_ PIRP Irp);
804
805 #ifdef __REACTOS__
806 #define RxWriteCacheingAllowed(F, S) ( \
807 BooleanFlagOn((F)->FcbState, FCB_STATE_WRITECACHING_ENABLED) && \
808 !BooleanFlagOn((S)->Flags, SRVOPEN_FLAG_DONTUSE_WRITE_CACHING))
809 #endif
810
811 #endif