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