[FAST486]
[reactos.git] / include / ddk / fltuserstructures.h
1 /*
2 * fltuserstructures.h
3 *
4 * This file is part of the ReactOS DDK package.
5 *
6 * Contributors:
7 * Amine Khaldi (amine.khaldi@reactos.org)
8 *
9 * THIS SOFTWARE IS NOT COPYRIGHTED
10 *
11 * This source code is offered for use in the public domain. You may
12 * use, modify or distribute it freely.
13 *
14 * This code is distributed in the hope that it will be useful but
15 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
16 * DISCLAIMED. This includes but is not limited to warranties of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 *
19 */
20 #pragma once
21
22 #ifndef __FLT_USER_STRUCTURES_H__
23 #define __FLT_USER_STRUCTURES_H__
24
25 #if FLT_MGR_BASELINE
26
27 #define FLTAPI NTAPI
28
29 #define FILTER_NAME_MAX_CHARS 255
30 #define FILTER_NAME_MAX_BYTES (FILTER_NAME_MAX_CHARS * sizeof(WCHAR))
31 #define VOLUME_NAME_MAX_CHARS 1024
32 #define VOLUME_NAME_MAX_BYTES (VOLUME_NAME_MAX_CHARS * sizeof(WCHAR))
33 #define INSTANCE_NAME_MAX_CHARS 255
34 #define INSTANCE_NAME_MAX_BYTES (INSTANCE_NAME_MAX_CHARS * sizeof(WCHAR))
35
36 typedef HANDLE HFILTER, HFILTER_INSTANCE, HFILTER_VOLUME;
37
38 typedef _Return_type_success_(return >= 0) LONG NTSTATUS, *PNTSTATUS;
39
40 /* Known File System Types */
41
42 typedef enum _FLT_FILESYSTEM_TYPE {
43 FLT_FSTYPE_UNKNOWN,
44 FLT_FSTYPE_RAW,
45 FLT_FSTYPE_NTFS,
46 FLT_FSTYPE_FAT,
47 FLT_FSTYPE_CDFS,
48 FLT_FSTYPE_UDFS,
49 FLT_FSTYPE_LANMAN,
50 FLT_FSTYPE_WEBDAV,
51 FLT_FSTYPE_RDPDR,
52 FLT_FSTYPE_NFS,
53 FLT_FSTYPE_MS_NETWARE,
54 FLT_FSTYPE_NETWARE,
55 FLT_FSTYPE_BSUDF,
56 FLT_FSTYPE_MUP,
57 FLT_FSTYPE_RSFX,
58 FLT_FSTYPE_ROXIO_UDF1,
59 FLT_FSTYPE_ROXIO_UDF2,
60 FLT_FSTYPE_ROXIO_UDF3,
61 FLT_FSTYPE_TACIT,
62 FLT_FSTYPE_FS_REC,
63 FLT_FSTYPE_INCD,
64 FLT_FSTYPE_INCD_FAT,
65 FLT_FSTYPE_EXFAT,
66 FLT_FSTYPE_PSFS,
67 FLT_FSTYPE_GPFS,
68 FLT_FSTYPE_NPFS,
69 FLT_FSTYPE_MSFS,
70 FLT_FSTYPE_CSVFS
71 } FLT_FILESYSTEM_TYPE, *PFLT_FILESYSTEM_TYPE;
72
73 typedef enum _FILTER_INFORMATION_CLASS {
74 FilterFullInformation,
75 FilterAggregateBasicInformation,
76 FilterAggregateStandardInformation
77 } FILTER_INFORMATION_CLASS, *PFILTER_INFORMATION_CLASS;
78
79 typedef enum _FILTER_VOLUME_INFORMATION_CLASS {
80 FilterVolumeBasicInformation,
81 FilterVolumeStandardInformation
82 } FILTER_VOLUME_INFORMATION_CLASS, *PFILTER_VOLUME_INFORMATION_CLASS;
83
84 typedef enum _INSTANCE_INFORMATION_CLASS {
85 InstanceBasicInformation,
86 InstancePartialInformation,
87 InstanceFullInformation,
88 InstanceAggregateStandardInformation
89 } INSTANCE_INFORMATION_CLASS, *PINSTANCE_INFORMATION_CLASS;
90
91 typedef struct _FILTER_FULL_INFORMATION {
92 ULONG NextEntryOffset;
93 ULONG FrameID;
94 ULONG NumberOfInstances;
95 USHORT FilterNameLength;
96 WCHAR FilterNameBuffer[1];
97 } FILTER_FULL_INFORMATION, *PFILTER_FULL_INFORMATION;
98
99 typedef struct _FILTER_AGGREGATE_BASIC_INFORMATION {
100 ULONG NextEntryOffset;
101 ULONG Flags;
102 union {
103 struct {
104 ULONG FrameID;
105 ULONG NumberOfInstances;
106 USHORT FilterNameLength;
107 USHORT FilterNameBufferOffset;
108 USHORT FilterAltitudeLength;
109 USHORT FilterAltitudeBufferOffset;
110 } MiniFilter;
111 struct {
112 USHORT FilterNameLength;
113 USHORT FilterNameBufferOffset;
114 } LegacyFilter;
115 } Type;
116 } FILTER_AGGREGATE_BASIC_INFORMATION, *PFILTER_AGGREGATE_BASIC_INFORMATION;
117
118 #if FLT_MGR_LONGHORN
119
120 #define FLTFL_AGGREGATE_INFO_IS_MINIFILTER 0x00000001
121 #define FLTFL_AGGREGATE_INFO_IS_LEGACYFILTER 0x00000002
122 #define FLTFL_ASI_IS_MINIFILTER 0x00000001
123 #define FLTFL_ASI_IS_LEGACYFILTER 0x00000002
124 #define FLTFL_VSI_DETACHED_VOLUME 0x00000001
125 #define FLTFL_IASI_IS_MINIFILTER 0x00000001
126 #define FLTFL_IASI_IS_LEGACYFILTER 0x00000002
127 #define FLTFL_IASIM_DETACHED_VOLUME 0x00000001
128 #define FLTFL_IASIL_DETACHED_VOLUME 0x00000001
129
130 typedef struct _FILTER_AGGREGATE_STANDARD_INFORMATION {
131 ULONG NextEntryOffset;
132 ULONG Flags;
133 union {
134 struct {
135 ULONG Flags;
136 ULONG FrameID;
137 ULONG NumberOfInstances;
138 USHORT FilterNameLength;
139 USHORT FilterNameBufferOffset;
140 USHORT FilterAltitudeLength;
141 USHORT FilterAltitudeBufferOffset;
142 } MiniFilter;
143 struct {
144 ULONG Flags;
145 USHORT FilterNameLength;
146 USHORT FilterNameBufferOffset;
147 USHORT FilterAltitudeLength;
148 USHORT FilterAltitudeBufferOffset;
149 } LegacyFilter;
150 } Type;
151 } FILTER_AGGREGATE_STANDARD_INFORMATION, *PFILTER_AGGREGATE_STANDARD_INFORMATION;
152
153 typedef struct _FILTER_VOLUME_STANDARD_INFORMATION {
154 ULONG NextEntryOffset;
155 ULONG Flags;
156 ULONG FrameID;
157 FLT_FILESYSTEM_TYPE FileSystemType;
158 USHORT FilterVolumeNameLength;
159 WCHAR FilterVolumeName[1];
160 } FILTER_VOLUME_STANDARD_INFORMATION, *PFILTER_VOLUME_STANDARD_INFORMATION;
161
162 typedef struct _INSTANCE_AGGREGATE_STANDARD_INFORMATION {
163 ULONG NextEntryOffset;
164 ULONG Flags;
165 union {
166 struct {
167 ULONG Flags;
168 ULONG FrameID;
169 FLT_FILESYSTEM_TYPE VolumeFileSystemType;
170 USHORT InstanceNameLength;
171 USHORT InstanceNameBufferOffset;
172 USHORT AltitudeLength;
173 USHORT AltitudeBufferOffset;
174 USHORT VolumeNameLength;
175 USHORT VolumeNameBufferOffset;
176 USHORT FilterNameLength;
177 USHORT FilterNameBufferOffset;
178 } MiniFilter;
179 struct {
180 ULONG Flags;
181 USHORT AltitudeLength;
182 USHORT AltitudeBufferOffset;
183 USHORT VolumeNameLength;
184 USHORT VolumeNameBufferOffset;
185 USHORT FilterNameLength;
186 USHORT FilterNameBufferOffset;
187 } LegacyFilter;
188 } Type;
189 } INSTANCE_AGGREGATE_STANDARD_INFORMATION, *PINSTANCE_AGGREGATE_STANDARD_INFORMATION;
190
191 #endif /* FLT_MGR_LONGHORN */
192
193 typedef struct _FILTER_VOLUME_BASIC_INFORMATION {
194 USHORT FilterVolumeNameLength;
195 WCHAR FilterVolumeName[1];
196 } FILTER_VOLUME_BASIC_INFORMATION, *PFILTER_VOLUME_BASIC_INFORMATION;
197
198 typedef
199 _Struct_size_bytes_(sizeof(INSTANCE_BASIC_INFORMATION) * InstanceNameLength)
200 struct _INSTANCE_BASIC_INFORMATION {
201 ULONG NextEntryOffset;
202 USHORT InstanceNameLength;
203 USHORT InstanceNameBufferOffset;
204 } INSTANCE_BASIC_INFORMATION, *PINSTANCE_BASIC_INFORMATION;
205
206 typedef
207 _Struct_size_bytes_(sizeof(INSTANCE_PARTIAL_INFORMATION) + InstanceNameLength + AltitudeLength)
208 struct _INSTANCE_PARTIAL_INFORMATION {
209 ULONG NextEntryOffset;
210 USHORT InstanceNameLength;
211 USHORT InstanceNameBufferOffset;
212 USHORT AltitudeLength;
213 USHORT AltitudeBufferOffset;
214 } INSTANCE_PARTIAL_INFORMATION, *PINSTANCE_PARTIAL_INFORMATION;
215
216 typedef
217 _Struct_size_bytes_(sizeof(INSTANCE_FULL_INFORMATION) + InstanceNameLength + AltitudeLength + VolumeNameLength + FilterNameLength)
218 struct _INSTANCE_FULL_INFORMATION {
219 ULONG NextEntryOffset;
220 USHORT InstanceNameLength;
221 USHORT InstanceNameBufferOffset;
222 USHORT AltitudeLength;
223 USHORT AltitudeBufferOffset;
224 USHORT VolumeNameLength;
225 USHORT VolumeNameBufferOffset;
226 USHORT FilterNameLength;
227 USHORT FilterNameBufferOffset;
228 } INSTANCE_FULL_INFORMATION, *PINSTANCE_FULL_INFORMATION;
229
230 typedef struct _FILTER_MESSAGE_HEADER {
231 ULONG ReplyLength;
232 ULONGLONG MessageId;
233 } FILTER_MESSAGE_HEADER, *PFILTER_MESSAGE_HEADER;
234
235 typedef struct _FILTER_REPLY_HEADER {
236 NTSTATUS Status;
237 ULONGLONG MessageId;
238 } FILTER_REPLY_HEADER, *PFILTER_REPLY_HEADER;
239
240 #endif /* FLT_MGR_BASELINE */
241
242 #endif /* __FLT_USER_STRUCTURES_H__ */