Reactos
1#ifndef __BUFFRING_H__
2#define __BUFFRING_H__
3
4#define RX_REQUEST_PREPARED_FOR_HANDLING 0x10000000
5
6typedef struct _CHANGE_BUFFERING_STATE_REQUEST_
7{
8 LIST_ENTRY ListEntry;
9 ULONG Flags;
10#if (_WIN32_WINNT < 0x0600)
11 PSRV_CALL pSrvCall;
12#endif
13 PSRV_OPEN SrvOpen;
14 PVOID SrvOpenKey;
15 PVOID MRxContext;
16} CHANGE_BUFFERING_STATE_REQUEST, *PCHANGE_BUFFERING_STATE_REQUEST;
17
18typedef struct _RX_BUFFERING_MANAGER_
19{
20 BOOLEAN DispatcherActive;
21 BOOLEAN HandlerInactive;
22 BOOLEAN LastChanceHandlerActive;
23 UCHAR Pad;
24 KSPIN_LOCK SpinLock;
25 volatile LONG CumulativeNumberOfBufferingChangeRequests;
26 LONG NumberOfUnhandledRequests;
27 LONG NumberOfUndispatchedRequests;
28 volatile LONG NumberOfOutstandingOpens;
29 LIST_ENTRY DispatcherList;
30 LIST_ENTRY HandlerList;
31 LIST_ENTRY LastChanceHandlerList;
32 RX_WORK_QUEUE_ITEM DispatcherWorkItem;
33 RX_WORK_QUEUE_ITEM HandlerWorkItem;
34 RX_WORK_QUEUE_ITEM LastChanceHandlerWorkItem;
35 FAST_MUTEX Mutex;
36 LIST_ENTRY SrvOpenLists[1];
37} RX_BUFFERING_MANAGER, *PRX_BUFFERING_MANAGER;
38
39#if (_WIN32_WINNT >= 0x0600)
40#define RxAcquireBufferingManagerMutex(BufMan) ExAcquireFastMutex(&(BufMan)->Mutex)
41#else
42#define RxAcquireBufferingManagerMutex(BufMan) \
43 { \
44 if (!ExTryToAcquireFastMutex(&(BufMan)->Mutex)) \
45 { \
46 ExAcquireFastMutex(&(BufMan)->Mutex); \
47 } \
48 }
49#endif
50#define RxReleaseBufferingManagerMutex(BufMan) ExReleaseFastMutex(&(BufMan)->Mutex)
51
52VOID
53RxpProcessChangeBufferingStateRequests(
54 PSRV_CALL SrvCall,
55 BOOLEAN UpdateHandlerState);
56
57VOID
58NTAPI
59RxProcessChangeBufferingStateRequests(
60 _In_ PVOID SrvCall);
61
62VOID
63RxProcessFcbChangeBufferingStateRequest(
64 _In_ PFCB Fcb);
65
66VOID
67RxPurgeChangeBufferingStateRequestsForSrvOpen(
68 _In_ PSRV_OPEN SrvOpen);
69
70VOID
71RxCompleteSrvOpenKeyAssociation(
72 _Inout_ PSRV_OPEN SrvOpen);
73
74VOID
75RxInitiateSrvOpenKeyAssociation(
76 _Inout_ PSRV_OPEN SrvOpen);
77
78NTSTATUS
79RxInitializeBufferingManager(
80 _In_ PSRV_CALL SrvCall);
81
82NTSTATUS
83RxTearDownBufferingManager(
84 _In_ PSRV_CALL SrvCall);
85
86NTSTATUS
87RxFlushFcbInSystemCache(
88 _In_ PFCB Fcb,
89 _In_ BOOLEAN SynchronizeWithLazyWriter);
90
91NTSTATUS
92RxPurgeFcbInSystemCache(
93 _In_ PFCB Fcb,
94 _In_ PLARGE_INTEGER FileOffset OPTIONAL,
95 _In_ ULONG Length,
96 _In_ BOOLEAN UninitializeCacheMaps,
97 _In_ BOOLEAN FlushFile);
98
99#endif