Reactos
at listview 244 lines 7.2 kB view raw
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 36typedef HANDLE HFILTER, HFILTER_INSTANCE, HFILTER_VOLUME; 37 38#ifndef _NTDEF_H 39typedef _Return_type_success_(return >= 0) LONG NTSTATUS, *PNTSTATUS; 40#endif 41 42/* Known File System Types */ 43 44typedef enum _FLT_FILESYSTEM_TYPE { 45 FLT_FSTYPE_UNKNOWN, 46 FLT_FSTYPE_RAW, 47 FLT_FSTYPE_NTFS, 48 FLT_FSTYPE_FAT, 49 FLT_FSTYPE_CDFS, 50 FLT_FSTYPE_UDFS, 51 FLT_FSTYPE_LANMAN, 52 FLT_FSTYPE_WEBDAV, 53 FLT_FSTYPE_RDPDR, 54 FLT_FSTYPE_NFS, 55 FLT_FSTYPE_MS_NETWARE, 56 FLT_FSTYPE_NETWARE, 57 FLT_FSTYPE_BSUDF, 58 FLT_FSTYPE_MUP, 59 FLT_FSTYPE_RSFX, 60 FLT_FSTYPE_ROXIO_UDF1, 61 FLT_FSTYPE_ROXIO_UDF2, 62 FLT_FSTYPE_ROXIO_UDF3, 63 FLT_FSTYPE_TACIT, 64 FLT_FSTYPE_FS_REC, 65 FLT_FSTYPE_INCD, 66 FLT_FSTYPE_INCD_FAT, 67 FLT_FSTYPE_EXFAT, 68 FLT_FSTYPE_PSFS, 69 FLT_FSTYPE_GPFS, 70 FLT_FSTYPE_NPFS, 71 FLT_FSTYPE_MSFS, 72 FLT_FSTYPE_CSVFS 73} FLT_FILESYSTEM_TYPE, *PFLT_FILESYSTEM_TYPE; 74 75typedef enum _FILTER_INFORMATION_CLASS { 76 FilterFullInformation, 77 FilterAggregateBasicInformation, 78 FilterAggregateStandardInformation 79} FILTER_INFORMATION_CLASS, *PFILTER_INFORMATION_CLASS; 80 81typedef enum _FILTER_VOLUME_INFORMATION_CLASS { 82 FilterVolumeBasicInformation, 83 FilterVolumeStandardInformation 84} FILTER_VOLUME_INFORMATION_CLASS, *PFILTER_VOLUME_INFORMATION_CLASS; 85 86typedef enum _INSTANCE_INFORMATION_CLASS { 87 InstanceBasicInformation, 88 InstancePartialInformation, 89 InstanceFullInformation, 90 InstanceAggregateStandardInformation 91} INSTANCE_INFORMATION_CLASS, *PINSTANCE_INFORMATION_CLASS; 92 93typedef struct _FILTER_FULL_INFORMATION { 94 ULONG NextEntryOffset; 95 ULONG FrameID; 96 ULONG NumberOfInstances; 97 USHORT FilterNameLength; 98 WCHAR FilterNameBuffer[1]; 99} FILTER_FULL_INFORMATION, *PFILTER_FULL_INFORMATION; 100 101typedef struct _FILTER_AGGREGATE_BASIC_INFORMATION { 102 ULONG NextEntryOffset; 103 ULONG Flags; 104 union { 105 struct { 106 ULONG FrameID; 107 ULONG NumberOfInstances; 108 USHORT FilterNameLength; 109 USHORT FilterNameBufferOffset; 110 USHORT FilterAltitudeLength; 111 USHORT FilterAltitudeBufferOffset; 112 } MiniFilter; 113 struct { 114 USHORT FilterNameLength; 115 USHORT FilterNameBufferOffset; 116 } LegacyFilter; 117 } Type; 118} FILTER_AGGREGATE_BASIC_INFORMATION, *PFILTER_AGGREGATE_BASIC_INFORMATION; 119 120#if FLT_MGR_LONGHORN 121 122#define FLTFL_AGGREGATE_INFO_IS_MINIFILTER 0x00000001 123#define FLTFL_AGGREGATE_INFO_IS_LEGACYFILTER 0x00000002 124#define FLTFL_ASI_IS_MINIFILTER 0x00000001 125#define FLTFL_ASI_IS_LEGACYFILTER 0x00000002 126#define FLTFL_VSI_DETACHED_VOLUME 0x00000001 127#define FLTFL_IASI_IS_MINIFILTER 0x00000001 128#define FLTFL_IASI_IS_LEGACYFILTER 0x00000002 129#define FLTFL_IASIM_DETACHED_VOLUME 0x00000001 130#define FLTFL_IASIL_DETACHED_VOLUME 0x00000001 131 132typedef struct _FILTER_AGGREGATE_STANDARD_INFORMATION { 133 ULONG NextEntryOffset; 134 ULONG Flags; 135 union { 136 struct { 137 ULONG Flags; 138 ULONG FrameID; 139 ULONG NumberOfInstances; 140 USHORT FilterNameLength; 141 USHORT FilterNameBufferOffset; 142 USHORT FilterAltitudeLength; 143 USHORT FilterAltitudeBufferOffset; 144 } MiniFilter; 145 struct { 146 ULONG Flags; 147 USHORT FilterNameLength; 148 USHORT FilterNameBufferOffset; 149 USHORT FilterAltitudeLength; 150 USHORT FilterAltitudeBufferOffset; 151 } LegacyFilter; 152 } Type; 153} FILTER_AGGREGATE_STANDARD_INFORMATION, *PFILTER_AGGREGATE_STANDARD_INFORMATION; 154 155typedef struct _FILTER_VOLUME_STANDARD_INFORMATION { 156 ULONG NextEntryOffset; 157 ULONG Flags; 158 ULONG FrameID; 159 FLT_FILESYSTEM_TYPE FileSystemType; 160 USHORT FilterVolumeNameLength; 161 WCHAR FilterVolumeName[1]; 162} FILTER_VOLUME_STANDARD_INFORMATION, *PFILTER_VOLUME_STANDARD_INFORMATION; 163 164typedef struct _INSTANCE_AGGREGATE_STANDARD_INFORMATION { 165 ULONG NextEntryOffset; 166 ULONG Flags; 167 union { 168 struct { 169 ULONG Flags; 170 ULONG FrameID; 171 FLT_FILESYSTEM_TYPE VolumeFileSystemType; 172 USHORT InstanceNameLength; 173 USHORT InstanceNameBufferOffset; 174 USHORT AltitudeLength; 175 USHORT AltitudeBufferOffset; 176 USHORT VolumeNameLength; 177 USHORT VolumeNameBufferOffset; 178 USHORT FilterNameLength; 179 USHORT FilterNameBufferOffset; 180 } MiniFilter; 181 struct { 182 ULONG Flags; 183 USHORT AltitudeLength; 184 USHORT AltitudeBufferOffset; 185 USHORT VolumeNameLength; 186 USHORT VolumeNameBufferOffset; 187 USHORT FilterNameLength; 188 USHORT FilterNameBufferOffset; 189 } LegacyFilter; 190 } Type; 191} INSTANCE_AGGREGATE_STANDARD_INFORMATION, *PINSTANCE_AGGREGATE_STANDARD_INFORMATION; 192 193#endif /* FLT_MGR_LONGHORN */ 194 195typedef struct _FILTER_VOLUME_BASIC_INFORMATION { 196 USHORT FilterVolumeNameLength; 197 WCHAR FilterVolumeName[1]; 198} FILTER_VOLUME_BASIC_INFORMATION, *PFILTER_VOLUME_BASIC_INFORMATION; 199 200typedef 201_Struct_size_bytes_(sizeof(INSTANCE_BASIC_INFORMATION) * InstanceNameLength) 202struct _INSTANCE_BASIC_INFORMATION { 203 ULONG NextEntryOffset; 204 USHORT InstanceNameLength; 205 USHORT InstanceNameBufferOffset; 206} INSTANCE_BASIC_INFORMATION, *PINSTANCE_BASIC_INFORMATION; 207 208typedef 209_Struct_size_bytes_(sizeof(INSTANCE_PARTIAL_INFORMATION) + InstanceNameLength + AltitudeLength) 210struct _INSTANCE_PARTIAL_INFORMATION { 211 ULONG NextEntryOffset; 212 USHORT InstanceNameLength; 213 USHORT InstanceNameBufferOffset; 214 USHORT AltitudeLength; 215 USHORT AltitudeBufferOffset; 216} INSTANCE_PARTIAL_INFORMATION, *PINSTANCE_PARTIAL_INFORMATION; 217 218typedef 219_Struct_size_bytes_(sizeof(INSTANCE_FULL_INFORMATION) + InstanceNameLength + AltitudeLength + VolumeNameLength + FilterNameLength) 220struct _INSTANCE_FULL_INFORMATION { 221 ULONG NextEntryOffset; 222 USHORT InstanceNameLength; 223 USHORT InstanceNameBufferOffset; 224 USHORT AltitudeLength; 225 USHORT AltitudeBufferOffset; 226 USHORT VolumeNameLength; 227 USHORT VolumeNameBufferOffset; 228 USHORT FilterNameLength; 229 USHORT FilterNameBufferOffset; 230} INSTANCE_FULL_INFORMATION, *PINSTANCE_FULL_INFORMATION; 231 232typedef struct _FILTER_MESSAGE_HEADER { 233 ULONG ReplyLength; 234 ULONGLONG MessageId; 235} FILTER_MESSAGE_HEADER, *PFILTER_MESSAGE_HEADER; 236 237typedef struct _FILTER_REPLY_HEADER { 238 NTSTATUS Status; 239 ULONGLONG MessageId; 240} FILTER_REPLY_HEADER, *PFILTER_REPLY_HEADER; 241 242#endif /* FLT_MGR_BASELINE */ 243 244#endif /* __FLT_USER_STRUCTURES_H__ */