9aadec36464428ae2cc1b712fc9663cb75772935
[reactos.git] / reactos / sdk / include / ddk / mrxfcb.h
1 #ifndef __MRXFCB_H__
2 #define __MRXFCB_H__
3
4 typedef struct _MRX_NORMAL_NODE_HEADER
5 {
6 NODE_TYPE_CODE NodeTypeCode;
7 NODE_BYTE_SIZE NodeByteSize;
8 volatile ULONG NodeReferenceCount;
9 } MRX_NORMAL_NODE_HEADER;
10
11 #define SRVCALL_FLAG_CASE_INSENSITIVE_NETROOTS 0x4
12 #define SRVCALL_FLAG_CASE_INSENSITIVE_FILENAMES 0x8
13 #define SRVCALL_FLAG_DFS_AWARE_SERVER 0x10
14 #define SRVCALL_FLAG_FORCE_FINALIZED 0x20
15
16 typedef struct _MRX_SRV_CALL_
17 {
18 MRX_NORMAL_NODE_HEADER;
19 PVOID Context;
20 PVOID Context2;
21 PRDBSS_DEVICE_OBJECT RxDeviceObject;
22 PUNICODE_STRING pSrvCallName;
23 PUNICODE_STRING pPrincipalName;
24 PUNICODE_STRING pDomainName;
25 ULONG Flags;
26 LONG MaximumNumberOfCloseDelayedFiles;
27 NTSTATUS Status;
28 } MRX_SRV_CALL, *PMRX_SRV_CALL;
29
30 #define NET_ROOT_DISK ((UCHAR)0)
31 #define NET_ROOT_PIPE ((UCHAR)1)
32 #define NET_ROOT_PRINT ((UCHAR)3)
33 #define NET_ROOT_WILD ((UCHAR)4)
34 #define NET_ROOT_MAILSLOT ((UCHAR)5)
35
36 typedef UCHAR NET_ROOT_TYPE, *PNET_ROOT_TYPE;
37
38 #define MRX_NET_ROOT_STATE_GOOD ((UCHAR)0)
39
40 typedef UCHAR MRX_NET_ROOT_STATE, *PMRX_NET_ROOT_STATE;
41 typedef UCHAR MRX_PURGE_RELATIONSHIP, *PMRX_PURGE_RELATIONSHIP;
42 typedef UCHAR MRX_PURGE_SYNCLOCATION, *PMRX_PURGE_SYNCLOCATION;
43
44 #define NETROOT_FLAG_SUPPORTS_SYMBOLIC_LINKS 0x1
45 #define NETROOT_FLAG_DFS_AWARE_NETROOT 0x2
46
47 typedef struct _NETROOT_THROTTLING_PARAMETERS
48 {
49 ULONG Increment;
50 ULONG MaximumDelay;
51 } NETROOT_THROTTLING_PARAMETERS, *PNETROOT_THROTTLING_PARAMETERS;
52
53 typedef struct _MRX_NET_ROOT_
54 {
55 MRX_NORMAL_NODE_HEADER;
56 PMRX_SRV_CALL pSrvCall;
57 PVOID Context;
58 PVOID Context2;
59 ULONG Flags;
60 volatile ULONG NumberOfFcbs;
61 volatile ULONG NumberOfSrvOpens;
62 MRX_NET_ROOT_STATE MRxNetRootState;
63 NET_ROOT_TYPE Type;
64 MRX_PURGE_RELATIONSHIP PurgeRelationship;
65 MRX_PURGE_SYNCLOCATION PurgeSyncLocation;
66 DEVICE_TYPE DeviceType;
67 PUNICODE_STRING pNetRootName;
68 UNICODE_STRING InnerNamePrefix;
69 ULONG ParameterValidationStamp;
70 union
71 {
72 struct
73 {
74 ULONG DataCollectionSize;
75 NETROOT_THROTTLING_PARAMETERS PipeReadThrottlingParameters;
76 } NamedPipeParameters;
77 struct
78 {
79 ULONG ClusterSize;
80 ULONG ReadAheadGranularity;
81 NETROOT_THROTTLING_PARAMETERS LockThrottlingParameters;
82 ULONG RenameInfoOverallocationSize;
83 GUID VolumeId;
84 } DiskParameters;
85 };
86 } MRX_NET_ROOT, *PMRX_NET_ROOT;
87
88 #define VNETROOT_FLAG_CSCAGENT_INSTANCE 0x00000001
89
90 typedef struct _MRX_V_NET_ROOT_
91 {
92 MRX_NORMAL_NODE_HEADER;
93 PMRX_NET_ROOT pNetRoot;
94 PVOID Context;
95 PVOID Context2;
96 ULONG Flags;
97 ULONG NumberOfOpens;
98 volatile ULONG NumberOfFobxs;
99 LUID LogonId;
100 PUNICODE_STRING pUserDomainName;
101 PUNICODE_STRING pUserName;
102 PUNICODE_STRING pPassword;
103 ULONG SessionId;
104 NTSTATUS ConstructionStatus;
105 BOOLEAN IsExplicitConnection;
106 } MRX_V_NET_ROOT, *PMRX_V_NET_ROOT;
107
108 typedef struct _MRX_FCB_
109 {
110 FSRTL_ADVANCED_FCB_HEADER Header;
111 PMRX_NET_ROOT pNetRoot;
112 PVOID Context;
113 PVOID Context2;
114 volatile ULONG NodeReferenceCount;
115 ULONG FcbState;
116 volatile CLONG UncleanCount;
117 CLONG UncachedUncleanCount;
118 volatile CLONG OpenCount;
119 volatile ULONG OutstandingLockOperationsCount;
120 ULONGLONG ActualAllocationLength;
121 ULONG Attributes;
122 BOOLEAN IsFileWritten;
123 BOOLEAN fShouldBeOrphaned;
124 BOOLEAN fMiniInited;
125 UCHAR CachedNetRootType;
126 LIST_ENTRY SrvOpenList;
127 ULONG SrvOpenListVersion;
128 } MRX_FCB, *PMRX_FCB;
129
130 #define SRVOPEN_FLAG_DONTUSE_READ_CACHING 0x1
131 #define SRVOPEN_FLAG_DONTUSE_WRITE_CACHING 0x2
132 #define SRVOPEN_FLAG_CLOSED 0x4
133 #define SRVOPEN_FLAG_CLOSE_DELAYED 0x8
134 #define SRVOPEN_FLAG_FILE_RENAMED 0x10
135 #define SRVOPEN_FLAG_FILE_DELETED 0x20
136 #define SRVOPEN_FLAG_BUFFERING_STATE_CHANGE_PENDING 0x40
137 #define SRVOPEN_FLAG_COLLAPSING_DISABLED 0x80
138 #define SRVOPEN_FLAG_BUFFERING_STATE_CHANGE_REQUESTS_PURGED 0x100
139 #define SRVOPEN_FLAG_NO_BUFFERING_STATE_CHANGE 0x200
140 #define SRVOPEN_FLAG_ORPHANED 0x400
141
142 typedef
143 NTSTATUS
144 (NTAPI *PMRX_SHADOW_CALLDOWN) (
145 IN OUT PRX_CONTEXT RxContext
146 );
147
148 typedef struct
149 {
150 PFILE_OBJECT UnderlyingFileObject;
151 PDEVICE_OBJECT UnderlyingDeviceObject;
152 ULONG LockKey;
153 PFAST_IO_READ FastIoRead;
154 PFAST_IO_WRITE FastIoWrite;
155 PMRX_SHADOW_CALLDOWN DispatchRoutine;
156 } MRXSHADOW_SRV_OPEN, *PMRXSHADOW_SRV_OPEN;
157
158 typedef struct _MRX_SRV_OPEN_
159 {
160 MRX_NORMAL_NODE_HEADER;
161 PMRX_FCB pFcb;
162 PMRX_V_NET_ROOT pVNetRoot;
163 PVOID Context;
164 PVOID Context2;
165 #if (_WIN32_WINNT >= 0x0600)
166 PMRXSHADOW_SRV_OPEN ShadowContext;
167 #endif
168 ULONG Flags;
169 PUNICODE_STRING pAlreadyPrefixedName;
170 CLONG UncleanFobxCount;
171 CLONG OpenCount;
172 PVOID Key;
173 ACCESS_MASK DesiredAccess;
174 ULONG ShareAccess;
175 ULONG CreateOptions;
176 ULONG BufferingFlags;
177 ULONG ulFileSizeVersion;
178 LIST_ENTRY SrvOpenQLinks;
179 } MRX_SRV_OPEN, *PMRX_SRV_OPEN;
180
181 #define FOBX_FLAG_DFS_OPEN 0x0001
182 #define FOBX_FLAG_BACKUP_INTENT 0x0004
183
184 typedef struct _MRX_PIPE_HANDLE_INFORMATION
185 {
186 ULONG TypeOfPipe;
187 ULONG ReadMode;
188 ULONG CompletionMode;
189 } MRX_PIPE_HANDLE_INFORMATION, *PMRX_PIPE_HANDLE_INFORMATION;
190
191 typedef struct _MRX_FOBX_
192 {
193 MRX_NORMAL_NODE_HEADER;
194 PMRX_SRV_OPEN pSrvOpen;
195 PFILE_OBJECT AssociatedFileObject;
196 PVOID Context;
197 PVOID Context2;
198 ULONG Flags;
199 union
200 {
201 struct
202 {
203 UNICODE_STRING UnicodeQueryTemplate;
204 };
205 PMRX_PIPE_HANDLE_INFORMATION PipeHandleInformation;
206 };
207 ULONG OffsetOfNextEaToReturn;
208 } MRX_FOBX, *PMRX_FOBX;
209
210 NTSTATUS
211 NTAPI
212 RxAcquireExclusiveFcbResourceInMRx(
213 _Inout_ PMRX_FCB Fcb);
214
215 #endif