[XDK]
[reactos.git] / include / xdk / fsrtltypes.h
1 $if (_NTIFS_)
2 /* FSRTL Types */
3
4 typedef ULONG LBN;
5 typedef LBN *PLBN;
6
7 typedef ULONG VBN;
8 typedef VBN *PVBN;
9
10 typedef struct _FSRTL_COMMON_FCB_HEADER {
11 CSHORT NodeTypeCode;
12 CSHORT NodeByteSize;
13 UCHAR Flags;
14 UCHAR IsFastIoPossible;
15 UCHAR Flags2;
16 UCHAR Reserved:4;
17 UCHAR Version:4;
18 PERESOURCE Resource;
19 PERESOURCE PagingIoResource;
20 LARGE_INTEGER AllocationSize;
21 LARGE_INTEGER FileSize;
22 LARGE_INTEGER ValidDataLength;
23 } FSRTL_COMMON_FCB_HEADER, *PFSRTL_COMMON_FCB_HEADER;
24
25 #ifdef __cplusplus
26 typedef struct _FSRTL_ADVANCED_FCB_HEADER:FSRTL_COMMON_FCB_HEADER {
27 #else /* __cplusplus */
28 typedef struct _FSRTL_ADVANCED_FCB_HEADER {
29 FSRTL_COMMON_FCB_HEADER DUMMYSTRUCTNAME;
30 #endif /* __cplusplus */
31 PFAST_MUTEX FastMutex;
32 LIST_ENTRY FilterContexts;
33 #if (NTDDI_VERSION >= NTDDI_VISTA)
34 EX_PUSH_LOCK PushLock;
35 PVOID *FileContextSupportPointer;
36 #endif
37 } FSRTL_ADVANCED_FCB_HEADER, *PFSRTL_ADVANCED_FCB_HEADER;
38
39 #define FSRTL_FCB_HEADER_V0 (0x00)
40 #define FSRTL_FCB_HEADER_V1 (0x01)
41
42 #define FSRTL_FLAG_FILE_MODIFIED (0x01)
43 #define FSRTL_FLAG_FILE_LENGTH_CHANGED (0x02)
44 #define FSRTL_FLAG_LIMIT_MODIFIED_PAGES (0x04)
45 #define FSRTL_FLAG_ACQUIRE_MAIN_RSRC_EX (0x08)
46 #define FSRTL_FLAG_ACQUIRE_MAIN_RSRC_SH (0x10)
47 #define FSRTL_FLAG_USER_MAPPED_FILE (0x20)
48 #define FSRTL_FLAG_ADVANCED_HEADER (0x40)
49 #define FSRTL_FLAG_EOF_ADVANCE_ACTIVE (0x80)
50
51 #define FSRTL_FLAG2_DO_MODIFIED_WRITE (0x01)
52 #define FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS (0x02)
53 #define FSRTL_FLAG2_PURGE_WHEN_MAPPED (0x04)
54 #define FSRTL_FLAG2_IS_PAGING_FILE (0x08)
55
56 #define FSRTL_FSP_TOP_LEVEL_IRP (0x01)
57 #define FSRTL_CACHE_TOP_LEVEL_IRP (0x02)
58 #define FSRTL_MOD_WRITE_TOP_LEVEL_IRP (0x03)
59 #define FSRTL_FAST_IO_TOP_LEVEL_IRP (0x04)
60 #define FSRTL_NETWORK1_TOP_LEVEL_IRP ((LONG_PTR)0x05)
61 #define FSRTL_NETWORK2_TOP_LEVEL_IRP ((LONG_PTR)0x06)
62 #define FSRTL_MAX_TOP_LEVEL_IRP_FLAG ((LONG_PTR)0xFFFF)
63
64 typedef struct _FSRTL_AUXILIARY_BUFFER {
65 PVOID Buffer;
66 ULONG Length;
67 ULONG Flags;
68 PMDL Mdl;
69 } FSRTL_AUXILIARY_BUFFER, *PFSRTL_AUXILIARY_BUFFER;
70
71 #define FSRTL_AUXILIARY_FLAG_DEALLOCATE 0x00000001
72
73 typedef enum _FSRTL_COMPARISON_RESULT {
74 LessThan = -1,
75 EqualTo = 0,
76 GreaterThan = 1
77 } FSRTL_COMPARISON_RESULT;
78
79 #define FSRTL_FAT_LEGAL 0x01
80 #define FSRTL_HPFS_LEGAL 0x02
81 #define FSRTL_NTFS_LEGAL 0x04
82 #define FSRTL_WILD_CHARACTER 0x08
83 #define FSRTL_OLE_LEGAL 0x10
84 #define FSRTL_NTFS_STREAM_LEGAL (FSRTL_NTFS_LEGAL | FSRTL_OLE_LEGAL)
85
86 #define FSRTL_VOLUME_DISMOUNT 1
87 #define FSRTL_VOLUME_DISMOUNT_FAILED 2
88 #define FSRTL_VOLUME_LOCK 3
89 #define FSRTL_VOLUME_LOCK_FAILED 4
90 #define FSRTL_VOLUME_UNLOCK 5
91 #define FSRTL_VOLUME_MOUNT 6
92 #define FSRTL_VOLUME_NEEDS_CHKDSK 7
93 #define FSRTL_VOLUME_WORM_NEAR_FULL 8
94 #define FSRTL_VOLUME_WEARING_OUT 9
95 #define FSRTL_VOLUME_FORCED_CLOSED 10
96 #define FSRTL_VOLUME_INFO_MAKE_COMPAT 11
97 #define FSRTL_VOLUME_PREPARING_EJECT 12
98 #define FSRTL_VOLUME_CHANGE_SIZE 13
99 #define FSRTL_VOLUME_BACKGROUND_FORMAT 14
100
101 typedef VOID
102 (NTAPI *PFSRTL_STACK_OVERFLOW_ROUTINE) (
103 IN PVOID Context,
104 IN PKEVENT Event);
105
106 #if (NTDDI_VERSION >= NTDDI_VISTA)
107
108 #define FSRTL_UNC_PROVIDER_FLAGS_MAILSLOTS_SUPPORTED 0x00000001
109 #define FSRTL_UNC_PROVIDER_FLAGS_CSC_ENABLED 0x00000002
110 #define FSRTL_UNC_PROVIDER_FLAGS_DOMAIN_SVC_AWARE 0x00000004
111
112 #define FSRTL_ALLOCATE_ECPLIST_FLAG_CHARGE_QUOTA 0x00000001
113
114 #define FSRTL_ALLOCATE_ECP_FLAG_CHARGE_QUOTA 0x00000001
115 #define FSRTL_ALLOCATE_ECP_FLAG_NONPAGED_POOL 0x00000002
116
117 #define FSRTL_ECP_LOOKASIDE_FLAG_NONPAGED_POOL 0x00000002
118
119 #define FSRTL_VIRTDISK_FULLY_ALLOCATED 0x00000001
120 #define FSRTL_VIRTDISK_NO_DRIVE_LETTER 0x00000002
121
122 typedef struct _FSRTL_MUP_PROVIDER_INFO_LEVEL_1 {
123 ULONG32 ProviderId;
124 } FSRTL_MUP_PROVIDER_INFO_LEVEL_1, *PFSRTL_MUP_PROVIDER_INFO_LEVEL_1;
125
126 typedef struct _FSRTL_MUP_PROVIDER_INFO_LEVEL_2 {
127 ULONG32 ProviderId;
128 UNICODE_STRING ProviderName;
129 } FSRTL_MUP_PROVIDER_INFO_LEVEL_2, *PFSRTL_MUP_PROVIDER_INFO_LEVEL_2;
130
131 typedef VOID
132 (*PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK) (
133 IN OUT PVOID EcpContext,
134 IN LPCGUID EcpType);
135
136 typedef struct _ECP_LIST ECP_LIST, *PECP_LIST;
137
138 typedef ULONG FSRTL_ALLOCATE_ECPLIST_FLAGS;
139 typedef ULONG FSRTL_ALLOCATE_ECP_FLAGS;
140 typedef ULONG FSRTL_ECP_LOOKASIDE_FLAGS;
141
142 typedef enum _FSRTL_CHANGE_BACKING_TYPE {
143 ChangeDataControlArea,
144 ChangeImageControlArea,
145 ChangeSharedCacheMap
146 } FSRTL_CHANGE_BACKING_TYPE, *PFSRTL_CHANGE_BACKING_TYPE;
147
148 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
149
150 typedef struct _FSRTL_PER_FILE_CONTEXT {
151 LIST_ENTRY Links;
152 PVOID OwnerId;
153 PVOID InstanceId;
154 PFREE_FUNCTION FreeCallback;
155 } FSRTL_PER_FILE_CONTEXT, *PFSRTL_PER_FILE_CONTEXT;
156
157 typedef struct _FSRTL_PER_STREAM_CONTEXT {
158 LIST_ENTRY Links;
159 PVOID OwnerId;
160 PVOID InstanceId;
161 PFREE_FUNCTION FreeCallback;
162 } FSRTL_PER_STREAM_CONTEXT, *PFSRTL_PER_STREAM_CONTEXT;
163
164 #if (NTDDI_VERSION >= NTDDI_WIN2K)
165 typedef VOID
166 (*PFN_FSRTLTEARDOWNPERSTREAMCONTEXTS) (
167 IN PFSRTL_ADVANCED_FCB_HEADER AdvancedHeader);
168 #endif
169
170 typedef struct _FSRTL_PER_FILEOBJECT_CONTEXT {
171 LIST_ENTRY Links;
172 PVOID OwnerId;
173 PVOID InstanceId;
174 } FSRTL_PER_FILEOBJECT_CONTEXT, *PFSRTL_PER_FILEOBJECT_CONTEXT;
175
176 #define FSRTL_CC_FLUSH_ERROR_FLAG_NO_HARD_ERROR 0x1
177 #define FSRTL_CC_FLUSH_ERROR_FLAG_NO_LOG_ENTRY 0x2
178
179 typedef NTSTATUS
180 (NTAPI *PCOMPLETE_LOCK_IRP_ROUTINE) (
181 IN PVOID Context,
182 IN PIRP Irp);
183
184 typedef struct _FILE_LOCK_INFO {
185 LARGE_INTEGER StartingByte;
186 LARGE_INTEGER Length;
187 BOOLEAN ExclusiveLock;
188 ULONG Key;
189 PFILE_OBJECT FileObject;
190 PVOID ProcessId;
191 LARGE_INTEGER EndingByte;
192 } FILE_LOCK_INFO, *PFILE_LOCK_INFO;
193
194 typedef VOID
195 (NTAPI *PUNLOCK_ROUTINE) (
196 IN PVOID Context,
197 IN PFILE_LOCK_INFO FileLockInfo);
198
199 typedef struct _FILE_LOCK {
200 PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine;
201 PUNLOCK_ROUTINE UnlockRoutine;
202 BOOLEAN FastIoIsQuestionable;
203 BOOLEAN SpareC[3];
204 PVOID LockInformation;
205 FILE_LOCK_INFO LastReturnedLockInfo;
206 PVOID LastReturnedLock;
207 LONG volatile LockRequestsInProgress;
208 } FILE_LOCK, *PFILE_LOCK;
209
210 typedef struct _TUNNEL {
211 FAST_MUTEX Mutex;
212 PRTL_SPLAY_LINKS Cache;
213 LIST_ENTRY TimerQueue;
214 USHORT NumEntries;
215 } TUNNEL, *PTUNNEL;
216
217 typedef struct _BASE_MCB {
218 ULONG MaximumPairCount;
219 ULONG PairCount;
220 USHORT PoolType;
221 USHORT Flags;
222 PVOID Mapping;
223 } BASE_MCB, *PBASE_MCB;
224
225 typedef struct _LARGE_MCB {
226 PKGUARDED_MUTEX GuardedMutex;
227 BASE_MCB BaseMcb;
228 } LARGE_MCB, *PLARGE_MCB;
229
230 #define MCB_FLAG_RAISE_ON_ALLOCATION_FAILURE 1
231
232 typedef struct _MCB {
233 LARGE_MCB DummyFieldThatSizesThisStructureCorrectly;
234 } MCB, *PMCB;
235
236 typedef enum _FAST_IO_POSSIBLE {
237 FastIoIsNotPossible = 0,
238 FastIoIsPossible,
239 FastIoIsQuestionable
240 } FAST_IO_POSSIBLE;
241
242 typedef struct _EOF_WAIT_BLOCK {
243 LIST_ENTRY EofWaitLinks;
244 KEVENT Event;
245 } EOF_WAIT_BLOCK, *PEOF_WAIT_BLOCK;
246
247 typedef PVOID OPLOCK, *POPLOCK;
248
249 typedef VOID
250 (NTAPI *POPLOCK_WAIT_COMPLETE_ROUTINE) (
251 IN PVOID Context,
252 IN PIRP Irp);
253
254 typedef VOID
255 (NTAPI *POPLOCK_FS_PREPOST_IRP) (
256 IN PVOID Context,
257 IN PIRP Irp);
258
259 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
260 #define OPLOCK_FLAG_COMPLETE_IF_OPLOCKED 0x00000001
261 #endif
262
263 #if (NTDDI_VERSION >= NTDDI_WIN7)
264 #define OPLOCK_FLAG_OPLOCK_KEY_CHECK_ONLY 0x00000002
265 #define OPLOCK_FLAG_BACK_OUT_ATOMIC_OPLOCK 0x00000004
266 #define OPLOCK_FLAG_IGNORE_OPLOCK_KEYS 0x00000008
267 #define OPLOCK_FSCTRL_FLAG_ALL_KEYS_MATCH 0x00000001
268 #endif
269
270 #if (NTDDI_VERSION >= NTDDI_WIN7)
271
272 typedef struct _OPLOCK_KEY_ECP_CONTEXT {
273 GUID OplockKey;
274 ULONG Reserved;
275 } OPLOCK_KEY_ECP_CONTEXT, *POPLOCK_KEY_ECP_CONTEXT;
276
277 DEFINE_GUID( GUID_ECP_OPLOCK_KEY, 0x48850596, 0x3050, 0x4be7, 0x98, 0x63, 0xfe, 0xc3, 0x50, 0xce, 0x8d, 0x7f );
278
279 #endif
280
281 typedef PVOID PNOTIFY_SYNC;
282
283 typedef BOOLEAN
284 (NTAPI *PCHECK_FOR_TRAVERSE_ACCESS) (
285 IN PVOID NotifyContext,
286 IN PVOID TargetContext OPTIONAL,
287 IN PSECURITY_SUBJECT_CONTEXT SubjectContext);
288
289 typedef BOOLEAN
290 (NTAPI *PFILTER_REPORT_CHANGE) (
291 IN PVOID NotifyContext,
292 IN PVOID FilterContext);
293 $endif (_NTIFS_)