[SDK] One step further towards ReactOS source code tree restructure: the sdk folder...
[reactos.git] / reactos / sdk / include / ddk / fltkernel.h
1 /*
2 * fltkernel.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 __FLTKERNEL__
23 #define __FLTKERNEL__
24
25 #ifdef __cplusplus
26 extern "C" {
27 #endif
28
29 #define FLT_MGR_BASELINE (((OSVER(NTDDI_VERSION) == NTDDI_WIN2K) && (SPVER(NTDDI_VERSION) >= SPVER(NTDDI_WIN2KSP4))) || \
30 ((OSVER(NTDDI_VERSION) == NTDDI_WINXP) && (SPVER(NTDDI_VERSION) >= SPVER(NTDDI_WINXPSP2))) || \
31 ((OSVER(NTDDI_VERSION) == NTDDI_WS03) && (SPVER(NTDDI_VERSION) >= SPVER(NTDDI_WS03SP1))) || \
32 (NTDDI_VERSION >= NTDDI_VISTA))
33
34 #define FLT_MGR_AFTER_XPSP2 (((OSVER(NTDDI_VERSION) == NTDDI_WIN2K) && (SPVER(NTDDI_VERSION) >= SPVER(NTDDI_WIN2KSP4))) || \
35 ((OSVER(NTDDI_VERSION) == NTDDI_WINXP) && (SPVER(NTDDI_VERSION) > SPVER(NTDDI_WINXPSP2))) || \
36 ((OSVER(NTDDI_VERSION) == NTDDI_WS03) && (SPVER(NTDDI_VERSION) >= SPVER(NTDDI_WS03SP1))) || \
37 (NTDDI_VERSION >= NTDDI_VISTA))
38
39 #define FLT_MGR_LONGHORN (NTDDI_VERSION >= NTDDI_VISTA)
40 #define FLT_MGR_WIN7 (NTDDI_VERSION >= NTDDI_WIN7)
41
42 #include <ntifs.h>
43 #include <fltuserstructures.h>
44 #include <initguid.h>
45
46 #if FLT_MGR_BASELINE
47
48 #if FLT_MGR_LONGHORN
49 #define FLT_ASSERT(_e) NT_ASSERT(_e)
50 #define FLT_ASSERTMSG(_m, _e) NT_ASSERTMSG(_m, _e)
51 #else
52 #define FLT_ASSERT(_e) ASSERT(_e)
53 #define FLT_ASSERTMSG(_m, _e) ASSERTMSG(_m, _e)
54 #endif /* FLT_MGR_LONGHORN */
55
56 #define Add2Ptr(P,I) ((PVOID)((PUCHAR)(P) + (I)))
57 #define PtrOffset(B,O) ((ULONG)((ULONG_PTR)(O) - (ULONG_PTR)(B)))
58
59 #define ROUND_TO_SIZE(_length, _alignment) \
60 ((((ULONG_PTR)(_length)) + ((_alignment)-1)) & ~(ULONG_PTR) ((_alignment) - 1))
61
62 #define IS_ALIGNED(_pointer, _alignment) \
63 ((((ULONG_PTR) (_pointer)) & ((_alignment) - 1)) == 0)
64
65 #define IRP_MJ_ACQUIRE_FOR_SECTION_SYNCHRONIZATION ((UCHAR)-1)
66 #define IRP_MJ_RELEASE_FOR_SECTION_SYNCHRONIZATION ((UCHAR)-2)
67 #define IRP_MJ_ACQUIRE_FOR_MOD_WRITE ((UCHAR)-3)
68 #define IRP_MJ_RELEASE_FOR_MOD_WRITE ((UCHAR)-4)
69 #define IRP_MJ_ACQUIRE_FOR_CC_FLUSH ((UCHAR)-5)
70 #define IRP_MJ_RELEASE_FOR_CC_FLUSH ((UCHAR)-6)
71 #define IRP_MJ_FAST_IO_CHECK_IF_POSSIBLE ((UCHAR)-13)
72 #define IRP_MJ_NETWORK_QUERY_OPEN ((UCHAR)-14)
73 #define IRP_MJ_MDL_READ ((UCHAR)-15)
74 #define IRP_MJ_MDL_READ_COMPLETE ((UCHAR)-16)
75 #define IRP_MJ_PREPARE_MDL_WRITE ((UCHAR)-17)
76 #define IRP_MJ_MDL_WRITE_COMPLETE ((UCHAR)-18)
77 #define IRP_MJ_VOLUME_MOUNT ((UCHAR)-19)
78 #define IRP_MJ_VOLUME_DISMOUNT ((UCHAR)-20)
79 #define IRP_MJ_OPERATION_END ((UCHAR)0x80)
80 #define FLT_INTERNAL_OPERATION_COUNT 22
81
82 #define NULL_CONTEXT ((PFLT_CONTEXT)NULL)
83
84 typedef struct _FLT_FILTER *PFLT_FILTER;
85 typedef struct _FLT_VOLUME *PFLT_VOLUME;
86 typedef struct _FLT_INSTANCE *PFLT_INSTANCE;
87 typedef struct _FLT_PORT *PFLT_PORT;
88
89 typedef PVOID PFLT_CONTEXT;
90
91 #if !FLT_MGR_LONGHORN
92 typedef struct _KTRANSACTION *PKTRANSACTION;
93 #endif
94
95 #if !defined(_AMD64_) && !defined(_IA64_) && !defined(_ARM_)
96 #include "pshpack4.h"
97 #endif
98
99 typedef union _FLT_PARAMETERS {
100 struct {
101 PIO_SECURITY_CONTEXT SecurityContext;
102 ULONG Options;
103 USHORT POINTER_ALIGNMENT FileAttributes;
104 USHORT ShareAccess;
105 ULONG POINTER_ALIGNMENT EaLength;
106 PVOID EaBuffer;
107 LARGE_INTEGER AllocationSize;
108 } Create;
109 struct {
110 PIO_SECURITY_CONTEXT SecurityContext;
111 ULONG Options;
112 USHORT POINTER_ALIGNMENT Reserved;
113 USHORT ShareAccess;
114 PVOID Parameters;
115 } CreatePipe;
116 struct {
117 PIO_SECURITY_CONTEXT SecurityContext;
118 ULONG Options;
119 USHORT POINTER_ALIGNMENT Reserved;
120 USHORT ShareAccess;
121 PVOID Parameters;
122 } CreateMailslot;
123 struct {
124 ULONG Length;
125 ULONG POINTER_ALIGNMENT Key;
126 LARGE_INTEGER ByteOffset;
127 PVOID ReadBuffer;
128 PMDL MdlAddress;
129 } Read;
130 struct {
131 ULONG Length;
132 ULONG POINTER_ALIGNMENT Key;
133 LARGE_INTEGER ByteOffset;
134 PVOID WriteBuffer;
135 PMDL MdlAddress;
136 } Write;
137 struct {
138 ULONG Length;
139 FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass;
140 PVOID InfoBuffer;
141 } QueryFileInformation;
142 struct {
143 ULONG Length;
144 FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass;
145 PFILE_OBJECT ParentOfTarget;
146 _ANONYMOUS_UNION union {
147 _ANONYMOUS_STRUCT struct {
148 BOOLEAN ReplaceIfExists;
149 BOOLEAN AdvanceOnly;
150 } DUMMYSTRUCTNAME;
151 ULONG ClusterCount;
152 HANDLE DeleteHandle;
153 } DUMMYUNIONNAME;
154 PVOID InfoBuffer;
155 } SetFileInformation;
156 struct {
157 ULONG Length;
158 PVOID EaList;
159 ULONG EaListLength;
160 ULONG POINTER_ALIGNMENT EaIndex;
161 PVOID EaBuffer;
162 PMDL MdlAddress;
163 } QueryEa;
164 struct {
165 ULONG Length;
166 PVOID EaBuffer;
167 PMDL MdlAddress;
168 } SetEa;
169 struct {
170 ULONG Length;
171 FS_INFORMATION_CLASS POINTER_ALIGNMENT FsInformationClass;
172 PVOID VolumeBuffer;
173 } QueryVolumeInformation;
174 struct {
175 ULONG Length;
176 FS_INFORMATION_CLASS POINTER_ALIGNMENT FsInformationClass;
177 PVOID VolumeBuffer;
178 } SetVolumeInformation;
179 union {
180 struct {
181 ULONG Length;
182 PUNICODE_STRING FileName;
183 FILE_INFORMATION_CLASS FileInformationClass;
184 ULONG POINTER_ALIGNMENT FileIndex;
185 PVOID DirectoryBuffer;
186 PMDL MdlAddress;
187 } QueryDirectory;
188 struct {
189 ULONG Length;
190 ULONG POINTER_ALIGNMENT CompletionFilter;
191 ULONG POINTER_ALIGNMENT Spare1;
192 ULONG POINTER_ALIGNMENT Spare2;
193 PVOID DirectoryBuffer;
194 PMDL MdlAddress;
195 } NotifyDirectory;
196 } DirectoryControl;
197 union {
198 struct {
199 PVPB Vpb;
200 PDEVICE_OBJECT DeviceObject;
201 } VerifyVolume;
202 struct {
203 ULONG OutputBufferLength;
204 ULONG POINTER_ALIGNMENT InputBufferLength;
205 ULONG POINTER_ALIGNMENT FsControlCode;
206 } Common;
207 struct {
208 ULONG OutputBufferLength;
209 ULONG POINTER_ALIGNMENT InputBufferLength;
210 ULONG POINTER_ALIGNMENT FsControlCode;
211 PVOID InputBuffer;
212 PVOID OutputBuffer;
213 PMDL OutputMdlAddress;
214 } Neither;
215 struct {
216 ULONG OutputBufferLength;
217 ULONG POINTER_ALIGNMENT InputBufferLength;
218 ULONG POINTER_ALIGNMENT FsControlCode;
219 PVOID SystemBuffer;
220 } Buffered;
221 struct {
222 ULONG OutputBufferLength;
223 ULONG POINTER_ALIGNMENT InputBufferLength;
224 ULONG POINTER_ALIGNMENT FsControlCode;
225 PVOID InputSystemBuffer;
226 PVOID OutputBuffer;
227 PMDL OutputMdlAddress;
228 } Direct;
229 } FileSystemControl;
230 union {
231 struct {
232 ULONG OutputBufferLength;
233 ULONG POINTER_ALIGNMENT InputBufferLength;
234 ULONG POINTER_ALIGNMENT IoControlCode;
235 } Common;
236 struct {
237 ULONG OutputBufferLength;
238 ULONG POINTER_ALIGNMENT InputBufferLength;
239 ULONG POINTER_ALIGNMENT IoControlCode;
240 PVOID InputBuffer;
241 PVOID OutputBuffer;
242 PMDL OutputMdlAddress;
243 } Neither;
244 struct {
245 ULONG OutputBufferLength;
246 ULONG POINTER_ALIGNMENT InputBufferLength;
247 ULONG POINTER_ALIGNMENT IoControlCode;
248 PVOID SystemBuffer;
249 } Buffered;
250 struct {
251 ULONG OutputBufferLength;
252 ULONG POINTER_ALIGNMENT InputBufferLength;
253 ULONG POINTER_ALIGNMENT IoControlCode;
254 PVOID InputSystemBuffer;
255 PVOID OutputBuffer;
256 PMDL OutputMdlAddress;
257 } Direct;
258 struct {
259 ULONG OutputBufferLength;
260 ULONG POINTER_ALIGNMENT InputBufferLength;
261 ULONG POINTER_ALIGNMENT IoControlCode;
262 PVOID InputBuffer;
263 PVOID OutputBuffer;
264 } FastIo;
265 } DeviceIoControl;
266 struct {
267 PLARGE_INTEGER Length;
268 ULONG POINTER_ALIGNMENT Key;
269 LARGE_INTEGER ByteOffset;
270 PEPROCESS ProcessId;
271 BOOLEAN FailImmediately;
272 BOOLEAN ExclusiveLock;
273 } LockControl;
274 struct {
275 SECURITY_INFORMATION SecurityInformation;
276 ULONG POINTER_ALIGNMENT Length;
277 PVOID SecurityBuffer;
278 PMDL MdlAddress;
279 } QuerySecurity;
280 struct {
281 SECURITY_INFORMATION SecurityInformation;
282 PSECURITY_DESCRIPTOR SecurityDescriptor;
283 } SetSecurity;
284 struct {
285 ULONG_PTR ProviderId;
286 PVOID DataPath;
287 ULONG BufferSize;
288 PVOID Buffer;
289 } WMI;
290 struct {
291 ULONG Length;
292 PSID StartSid;
293 PFILE_GET_QUOTA_INFORMATION SidList;
294 ULONG SidListLength;
295 PVOID QuotaBuffer;
296 PMDL MdlAddress;
297 } QueryQuota;
298 struct {
299 ULONG Length;
300 PVOID QuotaBuffer;
301 PMDL MdlAddress;
302 } SetQuota;
303 union {
304 struct {
305 PCM_RESOURCE_LIST AllocatedResources;
306 PCM_RESOURCE_LIST AllocatedResourcesTranslated;
307 } StartDevice;
308 struct {
309 DEVICE_RELATION_TYPE Type;
310 } QueryDeviceRelations;
311 struct {
312 CONST GUID *InterfaceType;
313 USHORT Size;
314 USHORT Version;
315 PINTERFACE Interface;
316 PVOID InterfaceSpecificData;
317 } QueryInterface;
318 struct {
319 PDEVICE_CAPABILITIES Capabilities;
320 } DeviceCapabilities;
321 struct {
322 PIO_RESOURCE_REQUIREMENTS_LIST IoResourceRequirementList;
323 } FilterResourceRequirements;
324 struct {
325 ULONG WhichSpace;
326 PVOID Buffer;
327 ULONG Offset;
328 ULONG POINTER_ALIGNMENT Length;
329 } ReadWriteConfig;
330 struct {
331 BOOLEAN Lock;
332 } SetLock;
333 struct {
334 BUS_QUERY_ID_TYPE IdType;
335 } QueryId;
336 struct {
337 DEVICE_TEXT_TYPE DeviceTextType;
338 LCID POINTER_ALIGNMENT LocaleId;
339 } QueryDeviceText;
340 struct {
341 BOOLEAN InPath;
342 BOOLEAN Reserved[3];
343 DEVICE_USAGE_NOTIFICATION_TYPE POINTER_ALIGNMENT Type;
344 } UsageNotification;
345 } Pnp;
346 struct {
347 FS_FILTER_SECTION_SYNC_TYPE SyncType;
348 ULONG PageProtection;
349 } AcquireForSectionSynchronization;
350 struct {
351 PLARGE_INTEGER EndingOffset;
352 PERESOURCE *ResourceToRelease;
353 } AcquireForModifiedPageWriter;
354 struct {
355 PERESOURCE ResourceToRelease;
356 } ReleaseForModifiedPageWriter;
357 struct {
358 LARGE_INTEGER FileOffset;
359 ULONG Length;
360 ULONG POINTER_ALIGNMENT LockKey;
361 BOOLEAN POINTER_ALIGNMENT CheckForReadOperation;
362 } FastIoCheckIfPossible;
363 struct {
364 PIRP Irp;
365 PFILE_NETWORK_OPEN_INFORMATION NetworkInformation;
366 } NetworkQueryOpen;
367 struct {
368 LARGE_INTEGER FileOffset;
369 ULONG POINTER_ALIGNMENT Length;
370 ULONG POINTER_ALIGNMENT Key;
371 PMDL *MdlChain;
372 } MdlRead;
373 struct {
374 PMDL MdlChain;
375 } MdlReadComplete;
376 struct {
377 LARGE_INTEGER FileOffset;
378 ULONG POINTER_ALIGNMENT Length;
379 ULONG POINTER_ALIGNMENT Key;
380 PMDL *MdlChain;
381 } PrepareMdlWrite;
382 struct {
383 LARGE_INTEGER FileOffset;
384 PMDL MdlChain;
385 } MdlWriteComplete;
386 struct {
387 ULONG DeviceType;
388 } MountVolume;
389 struct {
390 PVOID Argument1;
391 PVOID Argument2;
392 PVOID Argument3;
393 PVOID Argument4;
394 PVOID Argument5;
395 LARGE_INTEGER Argument6;
396 } Others;
397 } FLT_PARAMETERS, *PFLT_PARAMETERS;
398
399 #if !defined(_AMD64_) && !defined(_IA64_) && !defined(_ARM_)
400 #include "poppack.h"
401 #endif
402
403 typedef struct _FLT_IO_PARAMETER_BLOCK {
404 ULONG IrpFlags;
405 UCHAR MajorFunction;
406 UCHAR MinorFunction;
407 UCHAR OperationFlags;
408 UCHAR Reserved;
409 PFILE_OBJECT TargetFileObject;
410 PFLT_INSTANCE TargetInstance;
411 FLT_PARAMETERS Parameters;
412 } FLT_IO_PARAMETER_BLOCK, *PFLT_IO_PARAMETER_BLOCK;
413
414 #define FLTFL_CALLBACK_DATA_REISSUE_MASK 0x0000FFFF
415 #define FLTFL_CALLBACK_DATA_IRP_OPERATION 0x00000001
416 #define FLTFL_CALLBACK_DATA_FAST_IO_OPERATION 0x00000002
417 #define FLTFL_CALLBACK_DATA_FS_FILTER_OPERATION 0x00000004
418 #define FLTFL_CALLBACK_DATA_SYSTEM_BUFFER 0x00000008
419 #define FLTFL_CALLBACK_DATA_GENERATED_IO 0x00010000
420 #define FLTFL_CALLBACK_DATA_REISSUED_IO 0x00020000
421 #define FLTFL_CALLBACK_DATA_DRAINING_IO 0x00040000
422 #define FLTFL_CALLBACK_DATA_POST_OPERATION 0x00080000
423 #define FLTFL_CALLBACK_DATA_NEW_SYSTEM_BUFFER 0x00100000
424 #define FLTFL_CALLBACK_DATA_DIRTY 0x80000000
425
426 #define FLT_SET_CALLBACK_DATA_DIRTY(Data) FltSetCallbackDataDirty(Data)
427 #define FLT_CLEAR_CALLBACK_DATA_DIRTY(Data) FltClearCallbackDataDirty(Data)
428 #define FLT_IS_CALLBACK_DATA_DIRTY(Data) FltIsCallbackDataDirty(Data)
429
430 #define FLT_IS_IRP_OPERATION(Data) (FlagOn((Data)->Flags, FLTFL_CALLBACK_DATA_IRP_OPERATION))
431 #define FLT_IS_FASTIO_OPERATION(Data) (FlagOn((Data)->Flags, FLTFL_CALLBACK_DATA_FAST_IO_OPERATION))
432 #define FLT_IS_FS_FILTER_OPERATION(Data) (FlagOn((Data)->Flags, FLTFL_CALLBACK_DATA_FS_FILTER_OPERATION))
433 #define FLT_IS_REISSUED_IO(Data) (FlagOn((Data)->Flags, FLTFL_CALLBACK_DATA_REISSUED_IO))
434 #define FLT_IS_SYSTEM_BUFFER(Data) (FlagOn((Data)->Flags, FLTFL_CALLBACK_DATA_SYSTEM_BUFFER))
435
436 typedef USHORT FLT_CONTEXT_TYPE;
437
438 #define FLT_VOLUME_CONTEXT 0x0001
439 #define FLT_INSTANCE_CONTEXT 0x0002
440 #define FLT_FILE_CONTEXT 0x0004
441 #define FLT_STREAM_CONTEXT 0x0008
442 #define FLT_STREAMHANDLE_CONTEXT 0x0010
443 #define FLT_TRANSACTION_CONTEXT 0x0020
444 #define FLT_CONTEXT_END 0xffff
445
446 #define FLT_ALL_CONTEXTS (FLT_VOLUME_CONTEXT | FLT_INSTANCE_CONTEXT | \
447 FLT_FILE_CONTEXT | FLT_STREAM_CONTEXT | \
448 FLT_STREAMHANDLE_CONTEXT | FLT_TRANSACTION_CONTEXT)
449
450 typedef ULONG FLT_CALLBACK_DATA_FLAGS;
451
452 #if FLT_MGR_WIN7
453 typedef ULONG FLT_ALLOCATE_CALLBACK_DATA_FLAGS;
454 #define FLT_ALLOCATE_CALLBACK_DATA_PREALLOCATE_ALL_MEMORY 0x00000001
455 #endif /* FLT_MGR_WIN7 */
456
457 typedef struct _FLT_CALLBACK_DATA {
458 FLT_CALLBACK_DATA_FLAGS Flags;
459 PETHREAD CONST Thread;
460 PFLT_IO_PARAMETER_BLOCK CONST Iopb;
461 IO_STATUS_BLOCK IoStatus;
462 struct _FLT_TAG_DATA_BUFFER *TagData;
463 _ANONYMOUS_UNION union {
464 _ANONYMOUS_STRUCT struct {
465 LIST_ENTRY QueueLinks;
466 PVOID QueueContext[2];
467 } DUMMYSTRUCTNAME;
468 PVOID FilterContext[4];
469 } DUMMYUNIONNAME;
470 KPROCESSOR_MODE RequestorMode;
471 } FLT_CALLBACK_DATA, *PFLT_CALLBACK_DATA;
472
473 typedef struct _FLT_RELATED_OBJECTS {
474 USHORT CONST Size;
475 USHORT CONST TransactionContext;
476 PFLT_FILTER CONST Filter;
477 PFLT_VOLUME CONST Volume;
478 PFLT_INSTANCE CONST Instance;
479 PFILE_OBJECT CONST FileObject;
480 PKTRANSACTION CONST Transaction;
481 } FLT_RELATED_OBJECTS, *PFLT_RELATED_OBJECTS;
482 typedef const struct _FLT_RELATED_OBJECTS *PCFLT_RELATED_OBJECTS;
483
484 typedef struct _FLT_RELATED_CONTEXTS {
485 PFLT_CONTEXT VolumeContext;
486 PFLT_CONTEXT InstanceContext;
487 PFLT_CONTEXT FileContext;
488 PFLT_CONTEXT StreamContext;
489 PFLT_CONTEXT StreamHandleContext;
490 PFLT_CONTEXT TransactionContext;
491 } FLT_RELATED_CONTEXTS, *PFLT_RELATED_CONTEXTS;
492
493 typedef VOID
494 (FLTAPI *PFLT_CONTEXT_CLEANUP_CALLBACK)(
495 _In_ PFLT_CONTEXT Context,
496 _In_ FLT_CONTEXT_TYPE ContextType);
497
498 typedef PVOID
499 (FLTAPI *PFLT_CONTEXT_ALLOCATE_CALLBACK)(
500 _In_ POOL_TYPE PoolType,
501 _In_ SIZE_T Size,
502 _In_ FLT_CONTEXT_TYPE ContextType);
503
504 typedef VOID
505 (FLTAPI *PFLT_CONTEXT_FREE_CALLBACK)(
506 _In_ PVOID Pool,
507 _In_ FLT_CONTEXT_TYPE ContextType);
508
509 typedef USHORT FLT_CONTEXT_REGISTRATION_FLAGS;
510
511 #define FLTFL_CONTEXT_REGISTRATION_NO_EXACT_SIZE_MATCH 0x0001
512
513 #define FLT_VARIABLE_SIZED_CONTEXTS ((SIZE_T)-1)
514
515 typedef struct _FLT_CONTEXT_REGISTRATION {
516 FLT_CONTEXT_TYPE ContextType;
517 FLT_CONTEXT_REGISTRATION_FLAGS Flags;
518 PFLT_CONTEXT_CLEANUP_CALLBACK ContextCleanupCallback;
519 SIZE_T Size;
520 ULONG PoolTag;
521 PFLT_CONTEXT_ALLOCATE_CALLBACK ContextAllocateCallback;
522 PFLT_CONTEXT_FREE_CALLBACK ContextFreeCallback;
523 PVOID Reserved1;
524 } FLT_CONTEXT_REGISTRATION, *PFLT_CONTEXT_REGISTRATION;
525 typedef const struct _FLT_CONTEXT_REGISTRATION *PCFLT_CONTEXT_REGISTRATION;
526
527 typedef ULONG FLT_INSTANCE_SETUP_FLAGS;
528
529 #define FLTFL_INSTANCE_SETUP_AUTOMATIC_ATTACHMENT 0x00000001
530 #define FLTFL_INSTANCE_SETUP_MANUAL_ATTACHMENT 0x00000002
531 #define FLTFL_INSTANCE_SETUP_NEWLY_MOUNTED_VOLUME 0x00000004
532
533 #if FLT_MGR_LONGHORN
534
535 #define FLTFL_INSTANCE_SETUP_DETACHED_VOLUME 0x00000008
536
537 #define FLT_MAX_TRANSACTION_NOTIFICATIONS (TRANSACTION_NOTIFY_PREPREPARE | \
538 TRANSACTION_NOTIFY_PREPARE | \
539 TRANSACTION_NOTIFY_COMMIT | \
540 TRANSACTION_NOTIFY_ROLLBACK | \
541 TRANSACTION_NOTIFY_COMMIT_FINALIZE)
542
543 #endif /* FLT_MGR_LONGHORN */
544
545 typedef NTSTATUS
546 (FLTAPI *PFLT_INSTANCE_SETUP_CALLBACK)(
547 _In_ PCFLT_RELATED_OBJECTS FltObjects,
548 _In_ FLT_INSTANCE_SETUP_FLAGS Flags,
549 _In_ DEVICE_TYPE VolumeDeviceType,
550 _In_ FLT_FILESYSTEM_TYPE VolumeFilesystemType);
551
552 typedef ULONG FLT_INSTANCE_QUERY_TEARDOWN_FLAGS;
553
554 typedef NTSTATUS
555 (FLTAPI *PFLT_INSTANCE_QUERY_TEARDOWN_CALLBACK)(
556 _In_ PCFLT_RELATED_OBJECTS FltObjects,
557 _In_ FLT_INSTANCE_QUERY_TEARDOWN_FLAGS Flags);
558
559 typedef ULONG FLT_INSTANCE_TEARDOWN_FLAGS;
560
561 #define FLTFL_INSTANCE_TEARDOWN_MANUAL 0x00000001
562 #define FLTFL_INSTANCE_TEARDOWN_FILTER_UNLOAD 0x00000002
563 #define FLTFL_INSTANCE_TEARDOWN_MANDATORY_FILTER_UNLOAD 0x00000004
564 #define FLTFL_INSTANCE_TEARDOWN_VOLUME_DISMOUNT 0x00000008
565 #define FLTFL_INSTANCE_TEARDOWN_INTERNAL_ERROR 0x00000010
566
567 typedef VOID
568 (FLTAPI *PFLT_INSTANCE_TEARDOWN_CALLBACK)(
569 _In_ PCFLT_RELATED_OBJECTS FltObjects,
570 _In_ FLT_INSTANCE_TEARDOWN_FLAGS Reason);
571
572 typedef enum _FLT_PREOP_CALLBACK_STATUS {
573 FLT_PREOP_SUCCESS_WITH_CALLBACK,
574 FLT_PREOP_SUCCESS_NO_CALLBACK,
575 FLT_PREOP_PENDING,
576 FLT_PREOP_DISALLOW_FASTIO,
577 FLT_PREOP_COMPLETE,
578 FLT_PREOP_SYNCHRONIZE
579 } FLT_PREOP_CALLBACK_STATUS, *PFLT_PREOP_CALLBACK_STATUS;
580
581 typedef FLT_PREOP_CALLBACK_STATUS
582 (FLTAPI *PFLT_PRE_OPERATION_CALLBACK)(
583 _Inout_ PFLT_CALLBACK_DATA Data,
584 _In_ PCFLT_RELATED_OBJECTS FltObjects,
585 _Outptr_result_maybenull_ PVOID *CompletionContext);
586
587 typedef enum _FLT_POSTOP_CALLBACK_STATUS {
588 FLT_POSTOP_FINISHED_PROCESSING,
589 FLT_POSTOP_MORE_PROCESSING_REQUIRED
590 } FLT_POSTOP_CALLBACK_STATUS, *PFLT_POSTOP_CALLBACK_STATUS;
591
592 typedef ULONG FLT_POST_OPERATION_FLAGS;
593
594 #define FLTFL_POST_OPERATION_DRAINING 0x00000001
595
596 typedef FLT_POSTOP_CALLBACK_STATUS
597 (FLTAPI *PFLT_POST_OPERATION_CALLBACK)(
598 _Inout_ PFLT_CALLBACK_DATA Data,
599 _In_ PCFLT_RELATED_OBJECTS FltObjects,
600 _In_opt_ PVOID CompletionContext,
601 _In_ FLT_POST_OPERATION_FLAGS Flags);
602
603 typedef ULONG FLT_OPERATION_REGISTRATION_FLAGS;
604
605 #define FLTFL_OPERATION_REGISTRATION_SKIP_PAGING_IO 0x00000001
606 #define FLTFL_OPERATION_REGISTRATION_SKIP_CACHED_IO 0x00000002
607 #define FLTFL_OPERATION_REGISTRATION_SKIP_NON_DASD_IO 0x00000004
608
609 typedef struct _FLT_OPERATION_REGISTRATION {
610 UCHAR MajorFunction;
611 FLT_OPERATION_REGISTRATION_FLAGS Flags;
612 PFLT_PRE_OPERATION_CALLBACK PreOperation;
613 PFLT_POST_OPERATION_CALLBACK PostOperation;
614 PVOID Reserved1;
615 } FLT_OPERATION_REGISTRATION, *PFLT_OPERATION_REGISTRATION;
616
617 typedef struct _FLT_TAG_DATA_BUFFER {
618 ULONG FileTag;
619 USHORT TagDataLength;
620 USHORT UnparsedNameLength;
621 _ANONYMOUS_UNION union {
622 struct {
623 USHORT SubstituteNameOffset;
624 USHORT SubstituteNameLength;
625 USHORT PrintNameOffset;
626 USHORT PrintNameLength;
627 ULONG Flags;
628 WCHAR PathBuffer[1];
629 } SymbolicLinkReparseBuffer;
630 struct {
631 USHORT SubstituteNameOffset;
632 USHORT SubstituteNameLength;
633 USHORT PrintNameOffset;
634 USHORT PrintNameLength;
635 WCHAR PathBuffer[1];
636 } MountPointReparseBuffer;
637 struct {
638 UCHAR DataBuffer[1];
639 } GenericReparseBuffer;
640 struct {
641 GUID TagGuid;
642 UCHAR DataBuffer[1];
643 } GenericGUIDReparseBuffer;
644 } DUMMYUNIONNAME;
645 } FLT_TAG_DATA_BUFFER, *PFLT_TAG_DATA_BUFFER;
646
647 #define FLT_TAG_DATA_BUFFER_HEADER_SIZE FIELD_OFFSET(FLT_TAG_DATA_BUFFER, GenericReparseBuffer)
648
649 typedef ULONG FLT_FILTER_UNLOAD_FLAGS;
650
651 #define FLTFL_FILTER_UNLOAD_MANDATORY 0x00000001
652
653 typedef NTSTATUS
654 (FLTAPI *PFLT_FILTER_UNLOAD_CALLBACK)(
655 FLT_FILTER_UNLOAD_FLAGS Flags);
656
657 typedef struct _FLT_NAME_CONTROL {
658 UNICODE_STRING Name;
659 } FLT_NAME_CONTROL, *PFLT_NAME_CONTROL;
660
661 typedef ULONG FLT_FILE_NAME_OPTIONS;
662
663 typedef NTSTATUS
664 (FLTAPI *PFLT_GENERATE_FILE_NAME)(
665 _In_ PFLT_INSTANCE Instance,
666 _In_ PFILE_OBJECT FileObject,
667 _In_opt_ PFLT_CALLBACK_DATA CallbackData,
668 _In_ FLT_FILE_NAME_OPTIONS NameOptions,
669 _Out_ PBOOLEAN CacheFileNameInformation,
670 _Out_ PFLT_NAME_CONTROL FileName);
671
672 typedef ULONG FLT_NORMALIZE_NAME_FLAGS;
673
674 #define FLTFL_NORMALIZE_NAME_CASE_SENSITIVE 0x01
675 #define FLTFL_NORMALIZE_NAME_DESTINATION_FILE_NAME 0x02
676
677 typedef NTSTATUS
678 (FLTAPI *PFLT_NORMALIZE_NAME_COMPONENT)(
679 _In_ PFLT_INSTANCE Instance,
680 _In_ PCUNICODE_STRING ParentDirectory,
681 _In_ USHORT VolumeNameLength,
682 _In_ PCUNICODE_STRING Component,
683 _Out_writes_bytes_(ExpandComponentNameLength) PFILE_NAMES_INFORMATION ExpandComponentName,
684 _In_ ULONG ExpandComponentNameLength,
685 _In_ FLT_NORMALIZE_NAME_FLAGS Flags,
686 _Inout_ PVOID *NormalizationContext);
687
688 typedef NTSTATUS
689 (FLTAPI *PFLT_NORMALIZE_NAME_COMPONENT_EX)(
690 _In_ PFLT_INSTANCE Instance,
691 _In_ PFILE_OBJECT FileObject,
692 _In_ PCUNICODE_STRING ParentDirectory,
693 _In_ USHORT VolumeNameLength,
694 _In_ PCUNICODE_STRING Component,
695 _Out_writes_bytes_(ExpandComponentNameLength) PFILE_NAMES_INFORMATION ExpandComponentName,
696 _In_ ULONG ExpandComponentNameLength,
697 _In_ FLT_NORMALIZE_NAME_FLAGS Flags,
698 _Inout_ PVOID *NormalizationContext);
699
700 typedef VOID
701 (FLTAPI *PFLT_NORMALIZE_CONTEXT_CLEANUP)(
702 _In_opt_ PVOID *NormalizationContext);
703
704 #if FLT_MGR_LONGHORN
705 typedef NTSTATUS
706 (FLTAPI *PFLT_TRANSACTION_NOTIFICATION_CALLBACK)(
707 _In_ PCFLT_RELATED_OBJECTS FltObjects,
708 _In_ PFLT_CONTEXT TransactionContext,
709 _In_ ULONG NotificationMask);
710 #endif /* FLT_MGR_LONGHORN */
711
712 #define FLT_REGISTRATION_VERSION_0200 0x0200
713 #define FLT_REGISTRATION_VERSION_0201 0x0201
714 #define FLT_REGISTRATION_VERSION_0202 0x0202
715 #define FLT_REGISTRATION_VERSION_0203 0x0203
716
717 #if FLT_MGR_LONGHORN
718 #define FLT_REGISTRATION_VERSION FLT_REGISTRATION_VERSION_0202
719 #else
720 #define FLT_REGISTRATION_VERSION FLT_REGISTRATION_VERSION_0200
721 #endif
722
723 typedef ULONG FLT_REGISTRATION_FLAGS;
724
725 #define FLTFL_REGISTRATION_DO_NOT_SUPPORT_SERVICE_STOP 0x00000001
726 #define FLTFL_REGISTRATION_SUPPORT_NPFS_MSFS 0x00000002
727
728 typedef struct _FLT_REGISTRATION {
729 USHORT Size;
730 USHORT Version;
731 FLT_REGISTRATION_FLAGS Flags;
732 CONST FLT_CONTEXT_REGISTRATION *ContextRegistration;
733 CONST FLT_OPERATION_REGISTRATION *OperationRegistration;
734 PFLT_FILTER_UNLOAD_CALLBACK FilterUnloadCallback;
735 PFLT_INSTANCE_SETUP_CALLBACK InstanceSetupCallback;
736 PFLT_INSTANCE_QUERY_TEARDOWN_CALLBACK InstanceQueryTeardownCallback;
737 PFLT_INSTANCE_TEARDOWN_CALLBACK InstanceTeardownStartCallback;
738 PFLT_INSTANCE_TEARDOWN_CALLBACK InstanceTeardownCompleteCallback;
739 PFLT_GENERATE_FILE_NAME GenerateFileNameCallback;
740 PFLT_NORMALIZE_NAME_COMPONENT NormalizeNameComponentCallback;
741 PFLT_NORMALIZE_CONTEXT_CLEANUP NormalizeContextCleanupCallback;
742 #if FLT_MGR_LONGHORN
743 PFLT_TRANSACTION_NOTIFICATION_CALLBACK TransactionNotificationCallback;
744 PFLT_NORMALIZE_NAME_COMPONENT_EX NormalizeNameComponentExCallback;
745 #endif /* FLT_MGR_LONGHORN */
746 } FLT_REGISTRATION, *PFLT_REGISTRATION;
747
748 typedef VOID
749 (FLTAPI *PFLT_COMPLETED_ASYNC_IO_CALLBACK)(
750 _In_ PFLT_CALLBACK_DATA CallbackData,
751 _In_ PFLT_CONTEXT Context);
752
753 typedef ULONG FLT_IO_OPERATION_FLAGS;
754
755 #define FLTFL_IO_OPERATION_NON_CACHED 0x00000001
756 #define FLTFL_IO_OPERATION_PAGING 0x00000002
757 #define FLTFL_IO_OPERATION_DO_NOT_UPDATE_BYTE_OFFSET 0x00000004
758
759 #if FLT_MGR_LONGHORN
760 #define FLTFL_IO_OPERATION_SYNCHRONOUS_PAGING 0x00000008
761 #endif
762
763 typedef VOID
764 (FLTAPI *PFLT_GET_OPERATION_STATUS_CALLBACK)(
765 _In_ PCFLT_RELATED_OBJECTS FltObjects,
766 _In_ PFLT_IO_PARAMETER_BLOCK IopbSnapshot,
767 _In_ NTSTATUS OperationStatus,
768 _In_opt_ PVOID RequesterContext);
769
770 typedef ULONG FLT_FILE_NAME_OPTIONS;
771
772 #define FLT_VALID_FILE_NAME_FORMATS 0x000000ff
773
774 #define FLT_FILE_NAME_NORMALIZED 0x01
775 #define FLT_FILE_NAME_OPENED 0x02
776 #define FLT_FILE_NAME_SHORT 0x03
777
778 #define FltGetFileNameFormat( _NameOptions ) ((_NameOptions) & FLT_VALID_FILE_NAME_FORMATS)
779
780 #define FLT_VALID_FILE_NAME_QUERY_METHODS 0x0000ff00
781
782 #define FLT_FILE_NAME_QUERY_DEFAULT 0x0100
783 #define FLT_FILE_NAME_QUERY_CACHE_ONLY 0x0200
784 #define FLT_FILE_NAME_QUERY_FILESYSTEM_ONLY 0x0300
785 #define FLT_FILE_NAME_QUERY_ALWAYS_ALLOW_CACHE_LOOKUP 0x0400
786
787 #define FltGetFileNameQueryMethod( _NameOptions ) ((_NameOptions) & FLT_VALID_FILE_NAME_QUERY_METHODS)
788
789 #define FLT_VALID_FILE_NAME_FLAGS 0xff000000
790
791 #define FLT_FILE_NAME_REQUEST_FROM_CURRENT_PROVIDER 0x01000000
792 #define FLT_FILE_NAME_DO_NOT_CACHE 0x02000000
793
794 #if FLT_MGR_AFTER_XPSP2
795 #define FLT_FILE_NAME_ALLOW_QUERY_ON_REPARSE 0x04000000
796 #endif
797
798 typedef USHORT FLT_FILE_NAME_PARSED_FLAGS;
799
800 #define FLTFL_FILE_NAME_PARSED_FINAL_COMPONENT 0x0001
801 #define FLTFL_FILE_NAME_PARSED_EXTENSION 0x0002
802 #define FLTFL_FILE_NAME_PARSED_STREAM 0x0004
803 #define FLTFL_FILE_NAME_PARSED_PARENT_DIR 0x0008
804
805 typedef struct _FLT_FILE_NAME_INFORMATION {
806 USHORT Size;
807 FLT_FILE_NAME_PARSED_FLAGS NamesParsed;
808 FLT_FILE_NAME_OPTIONS Format;
809 UNICODE_STRING Name;
810 UNICODE_STRING Volume;
811 UNICODE_STRING Share;
812 UNICODE_STRING Extension;
813 UNICODE_STRING Stream;
814 UNICODE_STRING FinalComponent;
815 UNICODE_STRING ParentDir;
816 } FLT_FILE_NAME_INFORMATION, *PFLT_FILE_NAME_INFORMATION;
817
818 typedef enum _FLT_SET_CONTEXT_OPERATION {
819 FLT_SET_CONTEXT_REPLACE_IF_EXISTS,
820 FLT_SET_CONTEXT_KEEP_IF_EXISTS
821 } FLT_SET_CONTEXT_OPERATION, *PFLT_SET_CONTEXT_OPERATION;
822
823 typedef struct _FLT_VOLUME_PROPERTIES {
824 DEVICE_TYPE DeviceType;
825 ULONG DeviceCharacteristics;
826 ULONG DeviceObjectFlags;
827 ULONG AlignmentRequirement;
828 USHORT SectorSize;
829 USHORT Reserved0;
830 UNICODE_STRING FileSystemDriverName;
831 UNICODE_STRING FileSystemDeviceName;
832 UNICODE_STRING RealDeviceName;
833 } FLT_VOLUME_PROPERTIES, *PFLT_VOLUME_PROPERTIES;
834
835 #define FLT_PORT_CONNECT 0x0001
836 #define FLT_PORT_ALL_ACCESS (FLT_PORT_CONNECT | STANDARD_RIGHTS_ALL)
837
838 typedef NTSTATUS
839 (FLTAPI *PFLT_MESSAGE_NOTIFY)(
840 _In_opt_ PVOID PortCookie,
841 _In_reads_bytes_opt_(InputBufferLength) PVOID InputBuffer,
842 _In_ ULONG InputBufferLength,
843 _Out_writes_bytes_to_opt_(OutputBufferLength,*ReturnOutputBufferLength) PVOID OutputBuffer,
844 _In_ ULONG OutputBufferLength,
845 _Out_ PULONG ReturnOutputBufferLength);
846
847 typedef NTSTATUS
848 (FLTAPI *PFLT_CONNECT_NOTIFY)(
849 _In_ PFLT_PORT ClientPort,
850 _In_opt_ PVOID ServerPortCookie,
851 _In_reads_bytes_opt_(SizeOfContext) PVOID ConnectionContext,
852 _In_ ULONG SizeOfContext,
853 _Outptr_result_maybenull_ PVOID *ConnectionPortCookie);
854
855 typedef VOID
856 (FLTAPI *PFLT_DISCONNECT_NOTIFY)(
857 _In_opt_ PVOID ConnectionCookie);
858
859 typedef VOID
860 (FLTAPI *PFLT_COMPLETE_CANCELED_CALLBACK)(
861 _In_ PFLT_CALLBACK_DATA CallbackData);
862
863 typedef struct _FLT_DEFERRED_IO_WORKITEM *PFLT_DEFERRED_IO_WORKITEM;
864 typedef struct _FLT_GENERIC_WORKITEM *PFLT_GENERIC_WORKITEM;
865
866 typedef VOID
867 (FLTAPI *PFLT_DEFERRED_IO_WORKITEM_ROUTINE)(
868 _In_ PFLT_DEFERRED_IO_WORKITEM FltWorkItem,
869 _In_ PFLT_CALLBACK_DATA CallbackData,
870 _In_opt_ PVOID Context);
871
872 typedef VOID
873 (FLTAPI *PFLT_GENERIC_WORKITEM_ROUTINE)(
874 _In_ PFLT_GENERIC_WORKITEM FltWorkItem,
875 _In_ PVOID FltObject,
876 _In_opt_ PVOID Context);
877
878 typedef IO_CSQ_IRP_CONTEXT FLT_CALLBACK_DATA_QUEUE_IO_CONTEXT, *PFLT_CALLBACK_DATA_QUEUE_IO_CONTEXT;
879
880 typedef struct _FLT_CALLBACK_DATA_QUEUE FLT_CALLBACK_DATA_QUEUE, *PFLT_CALLBACK_DATA_QUEUE;
881
882 typedef NTSTATUS
883 (FLTAPI *PFLT_CALLBACK_DATA_QUEUE_INSERT_IO)(
884 _Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq,
885 _In_ PFLT_CALLBACK_DATA Cbd,
886 _In_opt_ PVOID InsertContext);
887
888 typedef VOID
889 (FLTAPI *PFLT_CALLBACK_DATA_QUEUE_REMOVE_IO)(
890 _Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq,
891 _In_ PFLT_CALLBACK_DATA Cbd);
892
893 typedef PFLT_CALLBACK_DATA
894 (FLTAPI *PFLT_CALLBACK_DATA_QUEUE_PEEK_NEXT_IO)(
895 _In_ PFLT_CALLBACK_DATA_QUEUE Cbdq,
896 _In_opt_ PFLT_CALLBACK_DATA Cbd,
897 _In_opt_ PVOID PeekContext);
898
899 typedef VOID
900 (FLTAPI *PFLT_CALLBACK_DATA_QUEUE_ACQUIRE)(
901 _Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq,
902 _Out_opt_ PKIRQL Irql);
903
904 typedef VOID
905 (FLTAPI *PFLT_CALLBACK_DATA_QUEUE_RELEASE)(
906 _Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq,
907 _In_opt_ KIRQL Irql);
908
909 typedef VOID
910 (FLTAPI *PFLT_CALLBACK_DATA_QUEUE_COMPLETE_CANCELED_IO)(
911 _Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq,
912 _Inout_ PFLT_CALLBACK_DATA Cbd);
913
914 typedef enum _FLT_CALLBACK_DATA_QUEUE_FLAGS FLT_CALLBACK_DATA_QUEUE_FLAGS;
915
916 typedef struct _FLT_CALLBACK_DATA_QUEUE {
917 IO_CSQ Csq;
918 FLT_CALLBACK_DATA_QUEUE_FLAGS Flags;
919 PFLT_INSTANCE Instance;
920 PFLT_CALLBACK_DATA_QUEUE_INSERT_IO InsertIo;
921 PFLT_CALLBACK_DATA_QUEUE_REMOVE_IO RemoveIo;
922 PFLT_CALLBACK_DATA_QUEUE_PEEK_NEXT_IO PeekNextIo;
923 PFLT_CALLBACK_DATA_QUEUE_ACQUIRE Acquire;
924 PFLT_CALLBACK_DATA_QUEUE_RELEASE Release;
925 PFLT_CALLBACK_DATA_QUEUE_COMPLETE_CANCELED_IO CompleteCanceledIo;
926 } FLT_CALLBACK_DATA_QUEUE, *PFLT_CALLBACK_DATA_QUEUE;
927
928 typedef NTSTATUS
929 (*PFLT_COMPLETE_LOCK_CALLBACK_DATA_ROUTINE)(
930 _In_opt_ PVOID Context,
931 _In_ PFLT_CALLBACK_DATA CallbackData);
932
933 typedef VOID
934 (FLTAPI *PFLTOPLOCK_WAIT_COMPLETE_ROUTINE)(
935 _In_ PFLT_CALLBACK_DATA CallbackData,
936 _In_opt_ PVOID Context);
937
938 typedef VOID
939 (FLTAPI *PFLTOPLOCK_PREPOST_CALLBACKDATA_ROUTINE)(
940 _In_ PFLT_CALLBACK_DATA CallbackData,
941 _In_opt_ PVOID Context);
942
943 VOID
944 FLTAPI
945 FltSetCallbackDataDirty(
946 _Inout_ PFLT_CALLBACK_DATA Data);
947
948 VOID
949 FLTAPI
950 FltClearCallbackDataDirty(
951 _Inout_ PFLT_CALLBACK_DATA Data);
952
953 BOOLEAN
954 FLTAPI
955 FltIsCallbackDataDirty(
956 _In_ PFLT_CALLBACK_DATA Data);
957
958 _Must_inspect_result_
959 BOOLEAN
960 FLTAPI
961 FltDoCompletionProcessingWhenSafe(
962 _In_ PFLT_CALLBACK_DATA Data,
963 _In_ PCFLT_RELATED_OBJECTS FltObjects,
964 _In_opt_ PVOID CompletionContext,
965 _In_ FLT_POST_OPERATION_FLAGS Flags,
966 _In_ PFLT_POST_OPERATION_CALLBACK SafePostCallback,
967 _Out_ PFLT_POSTOP_CALLBACK_STATUS RetPostOperationStatus);
968
969 _Must_inspect_result_
970 _IRQL_requires_max_(APC_LEVEL)
971 NTSTATUS
972 FLTAPI
973 FltCheckAndGrowNameControl(
974 _Inout_ PFLT_NAME_CONTROL NameCtrl,
975 _In_ USHORT NewSize);
976
977 _Must_inspect_result_
978 _IRQL_requires_max_(APC_LEVEL)
979 NTSTATUS
980 FLTAPI
981 FltPurgeFileNameInformationCache(
982 _In_ PFLT_INSTANCE Instance,
983 _In_opt_ PFILE_OBJECT FileObject);
984
985 _Must_inspect_result_
986 _IRQL_requires_max_(APC_LEVEL)
987 NTSTATUS
988 FLTAPI
989 FltRegisterFilter(
990 _In_ PDRIVER_OBJECT Driver,
991 _In_ CONST FLT_REGISTRATION *Registration,
992 _Outptr_ PFLT_FILTER *RetFilter);
993
994 _IRQL_requires_max_(APC_LEVEL)
995 VOID
996 FLTAPI
997 FltUnregisterFilter(
998 _In_ PFLT_FILTER Filter);
999
1000 _Must_inspect_result_
1001 _IRQL_requires_max_(APC_LEVEL)
1002 NTSTATUS
1003 FLTAPI
1004 FltStartFiltering(
1005 _In_ PFLT_FILTER Filter);
1006
1007 _Must_inspect_result_
1008 _IRQL_requires_max_(APC_LEVEL)
1009 PVOID
1010 FLTAPI
1011 FltGetRoutineAddress(
1012 _In_ PCSTR FltMgrRoutineName);
1013
1014 _When_(CallbackStatus==FLT_PREOP_COMPLETE, _IRQL_requires_max_(DISPATCH_LEVEL))
1015 _When_(CallbackStatus!=FLT_PREOP_COMPLETE, _IRQL_requires_max_(APC_LEVEL))
1016 VOID
1017 FLTAPI
1018 FltCompletePendedPreOperation(
1019 _In_ PFLT_CALLBACK_DATA CallbackData,
1020 _In_ FLT_PREOP_CALLBACK_STATUS CallbackStatus,
1021 _In_opt_ PVOID Context);
1022
1023 _IRQL_requires_max_(DISPATCH_LEVEL)
1024 VOID
1025 FLTAPI
1026 FltCompletePendedPostOperation(
1027 _In_ PFLT_CALLBACK_DATA CallbackData);
1028
1029 _Must_inspect_result_
1030 _IRQL_requires_max_(DISPATCH_LEVEL)
1031 NTSTATUS
1032 FLTAPI
1033 FltRequestOperationStatusCallback(
1034 _In_ PFLT_CALLBACK_DATA Data,
1035 _In_ PFLT_GET_OPERATION_STATUS_CALLBACK CallbackRoutine,
1036 _In_opt_ PVOID RequesterContext);
1037
1038 _When_((PoolType==NonPagedPoolNx), _IRQL_requires_max_(DISPATCH_LEVEL))
1039 _When_((PoolType!=NonPagedPoolNx), _IRQL_requires_max_(APC_LEVEL))
1040 PVOID
1041 FLTAPI
1042 FltAllocatePoolAlignedWithTag(
1043 _In_ PFLT_INSTANCE Instance,
1044 _In_ POOL_TYPE PoolType,
1045 _In_ SIZE_T NumberOfBytes,
1046 _In_ ULONG Tag);
1047
1048 _IRQL_requires_max_(DISPATCH_LEVEL)
1049 VOID
1050 FLTAPI
1051 FltFreePoolAlignedWithTag(
1052 _In_ PFLT_INSTANCE Instance,
1053 _In_ PVOID Buffer,
1054 _In_ ULONG Tag);
1055
1056 _Must_inspect_result_
1057 _IRQL_requires_max_(APC_LEVEL)
1058 NTSTATUS
1059 FLTAPI
1060 FltGetFileNameInformation(
1061 _In_ PFLT_CALLBACK_DATA CallbackData,
1062 _In_ FLT_FILE_NAME_OPTIONS NameOptions,
1063 _Outptr_ PFLT_FILE_NAME_INFORMATION *FileNameInformation);
1064
1065 _Must_inspect_result_
1066 _IRQL_requires_max_(APC_LEVEL)
1067 NTSTATUS
1068 FLTAPI
1069 FltGetFileNameInformationUnsafe(
1070 _In_ PFILE_OBJECT FileObject,
1071 _In_opt_ PFLT_INSTANCE Instance,
1072 _In_ FLT_FILE_NAME_OPTIONS NameOptions,
1073 _Outptr_ PFLT_FILE_NAME_INFORMATION *FileNameInformation);
1074
1075 _IRQL_requires_max_(APC_LEVEL)
1076 VOID
1077 FLTAPI
1078 FltReleaseFileNameInformation(
1079 _In_ PFLT_FILE_NAME_INFORMATION FileNameInformation);
1080
1081 _IRQL_requires_max_(APC_LEVEL)
1082 VOID
1083 FLTAPI
1084 FltReferenceFileNameInformation(
1085 _In_ PFLT_FILE_NAME_INFORMATION FileNameInformation);
1086
1087 _IRQL_requires_max_(APC_LEVEL)
1088 NTSTATUS
1089 FLTAPI
1090 FltParseFileName(
1091 _In_ PCUNICODE_STRING FileName,
1092 _Inout_opt_ PUNICODE_STRING Extension,
1093 _Inout_opt_ PUNICODE_STRING Stream,
1094 _Inout_opt_ PUNICODE_STRING FinalComponent);
1095
1096 _IRQL_requires_max_(APC_LEVEL)
1097 NTSTATUS
1098 FLTAPI
1099 FltParseFileNameInformation(
1100 _Inout_ PFLT_FILE_NAME_INFORMATION FileNameInformation);
1101
1102 _Must_inspect_result_
1103 _IRQL_requires_max_(APC_LEVEL)
1104 NTSTATUS
1105 FLTAPI
1106 FltGetTunneledName(
1107 _In_ PFLT_CALLBACK_DATA CallbackData,
1108 _In_ PFLT_FILE_NAME_INFORMATION FileNameInformation,
1109 _Outptr_result_maybenull_ PFLT_FILE_NAME_INFORMATION *RetTunneledFileNameInformation);
1110
1111 _Must_inspect_result_
1112 _IRQL_requires_max_(APC_LEVEL)
1113 NTSTATUS
1114 FLTAPI
1115 FltGetVolumeName(
1116 _In_ PFLT_VOLUME Volume,
1117 _Inout_opt_ PUNICODE_STRING VolumeName,
1118 _Out_opt_ PULONG BufferSizeNeeded);
1119
1120 _Must_inspect_result_
1121 _IRQL_requires_max_(APC_LEVEL)
1122 NTSTATUS
1123 FLTAPI
1124 FltGetDestinationFileNameInformation(
1125 _In_ PFLT_INSTANCE Instance,
1126 _In_ PFILE_OBJECT FileObject,
1127 _In_opt_ HANDLE RootDirectory,
1128 _In_reads_bytes_(FileNameLength) PWSTR FileName,
1129 _In_ ULONG FileNameLength,
1130 _In_ FLT_FILE_NAME_OPTIONS NameOptions,
1131 _Outptr_ PFLT_FILE_NAME_INFORMATION *RetFileNameInformation);
1132
1133 _Must_inspect_result_
1134 _IRQL_requires_max_(APC_LEVEL)
1135 NTSTATUS
1136 FLTAPI
1137 FltIsDirectory(
1138 _In_ PFILE_OBJECT FileObject,
1139 _In_ PFLT_INSTANCE Instance,
1140 _Out_ PBOOLEAN IsDirectory);
1141
1142 _Must_inspect_result_
1143 _IRQL_requires_max_(PASSIVE_LEVEL)
1144 NTSTATUS
1145 FLTAPI
1146 FltLoadFilter(
1147 _In_ PCUNICODE_STRING FilterName);
1148
1149 _Must_inspect_result_
1150 _IRQL_requires_max_(PASSIVE_LEVEL)
1151 NTSTATUS
1152 FLTAPI
1153 FltUnloadFilter(
1154 _In_ PCUNICODE_STRING FilterName);
1155
1156 _Must_inspect_result_
1157 _IRQL_requires_max_(APC_LEVEL)
1158 NTSTATUS
1159 FLTAPI
1160 FltAttachVolume(
1161 _Inout_ PFLT_FILTER Filter,
1162 _Inout_ PFLT_VOLUME Volume,
1163 _In_opt_ PCUNICODE_STRING InstanceName,
1164 _Outptr_opt_result_maybenull_ PFLT_INSTANCE *RetInstance);
1165
1166 _Must_inspect_result_
1167 _IRQL_requires_max_(APC_LEVEL)
1168 NTSTATUS
1169 FLTAPI
1170 FltAttachVolumeAtAltitude(
1171 _Inout_ PFLT_FILTER Filter,
1172 _Inout_ PFLT_VOLUME Volume,
1173 _In_ PCUNICODE_STRING Altitude,
1174 _In_opt_ PCUNICODE_STRING InstanceName,
1175 _Outptr_opt_result_maybenull_ PFLT_INSTANCE *RetInstance);
1176
1177 _Must_inspect_result_
1178 _IRQL_requires_max_(APC_LEVEL)
1179 NTSTATUS
1180 FLTAPI
1181 FltDetachVolume(
1182 _Inout_ PFLT_FILTER Filter,
1183 _Inout_ PFLT_VOLUME Volume,
1184 _In_opt_ PCUNICODE_STRING InstanceName);
1185
1186 _Must_inspect_result_
1187 _IRQL_requires_max_(APC_LEVEL)
1188 NTSTATUS
1189 FLTAPI
1190 FltAllocateCallbackData(
1191 _In_ PFLT_INSTANCE Instance,
1192 _In_opt_ PFILE_OBJECT FileObject,
1193 _Outptr_ PFLT_CALLBACK_DATA *RetNewCallbackData);
1194
1195 _IRQL_requires_max_(DISPATCH_LEVEL)
1196 VOID
1197 FLTAPI
1198 FltFreeCallbackData(
1199 _In_ PFLT_CALLBACK_DATA CallbackData);
1200
1201 _IRQL_requires_max_(APC_LEVEL)
1202 VOID
1203 FLTAPI
1204 FltReuseCallbackData(
1205 _Inout_ PFLT_CALLBACK_DATA CallbackData);
1206
1207 _When_(FlagOn(CallbackData->Iopb->IrpFlags, IRP_PAGING_IO), _IRQL_requires_max_(APC_LEVEL))
1208 _When_(!FlagOn(CallbackData->Iopb->IrpFlags, IRP_PAGING_IO), _IRQL_requires_max_(PASSIVE_LEVEL))
1209 VOID
1210 FLTAPI
1211 FltPerformSynchronousIo(
1212 _Inout_ PFLT_CALLBACK_DATA CallbackData);
1213
1214 _Must_inspect_result_
1215 _When_( FlagOn(CallbackData->Iopb->IrpFlags, IRP_PAGING_IO), _IRQL_requires_max_(APC_LEVEL))
1216 _When_( !FlagOn(CallbackData->Iopb->IrpFlags, IRP_PAGING_IO), _IRQL_requires_max_(PASSIVE_LEVEL))
1217 NTSTATUS
1218 FLTAPI
1219 FltPerformAsynchronousIo(
1220 _Inout_ PFLT_CALLBACK_DATA CallbackData,
1221 _In_ PFLT_COMPLETED_ASYNC_IO_CALLBACK CallbackRoutine,
1222 _In_ PVOID CallbackContext);
1223
1224 _Must_inspect_result_
1225 _IRQL_requires_max_(PASSIVE_LEVEL)
1226 NTSTATUS
1227 FLTAPI
1228 FltCreateFile(
1229 _In_ PFLT_FILTER Filter,
1230 _In_opt_ PFLT_INSTANCE Instance,
1231 _Out_ PHANDLE FileHandle,
1232 _In_ ACCESS_MASK DesiredAccess,
1233 _In_ POBJECT_ATTRIBUTES ObjectAttributes,
1234 _Out_ PIO_STATUS_BLOCK IoStatusBlock,
1235 _In_opt_ PLARGE_INTEGER AllocationSize,
1236 _In_ ULONG FileAttributes,
1237 _In_ ULONG ShareAccess,
1238 _In_ ULONG CreateDisposition,
1239 _In_ ULONG CreateOptions,
1240 _In_reads_bytes_opt_(EaLength)PVOID EaBuffer,
1241 _In_ ULONG EaLength,
1242 _In_ ULONG Flags);
1243
1244 _Must_inspect_result_
1245 _IRQL_requires_max_(PASSIVE_LEVEL)
1246 _When_((Flags|FLTFL_IO_OPERATION_PAGING|FLTFL_IO_OPERATION_SYNCHRONOUS_PAGING),_IRQL_requires_max_(APC_LEVEL))
1247 NTSTATUS
1248 FLTAPI
1249 FltReadFile(
1250 _In_ PFLT_INSTANCE InitiatingInstance,
1251 _In_ PFILE_OBJECT FileObject,
1252 _In_opt_ PLARGE_INTEGER ByteOffset,
1253 _In_ ULONG Length,
1254 _Out_writes_bytes_to_(Length,*BytesRead) PVOID Buffer,
1255 _In_ FLT_IO_OPERATION_FLAGS Flags,
1256 _Out_opt_ PULONG BytesRead,
1257 _In_opt_ PFLT_COMPLETED_ASYNC_IO_CALLBACK CallbackRoutine,
1258 _In_opt_ PVOID CallbackContext);
1259
1260 _Must_inspect_result_
1261 _IRQL_requires_max_(PASSIVE_LEVEL)
1262 NTSTATUS
1263 FLTAPI
1264 FltTagFile(
1265 _In_ PFLT_INSTANCE InitiatingInstance,
1266 _In_ PFILE_OBJECT FileObject,
1267 _In_ ULONG FileTag,
1268 _In_opt_ GUID *Guid,
1269 _In_reads_bytes_(DataBufferLength) PVOID DataBuffer,
1270 _In_ USHORT DataBufferLength);
1271
1272 _Must_inspect_result_
1273 _IRQL_requires_max_(PASSIVE_LEVEL)
1274 NTSTATUS
1275 FLTAPI
1276 FltUntagFile(
1277 _In_ PFLT_INSTANCE InitiatingInstance,
1278 _In_ PFILE_OBJECT FileObject,
1279 _In_ ULONG FileTag,
1280 _In_opt_ GUID *Guid);
1281
1282 _Must_inspect_result_
1283 _IRQL_requires_max_(PASSIVE_LEVEL)
1284 _When_((Flags|FLTFL_IO_OPERATION_PAGING|FLTFL_IO_OPERATION_SYNCHRONOUS_PAGING),_IRQL_requires_max_(APC_LEVEL))
1285 NTSTATUS
1286 FLTAPI
1287 FltWriteFile(
1288 _In_ PFLT_INSTANCE InitiatingInstance,
1289 _In_ PFILE_OBJECT FileObject,
1290 _In_opt_ PLARGE_INTEGER ByteOffset,
1291 _In_ ULONG Length,
1292 _In_reads_bytes_(Length) PVOID Buffer,
1293 _In_ FLT_IO_OPERATION_FLAGS Flags,
1294 _Out_opt_ PULONG BytesWritten,
1295 _In_opt_ PFLT_COMPLETED_ASYNC_IO_CALLBACK CallbackRoutine,
1296 _In_opt_ PVOID CallbackContext);
1297
1298 _Must_inspect_result_
1299 _IRQL_requires_max_(PASSIVE_LEVEL)
1300 NTSTATUS
1301 FLTAPI
1302 FltQueryInformationFile(
1303 _In_ PFLT_INSTANCE Instance,
1304 _In_ PFILE_OBJECT FileObject,
1305 _Out_writes_bytes_to_(Length,*LengthReturned) PVOID FileInformation,
1306 _In_ ULONG Length,
1307 _In_ FILE_INFORMATION_CLASS FileInformationClass,
1308 _Out_opt_ PULONG LengthReturned);
1309
1310 _Must_inspect_result_
1311 _IRQL_requires_max_(PASSIVE_LEVEL)
1312 NTSTATUS
1313 FLTAPI
1314 FltSetInformationFile(
1315 _In_ PFLT_INSTANCE Instance,
1316 _In_ PFILE_OBJECT FileObject,
1317 _In_reads_bytes_(Length) PVOID FileInformation,
1318 _In_ ULONG Length,
1319 _In_ FILE_INFORMATION_CLASS FileInformationClass);
1320
1321 _Must_inspect_result_
1322 _IRQL_requires_max_(PASSIVE_LEVEL)
1323 NTSTATUS
1324 FLTAPI
1325 FltQueryVolumeInformationFile(
1326 _In_ PFLT_INSTANCE Instance,
1327 _In_ PFILE_OBJECT FileObject,
1328 _Out_writes_bytes_to_(Length,*LengthReturned) PVOID FsInformation,
1329 _In_ ULONG Length,
1330 _In_ FS_INFORMATION_CLASS FsInformationClass,
1331 _Out_opt_ PULONG LengthReturned);
1332
1333 _Must_inspect_result_
1334 _IRQL_requires_max_(PASSIVE_LEVEL)
1335 NTSTATUS
1336 FLTAPI
1337 FltQuerySecurityObject(
1338 _In_ PFLT_INSTANCE Instance,
1339 _In_ PFILE_OBJECT FileObject,
1340 _In_ SECURITY_INFORMATION SecurityInformation,
1341 _Inout_updates_bytes_opt_(Length) PSECURITY_DESCRIPTOR SecurityDescriptor,
1342 _In_ ULONG Length,
1343 _Out_opt_ PULONG LengthNeeded);
1344
1345 _Must_inspect_result_
1346 _IRQL_requires_max_(PASSIVE_LEVEL)
1347 NTSTATUS
1348 FLTAPI
1349 FltSetSecurityObject(
1350 _In_ PFLT_INSTANCE Instance,
1351 _In_ PFILE_OBJECT FileObject,
1352 _In_ SECURITY_INFORMATION SecurityInformation,
1353 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor);
1354
1355 _Must_inspect_result_
1356 _IRQL_requires_max_(PASSIVE_LEVEL)
1357 NTSTATUS
1358 FLTAPI
1359 FltFlushBuffers(
1360 _In_ PFLT_INSTANCE Instance,
1361 _In_ PFILE_OBJECT FileObject);
1362
1363 _Must_inspect_result_
1364 _IRQL_requires_max_(PASSIVE_LEVEL)
1365 NTSTATUS
1366 FLTAPI
1367 FltFsControlFile(
1368 _In_ PFLT_INSTANCE Instance,
1369 _In_ PFILE_OBJECT FileObject,
1370 _In_ ULONG FsControlCode,
1371 _In_reads_bytes_opt_(InputBufferLength) PVOID InputBuffer,
1372 _In_ ULONG InputBufferLength,
1373 _Out_writes_bytes_to_opt_(OutputBufferLength,*LengthReturned) PVOID OutputBuffer,
1374 _In_ ULONG OutputBufferLength,
1375 _Out_opt_ PULONG LengthReturned);
1376
1377 _Must_inspect_result_
1378 _IRQL_requires_max_(PASSIVE_LEVEL)
1379 NTSTATUS
1380 FLTAPI
1381 FltDeviceIoControlFile(
1382 _In_ PFLT_INSTANCE Instance,
1383 _In_ PFILE_OBJECT FileObject,
1384 _In_ ULONG IoControlCode,
1385 _In_reads_bytes_opt_(InputBufferLength) PVOID InputBuffer,
1386 _In_ ULONG InputBufferLength,
1387 _Out_writes_bytes_to_opt_(OutputBufferLength,*LengthReturned) PVOID OutputBuffer,
1388 _In_ ULONG OutputBufferLength,
1389 _Out_opt_ PULONG LengthReturned);
1390
1391 _Must_inspect_result_
1392 _When_(FlagOn(CallbackData->Iopb->IrpFlags, IRP_PAGING_IO), _IRQL_requires_max_(APC_LEVEL))
1393 _When_(!FlagOn(CallbackData->Iopb->IrpFlags, IRP_PAGING_IO), _IRQL_requires_max_(PASSIVE_LEVEL))
1394 VOID
1395 FLTAPI
1396 FltReissueSynchronousIo(
1397 _In_ PFLT_INSTANCE InitiatingInstance,
1398 _In_ PFLT_CALLBACK_DATA CallbackData);
1399
1400 _IRQL_requires_max_(PASSIVE_LEVEL)
1401 NTSTATUS
1402 FLTAPI
1403 FltClose(
1404 _In_ HANDLE FileHandle);
1405
1406 _IRQL_requires_max_(PASSIVE_LEVEL)
1407 VOID
1408 FLTAPI
1409 FltCancelFileOpen(
1410 _In_ PFLT_INSTANCE Instance,
1411 _In_ PFILE_OBJECT FileObject);
1412
1413 _Must_inspect_result_
1414 _IRQL_requires_max_(PASSIVE_LEVEL)
1415 NTSTATUS
1416 FLTAPI
1417 FltCreateSystemVolumeInformationFolder(
1418 _In_ PFLT_INSTANCE Instance);
1419
1420 _IRQL_requires_max_(APC_LEVEL)
1421 BOOLEAN
1422 FLTAPI
1423 FltSupportsFileContexts(
1424 _In_ PFILE_OBJECT FileObject);
1425
1426 _IRQL_requires_max_(APC_LEVEL)
1427 BOOLEAN
1428 FLTAPI
1429 FltSupportsStreamContexts(
1430 _In_ PFILE_OBJECT FileObject);
1431
1432 _IRQL_requires_max_(APC_LEVEL)
1433 BOOLEAN
1434 FLTAPI
1435 FltSupportsStreamHandleContexts(
1436 _In_ PFILE_OBJECT FileObject);
1437
1438 _Must_inspect_result_
1439 _IRQL_requires_max_(APC_LEVEL)
1440 NTSTATUS
1441 FLTAPI
1442 FltAllocateContext(
1443 _In_ PFLT_FILTER Filter,
1444 _In_ FLT_CONTEXT_TYPE ContextType,
1445 _In_ SIZE_T ContextSize,
1446 _In_ POOL_TYPE PoolType,
1447 _Outptr_result_bytebuffer_(ContextSize) PFLT_CONTEXT *ReturnedContext);
1448
1449 _IRQL_requires_max_(APC_LEVEL)
1450 VOID
1451 FLTAPI
1452 FltGetContexts(
1453 _In_ PCFLT_RELATED_OBJECTS FltObjects,
1454 _In_ FLT_CONTEXT_TYPE DesiredContexts,
1455 _Out_ PFLT_RELATED_CONTEXTS Contexts);
1456
1457 _IRQL_requires_max_(APC_LEVEL)
1458 VOID
1459 FLTAPI
1460 FltReleaseContexts(
1461 _In_ PFLT_RELATED_CONTEXTS Contexts);
1462
1463 _IRQL_requires_max_(APC_LEVEL)
1464 NTSTATUS
1465 FLTAPI
1466 FltSetVolumeContext(
1467 _In_ PFLT_VOLUME Volume,
1468 _In_ FLT_SET_CONTEXT_OPERATION Operation,
1469 _In_ PFLT_CONTEXT NewContext,
1470 _Outptr_opt_result_maybenull_ PFLT_CONTEXT *OldContext);
1471
1472 _IRQL_requires_max_(APC_LEVEL)
1473 NTSTATUS
1474 FLTAPI
1475 FltSetInstanceContext(
1476 _In_ PFLT_INSTANCE Instance,
1477 _In_ FLT_SET_CONTEXT_OPERATION Operation,
1478 _In_ PFLT_CONTEXT NewContext,
1479 _Outptr_opt_result_maybenull_ PFLT_CONTEXT *OldContext);
1480
1481 _IRQL_requires_max_(APC_LEVEL)
1482 NTSTATUS
1483 FLTAPI
1484 FltSetFileContext(
1485 _In_ PFLT_INSTANCE Instance,
1486 _In_ PFILE_OBJECT FileObject,
1487 _In_ FLT_SET_CONTEXT_OPERATION Operation,
1488 _In_ PFLT_CONTEXT NewContext,
1489 _Outptr_opt_result_maybenull_ PFLT_CONTEXT *OldContext);
1490
1491 _IRQL_requires_max_(APC_LEVEL)
1492 NTSTATUS
1493 FLTAPI
1494 FltSetStreamContext(
1495 _In_ PFLT_INSTANCE Instance,
1496 _In_ PFILE_OBJECT FileObject,
1497 _In_ FLT_SET_CONTEXT_OPERATION Operation,
1498 _In_ PFLT_CONTEXT NewContext,
1499 _Outptr_opt_result_maybenull_ PFLT_CONTEXT *OldContext);
1500
1501 _IRQL_requires_max_(APC_LEVEL)
1502 NTSTATUS
1503 FLTAPI
1504 FltSetStreamHandleContext(
1505 _In_ PFLT_INSTANCE Instance,
1506 _In_ PFILE_OBJECT FileObject,
1507 _In_ FLT_SET_CONTEXT_OPERATION Operation,
1508 _In_ PFLT_CONTEXT NewContext,
1509 _Outptr_opt_result_maybenull_ PFLT_CONTEXT *OldContext);
1510
1511 _IRQL_requires_max_(APC_LEVEL)
1512 VOID
1513 FLTAPI
1514 FltDeleteContext(
1515 _In_ PFLT_CONTEXT Context);
1516
1517 _IRQL_requires_max_(APC_LEVEL)
1518 NTSTATUS
1519 FLTAPI
1520 FltDeleteVolumeContext(
1521 _In_ PFLT_FILTER Filter,
1522 _In_ PFLT_VOLUME Volume,
1523 _Outptr_opt_result_maybenull_ PFLT_CONTEXT *OldContext);
1524
1525 _IRQL_requires_max_(APC_LEVEL)
1526 NTSTATUS
1527 FLTAPI
1528 FltDeleteInstanceContext(
1529 _In_ PFLT_INSTANCE Instance,
1530 _Outptr_opt_result_maybenull_ PFLT_CONTEXT *OldContext);
1531
1532 _IRQL_requires_max_(APC_LEVEL)
1533 NTSTATUS
1534 FLTAPI
1535 FltDeleteFileContext(
1536 _In_ PFLT_INSTANCE Instance,
1537 _In_ PFILE_OBJECT FileObject,
1538 _Outptr_opt_result_maybenull_ PFLT_CONTEXT *OldContext);
1539
1540 _IRQL_requires_max_(APC_LEVEL)
1541 NTSTATUS
1542 FLTAPI
1543 FltDeleteStreamContext(
1544 _In_ PFLT_INSTANCE Instance,
1545 _In_ PFILE_OBJECT FileObject,
1546 _Outptr_opt_result_maybenull_ PFLT_CONTEXT *OldContext);
1547
1548 _IRQL_requires_max_(APC_LEVEL)
1549 NTSTATUS
1550 FLTAPI
1551 FltDeleteStreamHandleContext(
1552 _In_ PFLT_INSTANCE Instance,
1553 _In_ PFILE_OBJECT FileObject,
1554 _Outptr_opt_result_maybenull_ PFLT_CONTEXT *OldContext);
1555
1556 _IRQL_requires_max_(APC_LEVEL)
1557 NTSTATUS
1558 FLTAPI
1559 FltGetVolumeContext(
1560 _In_ PFLT_FILTER Filter,
1561 _In_ PFLT_VOLUME Volume,
1562 _Outptr_ PFLT_CONTEXT *Context);
1563
1564 _IRQL_requires_max_(APC_LEVEL)
1565 NTSTATUS
1566 FLTAPI
1567 FltGetInstanceContext(
1568 _In_ PFLT_INSTANCE Instance,
1569 _Outptr_ PFLT_CONTEXT *Context);
1570
1571 _IRQL_requires_max_(APC_LEVEL)
1572 NTSTATUS
1573 FLTAPI
1574 FltGetFileContext(
1575 _In_ PFLT_INSTANCE Instance,
1576 _In_ PFILE_OBJECT FileObject,
1577 _Outptr_ PFLT_CONTEXT *Context);
1578
1579 _IRQL_requires_max_(APC_LEVEL)
1580 NTSTATUS
1581 FLTAPI
1582 FltGetStreamContext(
1583 _In_ PFLT_INSTANCE Instance,
1584 _In_ PFILE_OBJECT FileObject,
1585 _Outptr_ PFLT_CONTEXT *Context);
1586
1587 _IRQL_requires_max_(APC_LEVEL)
1588 NTSTATUS
1589 FLTAPI
1590 FltGetStreamHandleContext(
1591 _In_ PFLT_INSTANCE Instance,
1592 _In_ PFILE_OBJECT FileObject,
1593 _Outptr_ PFLT_CONTEXT *Context);
1594
1595 _IRQL_requires_max_(DISPATCH_LEVEL)
1596 VOID
1597 FLTAPI
1598 FltReferenceContext(
1599 _In_ PFLT_CONTEXT Context);
1600
1601 _IRQL_requires_max_(DISPATCH_LEVEL)
1602 VOID
1603 FLTAPI
1604 FltReleaseContext(
1605 _In_ PFLT_CONTEXT Context);
1606
1607 _IRQL_requires_max_(APC_LEVEL)
1608 NTSTATUS
1609 FLTAPI
1610 FltGetFilterFromName(
1611 _In_ PCUNICODE_STRING FilterName,
1612 _Outptr_ PFLT_FILTER *RetFilter);
1613
1614 _IRQL_requires_max_(PASSIVE_LEVEL)
1615 NTSTATUS
1616 FLTAPI
1617 FltGetVolumeFromName(
1618 _In_ PFLT_FILTER Filter,
1619 _In_ PCUNICODE_STRING VolumeName,
1620 _Outptr_ PFLT_VOLUME *RetVolume);
1621
1622 _IRQL_requires_max_(APC_LEVEL)
1623 NTSTATUS
1624 FLTAPI
1625 FltGetVolumeInstanceFromName(
1626 _In_opt_ PFLT_FILTER Filter,
1627 _In_ PFLT_VOLUME Volume,
1628 _In_opt_ PCUNICODE_STRING InstanceName,
1629 _Outptr_ PFLT_INSTANCE *RetInstance);
1630
1631 _IRQL_requires_max_(APC_LEVEL)
1632 NTSTATUS
1633 FLTAPI
1634 FltGetVolumeFromInstance(
1635 _In_ PFLT_INSTANCE Instance,
1636 _Outptr_ PFLT_VOLUME *RetVolume);
1637
1638 _IRQL_requires_max_(APC_LEVEL)
1639 NTSTATUS
1640 FLTAPI
1641 FltGetFilterFromInstance(
1642 _In_ PFLT_INSTANCE Instance,
1643 _Outptr_ PFLT_FILTER *RetFilter);
1644
1645 _IRQL_requires_max_(APC_LEVEL)
1646 NTSTATUS
1647 FLTAPI
1648 FltGetVolumeFromFileObject(
1649 _In_ PFLT_FILTER Filter,
1650 _In_ PFILE_OBJECT FileObject,
1651 _Outptr_ PFLT_VOLUME *RetVolume);
1652
1653 _IRQL_requires_max_(APC_LEVEL)
1654 NTSTATUS
1655 FLTAPI
1656 FltGetVolumeFromDeviceObject(
1657 _In_ PFLT_FILTER Filter,
1658 _In_ PDEVICE_OBJECT DeviceObject,
1659 _Outptr_ PFLT_VOLUME *RetVolume);
1660
1661 _IRQL_requires_max_(DISPATCH_LEVEL)
1662 NTSTATUS
1663 FLTAPI
1664 FltGetDeviceObject(
1665 _In_ PFLT_VOLUME Volume,
1666 _Outptr_ PDEVICE_OBJECT *DeviceObject);
1667
1668 _IRQL_requires_max_(DISPATCH_LEVEL)
1669 NTSTATUS
1670 FLTAPI
1671 FltGetDiskDeviceObject(
1672 _In_ PFLT_VOLUME Volume,
1673 _Outptr_ PDEVICE_OBJECT *DiskDeviceObject);
1674
1675 _IRQL_requires_max_(APC_LEVEL)
1676 NTSTATUS
1677 FLTAPI
1678 FltGetLowerInstance(
1679 _In_ PFLT_INSTANCE CurrentInstance,
1680 _Outptr_ PFLT_INSTANCE *LowerInstance);
1681
1682 _IRQL_requires_max_(APC_LEVEL)
1683 NTSTATUS
1684 FLTAPI
1685 FltGetUpperInstance(
1686 _In_ PFLT_INSTANCE CurrentInstance,
1687 _Outptr_ PFLT_INSTANCE *UpperInstance);
1688
1689 _IRQL_requires_max_(APC_LEVEL)
1690 NTSTATUS
1691 FLTAPI
1692 FltGetTopInstance(
1693 _In_ PFLT_VOLUME Volume,
1694 _Outptr_ PFLT_INSTANCE *Instance);
1695
1696 _IRQL_requires_max_(APC_LEVEL)
1697 NTSTATUS
1698 FLTAPI
1699 FltGetBottomInstance(
1700 _In_ PFLT_VOLUME Volume,
1701 _Outptr_ PFLT_INSTANCE *Instance);
1702
1703 LONG
1704 FLTAPI
1705 FltCompareInstanceAltitudes(
1706 _In_ PFLT_INSTANCE Instance1,
1707 _In_ PFLT_INSTANCE Instance2);
1708
1709 _IRQL_requires_max_(APC_LEVEL)
1710 NTSTATUS
1711 FLTAPI
1712 FltGetFilterInformation(
1713 _In_ PFLT_FILTER Filter,
1714 _In_ FILTER_INFORMATION_CLASS InformationClass,
1715 _Out_writes_bytes_to_opt_(BufferSize, *BytesReturned) PVOID Buffer,
1716 _In_ ULONG BufferSize,
1717 _Out_ PULONG BytesReturned);
1718
1719 _IRQL_requires_max_(APC_LEVEL)
1720 NTSTATUS
1721 FLTAPI
1722 FltGetInstanceInformation(
1723 _In_ PFLT_INSTANCE Instance,
1724 _In_ INSTANCE_INFORMATION_CLASS InformationClass,
1725 _Out_writes_bytes_to_opt_(BufferSize,*BytesReturned) PVOID Buffer,
1726 _In_ ULONG BufferSize,
1727 _Out_ PULONG BytesReturned);
1728
1729 _IRQL_requires_max_(APC_LEVEL)
1730 NTSTATUS
1731 FLTAPI
1732 FltGetVolumeProperties(
1733 _In_ PFLT_VOLUME Volume,
1734 _Out_writes_bytes_to_opt_(VolumePropertiesLength,*LengthReturned) PFLT_VOLUME_PROPERTIES VolumeProperties,
1735 _In_ ULONG VolumePropertiesLength,
1736 _Out_ PULONG LengthReturned);
1737
1738 _Must_inspect_result_
1739 _IRQL_requires_max_(PASSIVE_LEVEL)
1740 NTSTATUS
1741 FLTAPI
1742 FltIsVolumeWritable(
1743 _In_ PVOID FltObject,
1744 _Out_ PBOOLEAN IsWritable);
1745
1746 _Must_inspect_result_
1747 _IRQL_requires_max_(PASSIVE_LEVEL)
1748 NTSTATUS
1749 FLTAPI
1750 FltGetVolumeGuidName(
1751 _In_ PFLT_VOLUME Volume,
1752 _Out_ PUNICODE_STRING VolumeGuidName,
1753 _Out_opt_ PULONG BufferSizeNeeded);
1754
1755 _Must_inspect_result_
1756 _IRQL_requires_max_(PASSIVE_LEVEL)
1757 NTSTATUS
1758 FLTAPI
1759 FltQueryVolumeInformation(
1760 _In_ PFLT_INSTANCE Instance,
1761 _Out_ PIO_STATUS_BLOCK Iosb,
1762 _Out_writes_bytes_(Length) PVOID FsInformation,
1763 _In_ ULONG Length,
1764 _In_ FS_INFORMATION_CLASS FsInformationClass);
1765
1766 _Must_inspect_result_
1767 _IRQL_requires_max_(PASSIVE_LEVEL)
1768 NTSTATUS
1769 FLTAPI
1770 FltSetVolumeInformation(
1771 _In_ PFLT_INSTANCE Instance,
1772 _Out_ PIO_STATUS_BLOCK Iosb,
1773 _Out_writes_bytes_(Length) PVOID FsInformation,
1774 _In_ ULONG Length,
1775 _In_ FS_INFORMATION_CLASS FsInformationClass);
1776
1777 _Must_inspect_result_
1778 _IRQL_requires_max_(APC_LEVEL)
1779 NTSTATUS
1780 FLTAPI
1781 FltEnumerateFilters(
1782 _Out_writes_to_opt_(FilterListSize,*NumberFiltersReturned) PFLT_FILTER *FilterList,
1783 _In_ ULONG FilterListSize,
1784 _Out_ PULONG NumberFiltersReturned);
1785
1786 _Must_inspect_result_
1787 _IRQL_requires_max_(APC_LEVEL)
1788 NTSTATUS
1789 FLTAPI
1790 FltEnumerateVolumes(
1791 _In_ PFLT_FILTER Filter,
1792 _Out_writes_to_opt_(VolumeListSize,*NumberVolumesReturned) PFLT_VOLUME *VolumeList,
1793 _In_ ULONG VolumeListSize,
1794 _Out_ PULONG NumberVolumesReturned);
1795
1796 _Must_inspect_result_
1797 _IRQL_requires_max_(APC_LEVEL)
1798 NTSTATUS
1799 FLTAPI
1800 FltEnumerateInstances(
1801 _In_opt_ PFLT_VOLUME Volume,
1802 _In_opt_ PFLT_FILTER Filter,
1803 _Out_writes_to_opt_(InstanceListSize,*NumberInstancesReturned) PFLT_INSTANCE *InstanceList,
1804 _In_ ULONG InstanceListSize,
1805 _Out_ PULONG NumberInstancesReturned);
1806
1807 _Must_inspect_result_
1808 _IRQL_requires_max_(APC_LEVEL)
1809 NTSTATUS
1810 FLTAPI
1811 FltEnumerateFilterInformation(
1812 _In_ ULONG Index,
1813 _In_ FILTER_INFORMATION_CLASS InformationClass,
1814 _Out_writes_bytes_to_opt_(BufferSize,*BytesReturned) PVOID Buffer,
1815 _In_ ULONG BufferSize,
1816 _Out_ PULONG BytesReturned);
1817
1818 _Must_inspect_result_
1819 _IRQL_requires_max_(APC_LEVEL)
1820 NTSTATUS
1821 FLTAPI
1822 FltEnumerateInstanceInformationByFilter(
1823 _In_ PFLT_FILTER Filter,
1824 _In_ ULONG Index,
1825 _In_ INSTANCE_INFORMATION_CLASS InformationClass,
1826 _Out_writes_bytes_to_opt_(BufferSize,*BytesReturned) PVOID Buffer,
1827 _In_ ULONG BufferSize,
1828 _Out_ PULONG BytesReturned);
1829
1830 _Must_inspect_result_
1831 _IRQL_requires_max_(APC_LEVEL)
1832 NTSTATUS
1833 FLTAPI
1834 FltEnumerateInstanceInformationByVolume(
1835 _In_ PFLT_VOLUME Volume,
1836 _In_ ULONG Index,
1837 _In_ INSTANCE_INFORMATION_CLASS InformationClass,
1838 _Out_writes_bytes_to_opt_(BufferSize,*BytesReturned) PVOID Buffer,
1839 _In_ ULONG BufferSize,
1840 _Out_ PULONG BytesReturned);
1841
1842 _Must_inspect_result_
1843 _IRQL_requires_max_(APC_LEVEL)
1844 NTSTATUS
1845 FLTAPI
1846 FltEnumerateVolumeInformation(
1847 _In_ PFLT_FILTER Filter,
1848 _In_ ULONG Index,
1849 _In_ FILTER_VOLUME_INFORMATION_CLASS InformationClass,
1850 _Out_writes_bytes_to_opt_(BufferSize,*BytesReturned) PVOID Buffer,
1851 _In_ ULONG BufferSize,
1852 _Out_ PULONG BytesReturned);
1853
1854 _Must_inspect_result_
1855 _IRQL_requires_max_(DISPATCH_LEVEL)
1856 NTSTATUS
1857 FLTAPI
1858 FltObjectReference(
1859 _Inout_ PVOID FltObject);
1860
1861 _IRQL_requires_max_(DISPATCH_LEVEL)
1862 VOID
1863 FLTAPI
1864 FltObjectDereference(
1865 _Inout_ PVOID FltObject);
1866
1867 _Must_inspect_result_
1868 _IRQL_requires_max_(PASSIVE_LEVEL)
1869 NTSTATUS
1870 FLTAPI
1871 FltCreateCommunicationPort(
1872 _In_ PFLT_FILTER Filter,
1873 _Outptr_ PFLT_PORT *ServerPort,
1874 _In_ POBJECT_ATTRIBUTES ObjectAttributes,
1875 _In_opt_ PVOID ServerPortCookie,
1876 _In_ PFLT_CONNECT_NOTIFY ConnectNotifyCallback,
1877 _In_ PFLT_DISCONNECT_NOTIFY DisconnectNotifyCallback,
1878 _In_opt_ PFLT_MESSAGE_NOTIFY MessageNotifyCallback,
1879 _In_ LONG MaxConnections);
1880
1881 _IRQL_requires_max_(PASSIVE_LEVEL)
1882 VOID
1883 FLTAPI
1884 FltCloseCommunicationPort(
1885 _In_ PFLT_PORT ServerPort);
1886
1887 _IRQL_requires_max_(PASSIVE_LEVEL)
1888 VOID
1889 FLTAPI
1890 FltCloseClientPort(
1891 _In_ PFLT_FILTER Filter,
1892 _Outptr_ PFLT_PORT *ClientPort);
1893
1894 _Must_inspect_result_
1895 _IRQL_requires_max_(APC_LEVEL)
1896 NTSTATUS
1897 FLTAPI
1898 FltSendMessage(
1899 _In_ PFLT_FILTER Filter,
1900 _In_ PFLT_PORT *ClientPort,
1901 _In_reads_bytes_(SenderBufferLength) PVOID SenderBuffer,
1902 _In_ ULONG SenderBufferLength,
1903 _Out_writes_bytes_opt_(*ReplyLength) PVOID ReplyBuffer,
1904 _Inout_opt_ PULONG ReplyLength,
1905 _In_opt_ PLARGE_INTEGER Timeout);
1906
1907 _Must_inspect_result_
1908 _IRQL_requires_max_(APC_LEVEL)
1909 NTSTATUS
1910 FLTAPI
1911 FltBuildDefaultSecurityDescriptor(
1912 _Outptr_ PSECURITY_DESCRIPTOR *SecurityDescriptor,
1913 _In_ ACCESS_MASK DesiredAccess);
1914
1915 _IRQL_requires_max_(APC_LEVEL)
1916 VOID
1917 FLTAPI
1918 FltFreeSecurityDescriptor(
1919 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor);
1920
1921 _Must_inspect_result_
1922 _IRQL_requires_max_(DISPATCH_LEVEL)
1923 BOOLEAN
1924 FLTAPI
1925 FltCancelIo(
1926 _In_ PFLT_CALLBACK_DATA CallbackData);
1927
1928 _IRQL_requires_max_(DISPATCH_LEVEL)
1929 NTSTATUS
1930 FLTAPI
1931 FltSetCancelCompletion(
1932 _In_ PFLT_CALLBACK_DATA CallbackData,
1933 _In_ PFLT_COMPLETE_CANCELED_CALLBACK CanceledCallback);
1934
1935 _Must_inspect_result_
1936 _IRQL_requires_max_(DISPATCH_LEVEL)
1937 NTSTATUS
1938 FLTAPI
1939 FltClearCancelCompletion(
1940 _In_ PFLT_CALLBACK_DATA CallbackData);
1941
1942 BOOLEAN
1943 FLTAPI
1944 FltIsIoCanceled(
1945 _In_ PFLT_CALLBACK_DATA CallbackData);
1946
1947 _Must_inspect_result_
1948 _IRQL_requires_max_(DISPATCH_LEVEL)
1949 PFLT_DEFERRED_IO_WORKITEM
1950 FLTAPI
1951 FltAllocateDeferredIoWorkItem(VOID);
1952
1953 _IRQL_requires_max_(DISPATCH_LEVEL)
1954 VOID
1955 FLTAPI
1956 FltFreeDeferredIoWorkItem(
1957 _In_ PFLT_DEFERRED_IO_WORKITEM FltWorkItem);
1958
1959 _Must_inspect_result_
1960 _IRQL_requires_max_(DISPATCH_LEVEL)
1961 PFLT_GENERIC_WORKITEM
1962 FLTAPI
1963 FltAllocateGenericWorkItem(VOID);
1964
1965 _IRQL_requires_max_(DISPATCH_LEVEL)
1966 VOID
1967 FLTAPI
1968 FltFreeGenericWorkItem(
1969 _In_ PFLT_GENERIC_WORKITEM FltWorkItem);
1970
1971 _Must_inspect_result_
1972 _IRQL_requires_max_(DISPATCH_LEVEL)
1973 NTSTATUS
1974 FLTAPI
1975 FltQueueDeferredIoWorkItem(
1976 _In_ PFLT_DEFERRED_IO_WORKITEM FltWorkItem,
1977 _In_ PFLT_CALLBACK_DATA Data,
1978 _In_ PFLT_DEFERRED_IO_WORKITEM_ROUTINE WorkerRoutine,
1979 _In_ WORK_QUEUE_TYPE QueueType,
1980 _In_ PVOID Context);
1981
1982 _Must_inspect_result_
1983 _IRQL_requires_max_(DISPATCH_LEVEL)
1984 NTSTATUS
1985 FLTAPI
1986 FltQueueGenericWorkItem(
1987 _In_ PFLT_GENERIC_WORKITEM FltWorkItem,
1988 _In_ PVOID FltObject,
1989 _In_ PFLT_GENERIC_WORKITEM_ROUTINE WorkerRoutine,
1990 _In_ WORK_QUEUE_TYPE QueueType,
1991 _In_opt_ PVOID Context);
1992
1993 _Must_inspect_result_
1994 _IRQL_requires_max_(APC_LEVEL)
1995 NTSTATUS
1996 FLTAPI
1997 FltLockUserBuffer(
1998 _In_ PFLT_CALLBACK_DATA CallbackData);
1999
2000 NTSTATUS
2001 FLTAPI
2002 FltDecodeParameters(
2003 _In_ PFLT_CALLBACK_DATA CallbackData,
2004 _Outptr_opt_ PMDL **MdlAddressPointer,
2005 _Outptr_opt_result_bytebuffer_(**Length) PVOID **Buffer,
2006 _Outptr_opt_ PULONG *Length,
2007 _Out_opt_ LOCK_OPERATION *DesiredAccess);
2008
2009 PMDL
2010 FASTCALL
2011 FltGetSwappedBufferMdlAddress(
2012 _In_ PFLT_CALLBACK_DATA CallbackData);
2013
2014 VOID
2015 FASTCALL
2016 FltRetainSwappedBufferMdlAddress(
2017 _In_ PFLT_CALLBACK_DATA CallbackData);
2018
2019 NTSTATUS
2020 FLTAPI
2021 FltCbdqInitialize(
2022 _In_ PFLT_INSTANCE Instance,
2023 _Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq,
2024 _In_ PFLT_CALLBACK_DATA_QUEUE_INSERT_IO CbdqInsertIo,
2025 _In_ PFLT_CALLBACK_DATA_QUEUE_REMOVE_IO CbdqRemoveIo,
2026 _In_ PFLT_CALLBACK_DATA_QUEUE_PEEK_NEXT_IO CbdqPeekNextIo,
2027 _In_ PFLT_CALLBACK_DATA_QUEUE_ACQUIRE CbdqAcquire,
2028 _In_ PFLT_CALLBACK_DATA_QUEUE_RELEASE CbdqRelease,
2029 _In_ PFLT_CALLBACK_DATA_QUEUE_COMPLETE_CANCELED_IO CbdqCompleteCanceledIo);
2030
2031 VOID
2032 FLTAPI
2033 FltCbdqEnable(
2034 _Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq);
2035
2036 VOID
2037 FLTAPI
2038 FltCbdqDisable(
2039 _Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq);
2040
2041 _Must_inspect_result_
2042 NTSTATUS
2043 FLTAPI
2044 FltCbdqInsertIo(
2045 _Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq,
2046 _In_ PFLT_CALLBACK_DATA Cbd,
2047 _In_opt_ PFLT_CALLBACK_DATA_QUEUE_IO_CONTEXT Context,
2048 _In_opt_ PVOID InsertContext);
2049
2050 _Must_inspect_result_
2051 PFLT_CALLBACK_DATA
2052 FLTAPI
2053 FltCbdqRemoveIo(
2054 _Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq,
2055 _In_ PFLT_CALLBACK_DATA_QUEUE_IO_CONTEXT Context);
2056
2057 _Must_inspect_result_
2058 PFLT_CALLBACK_DATA
2059 FLTAPI
2060 FltCbdqRemoveNextIo(
2061 _Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq,
2062 _In_opt_ PVOID PeekContext);
2063
2064 _IRQL_requires_max_(APC_LEVEL)
2065 VOID
2066 FLTAPI
2067 FltInitializeOplock(
2068 _Out_ POPLOCK Oplock);
2069
2070 _IRQL_requires_max_(APC_LEVEL)
2071 VOID
2072 FLTAPI
2073 FltUninitializeOplock(
2074 _In_ POPLOCK Oplock);
2075
2076 _Must_inspect_result_
2077 _IRQL_requires_max_(APC_LEVEL)
2078 FLT_PREOP_CALLBACK_STATUS
2079 FLTAPI
2080 FltOplockFsctrl(
2081 _In_ POPLOCK Oplock,
2082 _In_ PFLT_CALLBACK_DATA CallbackData,
2083 _In_ ULONG OpenCount);
2084
2085 _Must_inspect_result_
2086 _IRQL_requires_max_(APC_LEVEL)
2087 FLT_PREOP_CALLBACK_STATUS
2088 FLTAPI
2089 FltCheckOplock(
2090 _In_ POPLOCK Oplock,
2091 _In_ PFLT_CALLBACK_DATA CallbackData,
2092 _In_opt_ PVOID Context,
2093 _In_opt_ PFLTOPLOCK_WAIT_COMPLETE_ROUTINE WaitCompletionRoutine,
2094 _In_opt_ PFLTOPLOCK_PREPOST_CALLBACKDATA_ROUTINE PrePostCallbackDataRoutine);
2095
2096 _IRQL_requires_max_(APC_LEVEL)
2097 BOOLEAN
2098 FLTAPI
2099 FltOplockIsFastIoPossible(
2100 _In_ POPLOCK Oplock);
2101
2102 _IRQL_requires_max_(APC_LEVEL)
2103 BOOLEAN
2104 FLTAPI
2105 FltCurrentBatchOplock(
2106 _In_ POPLOCK Oplock);
2107
2108 VOID
2109 FLTAPI
2110 FltInitializeFileLock(
2111 _Out_ PFILE_LOCK FileLock);
2112
2113 VOID
2114 FLTAPI
2115 FltUninitializeFileLock(
2116 _In_ PFILE_LOCK FileLock);
2117
2118 _Must_inspect_result_
2119 _IRQL_requires_max_(APC_LEVEL)
2120 PFILE_LOCK
2121 FLTAPI
2122 FltAllocateFileLock(
2123 _In_opt_ PFLT_COMPLETE_LOCK_CALLBACK_DATA_ROUTINE CompleteLockCallbackDataRoutine,
2124 _In_opt_ PUNLOCK_ROUTINE UnlockRoutine);
2125
2126 _IRQL_requires_max_(APC_LEVEL)
2127 VOID
2128 FLTAPI
2129 FltFreeFileLock(
2130 _In_ PFILE_LOCK FileLock);
2131
2132 _Must_inspect_result_
2133 _IRQL_requires_max_(APC_LEVEL)
2134 FLT_PREOP_CALLBACK_STATUS
2135 FLTAPI
2136 FltProcessFileLock(
2137 _In_ PFILE_LOCK FileLock,
2138 _In_ PFLT_CALLBACK_DATA CallbackData,
2139 _In_opt_ PVOID Context);
2140
2141 _Must_inspect_result_
2142 _IRQL_requires_max_(APC_LEVEL)
2143 BOOLEAN
2144 FLTAPI
2145 FltCheckLockForReadAccess(
2146 _In_ PFILE_LOCK FileLock,
2147 _In_ PFLT_CALLBACK_DATA CallbackData);
2148
2149 _Must_inspect_result_
2150 _IRQL_requires_max_(APC_LEVEL)
2151 BOOLEAN
2152 FLTAPI
2153 FltCheckLockForWriteAccess(
2154 _In_ PFILE_LOCK FileLock,
2155 _In_ PFLT_CALLBACK_DATA CallbackData);
2156
2157 _Acquires_lock_(_Global_critical_region_)
2158 _IRQL_requires_max_(APC_LEVEL)
2159 VOID
2160 FLTAPI
2161 FltAcquireResourceExclusive(
2162 _Inout_ _Requires_lock_not_held_(*_Curr_) _Acquires_lock_(*_Curr_) PERESOURCE Resource);
2163
2164 _Acquires_lock_(_Global_critical_region_)
2165 _IRQL_requires_max_(APC_LEVEL)
2166 VOID
2167 FLTAPI
2168 FltAcquireResourceShared(
2169 _Inout_ _Requires_lock_not_held_(*_Curr_) _Acquires_lock_(*_Curr_) PERESOURCE Resource);
2170
2171 _Releases_lock_(_Global_critical_region_)
2172 _IRQL_requires_max_(DISPATCH_LEVEL)
2173 VOID
2174 FLTAPI
2175 FltReleaseResource(
2176 _Inout_ _Requires_lock_held_(*_Curr_) _Releases_lock_(*_Curr_) PERESOURCE Resource);
2177
2178 _IRQL_requires_max_(APC_LEVEL)
2179 VOID
2180 FLTAPI
2181 FltInitializePushLock(
2182 _Out_ PEX_PUSH_LOCK PushLock);
2183
2184 _IRQL_requires_max_(APC_LEVEL)
2185 VOID
2186 FLTAPI
2187 FltDeletePushLock(
2188 _In_ PEX_PUSH_LOCK PushLock);
2189
2190 _Acquires_lock_(_Global_critical_region_)
2191 _IRQL_requires_max_(APC_LEVEL)
2192 VOID
2193 FLTAPI
2194 FltAcquirePushLockExclusive(
2195 _Inout_ _Requires_lock_not_held_(*_Curr_) _Acquires_lock_(*_Curr_) PEX_PUSH_LOCK PushLock);
2196
2197 _Acquires_lock_(_Global_critical_region_)
2198 _IRQL_requires_max_(APC_LEVEL)
2199 VOID
2200 FLTAPI
2201 FltAcquirePushLockShared(
2202 _Inout_ _Requires_lock_not_held_(*_Curr_) _Acquires_lock_(*_Curr_) PEX_PUSH_LOCK PushLock);
2203
2204 _Releases_lock_(_Global_critical_region_)
2205 _IRQL_requires_max_(APC_LEVEL)
2206 VOID
2207 FLTAPI
2208 FltReleasePushLock(
2209 _Inout_ _Requires_lock_held_(*_Curr_) _Releases_lock_(*_Curr_) PEX_PUSH_LOCK PushLock);
2210
2211 BOOLEAN
2212 FLTAPI
2213 FltIsOperationSynchronous(
2214 _In_ PFLT_CALLBACK_DATA CallbackData);
2215
2216 _IRQL_requires_max_(DISPATCH_LEVEL)
2217 BOOLEAN
2218 FLTAPI
2219 FltIs32bitProcess(
2220 _In_opt_ PFLT_CALLBACK_DATA CallbackData);
2221
2222 _IRQL_requires_max_(DISPATCH_LEVEL)
2223 PEPROCESS
2224 FLTAPI
2225 FltGetRequestorProcess(
2226 _In_ PFLT_CALLBACK_DATA CallbackData);
2227
2228 _IRQL_requires_max_(DISPATCH_LEVEL)
2229 ULONG
2230 FLTAPI
2231 FltGetRequestorProcessId(
2232 _In_ PFLT_CALLBACK_DATA CallbackData);
2233
2234 _IRQL_requires_max_(APC_LEVEL)
2235 VOID
2236 FLTAPI
2237 FltNotifyFilterChangeDirectory(
2238 _Inout_ PNOTIFY_SYNC NotifySync,
2239 _Inout_ PLIST_ENTRY NotifyList,
2240 _In_ PVOID FsContext,
2241 _In_ PSTRING FullDirectoryName,
2242 _In_ BOOLEAN WatchTree,
2243 _In_ BOOLEAN IgnoreBuffer,
2244 _In_ ULONG CompletionFilter,
2245 _In_ PFLT_CALLBACK_DATA NotifyCallbackData,
2246 _In_opt_ PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback,
2247 _In_opt_ PSECURITY_SUBJECT_CONTEXT SubjectContext,
2248 _In_opt_ PFILTER_REPORT_CHANGE FilterCallback);
2249
2250 PCHAR
2251 FLTAPI
2252 FltGetIrpName(
2253 _In_ UCHAR IrpMajorCode);
2254
2255 #if FLT_MGR_AFTER_XPSP2
2256
2257 _Must_inspect_result_
2258 _IRQL_requires_max_(PASSIVE_LEVEL)
2259 NTSTATUS
2260 FLTAPI
2261 FltCreateFileEx(
2262 _In_ PFLT_FILTER Filter,
2263 _In_opt_ PFLT_INSTANCE Instance,
2264 _Out_ PHANDLE FileHandle,
2265 _Outptr_opt_ PFILE_OBJECT *FileObject,
2266 _In_ ACCESS_MASK DesiredAccess,
2267 _In_ POBJECT_ATTRIBUTES ObjectAttributes,
2268 _Out_ PIO_STATUS_BLOCK IoStatusBlock,
2269 _In_opt_ PLARGE_INTEGER AllocationSize,
2270 _In_ ULONG FileAttributes,
2271 _In_ ULONG ShareAccess,
2272 _In_ ULONG CreateDisposition,
2273 _In_ ULONG CreateOptions,
2274 _In_reads_bytes_opt_(EaLength) PVOID EaBuffer,
2275 _In_ ULONG EaLength,
2276 _In_ ULONG Flags);
2277
2278 _Must_inspect_result_
2279 _IRQL_requires_max_(PASSIVE_LEVEL)
2280 NTSTATUS
2281 FLTAPI
2282 FltOpenVolume(
2283 _In_ PFLT_INSTANCE Instance,
2284 _Out_ PHANDLE VolumeHandle,
2285 _Outptr_opt_ PFILE_OBJECT *VolumeFileObject);
2286
2287 _Must_inspect_result_
2288 _IRQL_requires_max_(PASSIVE_LEVEL)
2289 NTSTATUS
2290 FLTAPI
2291 FltQueryEaFile(
2292 _In_ PFLT_INSTANCE Instance,
2293 _In_ PFILE_OBJECT FileObject,
2294 _Out_writes_bytes_to_(Length,*LengthReturned) PVOID ReturnedEaData,
2295 _In_ ULONG Length,
2296 _In_ BOOLEAN ReturnSingleEntry,
2297 _In_reads_bytes_opt_(EaListLength) PVOID EaList,
2298 _In_ ULONG EaListLength,
2299 _In_opt_ PULONG EaIndex,
2300 _In_ BOOLEAN RestartScan,
2301 _Out_opt_ PULONG LengthReturned);
2302
2303 _Must_inspect_result_
2304 _IRQL_requires_max_(PASSIVE_LEVEL)
2305 NTSTATUS
2306 FLTAPI
2307 FltSetEaFile(
2308 _In_ PFLT_INSTANCE Instance,
2309 _In_ PFILE_OBJECT FileObject,
2310 _In_reads_bytes_(Length) PVOID EaBuffer,
2311 _In_ ULONG Length);
2312
2313 #endif /* FLT_MGR_AFTER_XPSP2 */
2314
2315 #if FLT_MGR_LONGHORN
2316
2317 _Must_inspect_result_
2318 _IRQL_requires_max_(PASSIVE_LEVEL)
2319 NTSTATUS
2320 FLTAPI
2321 FltCreateFileEx2(
2322 _In_ PFLT_FILTER Filter,
2323 _In_opt_ PFLT_INSTANCE Instance,
2324 _Out_ PHANDLE FileHandle,
2325 _Outptr_opt_ PFILE_OBJECT *FileObject,
2326 _In_ ACCESS_MASK DesiredAccess,
2327 _In_ POBJECT_ATTRIBUTES ObjectAttributes,
2328 _Out_ PIO_STATUS_BLOCK IoStatusBlock,
2329 _In_opt_ PLARGE_INTEGER AllocationSize,
2330 _In_ ULONG FileAttributes,
2331 _In_ ULONG ShareAccess,
2332 _In_ ULONG CreateDisposition,
2333 _In_ ULONG CreateOptions,
2334 _In_reads_bytes_opt_(EaLength) PVOID EaBuffer,
2335 _In_ ULONG EaLength,
2336 _In_ ULONG Flags,
2337 _In_opt_ PIO_DRIVER_CREATE_CONTEXT DriverContext);
2338
2339 _Must_inspect_result_
2340 _IRQL_requires_max_(PASSIVE_LEVEL)
2341 NTSTATUS
2342 FLTAPI
2343 FltQueryDirectoryFile(
2344 _In_ PFLT_INSTANCE Instance,
2345 _In_ PFILE_OBJECT FileObject,
2346 _Out_writes_bytes_(Length) PVOID FileInformation,
2347 _In_ ULONG Length,
2348 _In_ FILE_INFORMATION_CLASS FileInformationClass,
2349 _In_ BOOLEAN ReturnSingleEntry,
2350 _In_opt_ PUNICODE_STRING FileName,
2351 _In_ BOOLEAN RestartScan,
2352 _Out_opt_ PULONG LengthReturned);
2353
2354 _IRQL_requires_max_(APC_LEVEL)
2355 BOOLEAN
2356 FLTAPI
2357 FltSupportsFileContextsEx(
2358 _In_ PFILE_OBJECT FileObject,
2359 _In_opt_ PFLT_INSTANCE Instance);
2360
2361 _IRQL_requires_max_(APC_LEVEL)
2362 NTSTATUS
2363 FLTAPI
2364 FltSetTransactionContext(
2365 _In_ PFLT_INSTANCE Instance,
2366 _In_ PKTRANSACTION Transaction,
2367 _In_ FLT_SET_CONTEXT_OPERATION Operation,
2368 _In_ PFLT_CONTEXT NewContext,
2369 _Outptr_opt_ PFLT_CONTEXT *OldContext);
2370
2371 _IRQL_requires_max_(APC_LEVEL)
2372 NTSTATUS
2373 FLTAPI
2374 FltDeleteTransactionContext(
2375 _In_ PFLT_INSTANCE Instance,
2376 _In_ PKTRANSACTION Transaction,
2377 _Outptr_opt_ PFLT_CONTEXT *OldContext);
2378
2379 _IRQL_requires_max_(APC_LEVEL)
2380 NTSTATUS
2381 FLTAPI
2382 FltGetTransactionContext(
2383 _In_ PFLT_INSTANCE Instance,
2384 _In_ PKTRANSACTION Transaction,
2385 _Outptr_ PFLT_CONTEXT *Context);
2386
2387 _IRQL_requires_max_(APC_LEVEL)
2388 BOOLEAN
2389 FLTAPI
2390 FltIsFltMgrVolumeDeviceObject(
2391 _In_ PDEVICE_OBJECT DeviceObject);
2392
2393 _IRQL_requires_max_(APC_LEVEL)
2394 NTSTATUS
2395 FLTAPI
2396 FltGetVolumeInformation(
2397 _In_ PFLT_VOLUME Volume,
2398 _In_ FILTER_VOLUME_INFORMATION_CLASS InformationClass,
2399 _Out_writes_bytes_to_opt_(BufferSize,*BytesReturned) PVOID Buffer,
2400 _In_ ULONG BufferSize,
2401 _Out_ PULONG BytesReturned);
2402
2403 _IRQL_requires_max_(APC_LEVEL)
2404 NTSTATUS
2405 FLTAPI
2406 FltGetFileSystemType(
2407 _In_ PVOID FltObject,
2408 _Out_ PFLT_FILESYSTEM_TYPE FileSystemType);
2409
2410 _Must_inspect_result_
2411 _IRQL_requires_max_(PASSIVE_LEVEL)
2412 NTSTATUS
2413 FLTAPI
2414 FltIsVolumeSnapshot(
2415 _In_ PVOID FltObject,
2416 _Out_ PBOOLEAN IsSnapshotVolume);
2417
2418 _Must_inspect_result_
2419 _When_(((CallbackData!=NULL) && FLT_IS_IRP_OPERATION(CallbackData)), _IRQL_requires_max_(PASSIVE_LEVEL))
2420 _When_((!((CallbackData!=NULL) && FLT_IS_IRP_OPERATION(CallbackData))), _IRQL_requires_max_(APC_LEVEL))
2421 NTSTATUS
2422 FLTAPI
2423 FltCancellableWaitForSingleObject(
2424 _In_ PVOID Object,
2425 _In_opt_ PLARGE_INTEGER Timeout,
2426 _In_opt_ PFLT_CALLBACK_DATA CallbackData);
2427
2428 _Must_inspect_result_
2429 _When_(((CallbackData!=NULL) && FLT_IS_IRP_OPERATION(CallbackData)), _IRQL_requires_max_(PASSIVE_LEVEL))
2430 _When_((!((CallbackData!=NULL) && FLT_IS_IRP_OPERATION(CallbackData))), _IRQL_requires_max_(APC_LEVEL))
2431 NTSTATUS
2432 FLTAPI
2433 FltCancellableWaitForMultipleObjects(
2434 _In_ ULONG Count,
2435 _In_reads_(Count) PVOID ObjectArray[],
2436 _In_ WAIT_TYPE WaitType,
2437 _In_opt_ PLARGE_INTEGER Timeout,
2438 _In_opt_ PKWAIT_BLOCK WaitBlockArray,
2439 _In_ PFLT_CALLBACK_DATA CallbackData);
2440
2441 _IRQL_requires_max_(DISPATCH_LEVEL)
2442 HANDLE
2443 FLTAPI
2444 FltGetRequestorProcessIdEx(
2445 _In_ PFLT_CALLBACK_DATA CallbackData);
2446
2447 _Must_inspect_result_
2448 _IRQL_requires_max_(APC_LEVEL)
2449 NTSTATUS
2450 FLTAPI
2451 FltEnlistInTransaction(
2452 _In_ PFLT_INSTANCE Instance,
2453 _In_ PKTRANSACTION Transaction,
2454 _In_ PFLT_CONTEXT TransactionContext,
2455 _In_ NOTIFICATION_MASK NotificationMask);
2456
2457 _IRQL_requires_max_(APC_LEVEL)
2458 NTSTATUS
2459 FLTAPI
2460 FltRollbackEnlistment(
2461 _In_ PFLT_INSTANCE Instance,
2462 _In_ PKTRANSACTION Transaction,
2463 _In_opt_ PFLT_CONTEXT TransactionContext);
2464
2465 _IRQL_requires_max_(APC_LEVEL)
2466 NTSTATUS
2467 FLTAPI
2468 FltPrePrepareComplete(
2469 _In_ PFLT_INSTANCE Instance,
2470 _In_ PKTRANSACTION Transaction,
2471 _In_opt_ PFLT_CONTEXT TransactionContext);
2472
2473 _IRQL_requires_max_(APC_LEVEL)
2474 NTSTATUS
2475 FLTAPI
2476 FltPrepareComplete(
2477 _In_ PFLT_INSTANCE Instance,
2478 _In_ PKTRANSACTION Transaction,
2479 _In_opt_ PFLT_CONTEXT TransactionContext);
2480
2481 _IRQL_requires_max_(PASSIVE_LEVEL)
2482 NTSTATUS
2483 FLTAPI
2484 FltCommitComplete(
2485 _In_ PFLT_INSTANCE Instance,
2486 _In_ PKTRANSACTION Transaction,
2487 _In_opt_ PFLT_CONTEXT TransactionContext);
2488
2489 _IRQL_requires_max_(APC_LEVEL)
2490 NTSTATUS
2491 FLTAPI
2492 FltCommitFinalizeComplete(
2493 _In_ PFLT_INSTANCE Instance,
2494 _In_ PKTRANSACTION Transaction,
2495 _In_opt_ PFLT_CONTEXT TransactionContext);
2496
2497 _IRQL_requires_max_(PASSIVE_LEVEL)
2498 NTSTATUS
2499 FLTAPI
2500 FltRollbackComplete(
2501 _In_ PFLT_INSTANCE Instance,
2502 _In_ PKTRANSACTION Transaction,
2503 _In_opt_ PFLT_CONTEXT TransactionContext);
2504
2505 _Must_inspect_result_
2506 _IRQL_requires_max_(APC_LEVEL)
2507 NTSTATUS
2508 FLTAPI
2509 FltAllocateExtraCreateParameterList(
2510 _In_ PFLT_FILTER Filter,
2511 _In_ FSRTL_ALLOCATE_ECPLIST_FLAGS Flags,
2512 _Outptr_ PECP_LIST *EcpList);
2513
2514 _Must_inspect_result_
2515 _IRQL_requires_max_(APC_LEVEL)
2516 NTSTATUS
2517 FLTAPI
2518 FltAllocateExtraCreateParameter(
2519 _In_ PFLT_FILTER Filter,
2520 _In_ LPCGUID EcpType,
2521 ULONG SizeOfContext,
2522 _In_ FSRTL_ALLOCATE_ECP_FLAGS Flags,
2523 _In_opt_ PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback,
2524 _In_ ULONG PoolTag,
2525 _Outptr_ PVOID *EcpContext);
2526
2527 _IRQL_requires_max_(APC_LEVEL)
2528 VOID
2529 FLTAPI
2530 FltInitExtraCreateParameterLookasideList(
2531 _In_ PFLT_FILTER Filter,
2532 _Inout_ PVOID Lookaside,
2533 _In_ FSRTL_ECP_LOOKASIDE_FLAGS Flags,
2534 _In_ SIZE_T Size,
2535 _In_ ULONG Tag);
2536
2537 _IRQL_requires_max_(APC_LEVEL)
2538 VOID
2539 FLTAPI
2540 FltDeleteExtraCreateParameterLookasideList(
2541 _In_ PFLT_FILTER Filter,
2542 _Inout_ PVOID Lookaside,
2543 _In_ FSRTL_ECP_LOOKASIDE_FLAGS Flags);
2544
2545 _Must_inspect_result_
2546 _IRQL_requires_max_(APC_LEVEL)
2547 NTSTATUS
2548 FLTAPI
2549 FltAllocateExtraCreateParameterFromLookasideList(
2550 _In_ PFLT_FILTER Filter,
2551 _In_ LPCGUID EcpType,
2552 _In_ ULONG SizeOfContext,
2553 _In_ FSRTL_ALLOCATE_ECP_FLAGS Flags,
2554 _In_opt_ PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback,
2555 _Inout_ PVOID LookasideList,
2556 _Outptr_ PVOID *EcpContext);
2557
2558 _IRQL_requires_max_(APC_LEVEL)
2559 NTSTATUS
2560 FLTAPI
2561 FltInsertExtraCreateParameter(
2562 _In_ PFLT_FILTER Filter,
2563 _Inout_ PECP_LIST EcpList,
2564 _Inout_ PVOID EcpContext);
2565
2566 _IRQL_requires_max_(APC_LEVEL)
2567 NTSTATUS
2568 FLTAPI
2569 FltFindExtraCreateParameter(
2570 _In_ PFLT_FILTER Filter,
2571 _In_ PECP_LIST EcpList,
2572 _In_ LPCGUID EcpType,
2573 _Outptr_opt_ PVOID *EcpContext,
2574 _Out_opt_ ULONG *EcpContextSize);
2575
2576 _IRQL_requires_max_(APC_LEVEL)
2577 NTSTATUS
2578 FLTAPI
2579 FltRemoveExtraCreateParameter(
2580 _In_ PFLT_FILTER Filter,
2581 _Inout_ PECP_LIST EcpList,
2582 _In_ LPCGUID EcpType,
2583 _Outptr_ PVOID *EcpContext,
2584 _Out_opt_ ULONG *EcpContextSize);
2585
2586 _IRQL_requires_max_(APC_LEVEL)
2587 VOID
2588 FLTAPI
2589 FltFreeExtraCreateParameterList(
2590 _In_ PFLT_FILTER Filter,
2591 _In_ PECP_LIST EcpList);
2592
2593 _IRQL_requires_max_(APC_LEVEL)
2594 VOID
2595 FLTAPI
2596 FltFreeExtraCreateParameter(
2597 _In_ PFLT_FILTER Filter,
2598 _In_ PVOID EcpContext);
2599
2600 _IRQL_requires_max_(APC_LEVEL)
2601 NTSTATUS
2602 FLTAPI
2603 FltGetEcpListFromCallbackData(
2604 _In_ PFLT_FILTER Filter,
2605 _In_ PFLT_CALLBACK_DATA CallbackData,
2606 _Outptr_result_maybenull_ PECP_LIST *EcpList);
2607
2608 _IRQL_requires_max_(APC_LEVEL)
2609 NTSTATUS
2610 FLTAPI
2611 FltSetEcpListIntoCallbackData(
2612 _In_ PFLT_FILTER Filter,
2613 _In_ PFLT_CALLBACK_DATA CallbackData,
2614 _In_ PECP_LIST EcpList);
2615
2616 _IRQL_requires_max_(APC_LEVEL)
2617 NTSTATUS
2618 FLTAPI
2619 FltGetNextExtraCreateParameter(
2620 _In_ PFLT_FILTER Filter,
2621 _In_ PECP_LIST EcpList,
2622 _In_opt_ PVOID CurrentEcpContext,
2623 _Out_opt_ LPGUID NextEcpType,
2624 _Outptr_opt_ PVOID *NextEcpContext,
2625 _Out_opt_ ULONG *NextEcpContextSize);
2626
2627 _IRQL_requires_max_(APC_LEVEL)
2628 VOID
2629 FLTAPI
2630 FltAcknowledgeEcp(
2631 _In_ PFLT_FILTER Filter,
2632 _In_ PVOID EcpContext);
2633
2634 _IRQL_requires_max_(APC_LEVEL)
2635 BOOLEAN
2636 FLTAPI
2637 FltIsEcpAcknowledged(
2638 _In_ PFLT_FILTER Filter,
2639 _In_ PVOID EcpContext);
2640
2641 _IRQL_requires_max_(APC_LEVEL)
2642 BOOLEAN
2643 FLTAPI
2644 FltIsEcpFromUserMode(
2645 _In_ PFLT_FILTER Filter,
2646 _In_ PVOID EcpContext);
2647
2648 _IRQL_requires_max_(DISPATCH_LEVEL)
2649 NTSTATUS
2650 FLTAPI
2651 FltRetrieveIoPriorityInfo(
2652 _In_opt_ PFLT_CALLBACK_DATA Data,
2653 _In_opt_ PFILE_OBJECT FileObject,
2654 _In_opt_ PETHREAD Thread,
2655 _Inout_ PIO_PRIORITY_INFO PriorityInfo);
2656
2657 _IRQL_requires_max_(DISPATCH_LEVEL)
2658 NTSTATUS
2659 FLTAPI
2660 FltApplyPriorityInfoThread(
2661 _In_ PIO_PRIORITY_INFO InputPriorityInfo,
2662 _Out_opt_ PIO_PRIORITY_INFO OutputPriorityInfo,
2663 _In_ PETHREAD Thread);
2664
2665 _IRQL_requires_max_(DISPATCH_LEVEL)
2666 IO_PRIORITY_HINT
2667 FLTAPI
2668 FltGetIoPriorityHint(
2669 _In_ PFLT_CALLBACK_DATA Data);
2670
2671 _IRQL_requires_max_(DISPATCH_LEVEL)
2672 IO_PRIORITY_HINT
2673 FLTAPI
2674 FltGetIoPriorityHintFromCallbackData(
2675 _In_ PFLT_CALLBACK_DATA Data);
2676
2677 _IRQL_requires_max_(DISPATCH_LEVEL)
2678 NTSTATUS
2679 FLTAPI
2680 FltSetIoPriorityHintIntoCallbackData(
2681 _In_ PFLT_CALLBACK_DATA Data,
2682 _In_ IO_PRIORITY_HINT PriorityHint);
2683
2684 _IRQL_requires_max_(DISPATCH_LEVEL)
2685 IO_PRIORITY_HINT
2686 FLTAPI
2687 FltGetIoPriorityHintFromFileObject(
2688 _In_ PFILE_OBJECT FileObject);
2689
2690 _Must_inspect_result_
2691 _IRQL_requires_max_(DISPATCH_LEVEL)
2692 NTSTATUS
2693 FLTAPI
2694 FltSetIoPriorityHintIntoFileObject(
2695 _In_ PFILE_OBJECT FileObject,
2696 _In_ IO_PRIORITY_HINT PriorityHint);
2697
2698 _IRQL_requires_max_(DISPATCH_LEVEL)
2699 IO_PRIORITY_HINT
2700 FLTAPI
2701 FltGetIoPriorityHintFromThread(
2702 _In_ PETHREAD Thread);
2703
2704 _IRQL_requires_max_(DISPATCH_LEVEL)
2705 NTSTATUS
2706 FLTAPI
2707 FltSetIoPriorityHintIntoThread(
2708 _In_ PETHREAD Thread,
2709 _In_ IO_PRIORITY_HINT PriorityHint);
2710
2711 #endif /* FLT_MGR_LONGHORN */
2712
2713 #if FLT_MGR_WIN7
2714
2715 _Must_inspect_result_
2716 _IRQL_requires_max_(APC_LEVEL)
2717 NTSTATUS
2718 FLTAPI
2719 FltAllocateCallbackDataEx(
2720 _In_ PFLT_INSTANCE Instance,
2721 _In_opt_ PFILE_OBJECT FileObject,
2722 _In_ FLT_ALLOCATE_CALLBACK_DATA_FLAGS Flags,
2723 _Outptr_ PFLT_CALLBACK_DATA *RetNewCallbackData);
2724
2725 _Must_inspect_result_
2726 _IRQL_requires_max_(DPC_LEVEL)
2727 PVOID
2728 FLTAPI
2729 FltGetNewSystemBufferAddress(
2730 _In_ PFLT_CALLBACK_DATA CallbackData);
2731
2732 _Must_inspect_result_
2733 _IRQL_requires_max_(APC_LEVEL)
2734 FLT_PREOP_CALLBACK_STATUS
2735 FLTAPI
2736 FltCheckOplockEx(
2737 _In_ POPLOCK Oplock,
2738 _In_ PFLT_CALLBACK_DATA CallbackData,
2739 _In_ ULONG Flags,
2740 _In_opt_ PVOID Context,
2741 _In_opt_ PFLTOPLOCK_WAIT_COMPLETE_ROUTINE WaitCompletionRoutine,
2742 _In_opt_ PFLTOPLOCK_PREPOST_CALLBACKDATA_ROUTINE PrePostCallbackDataRoutine);
2743
2744 _IRQL_requires_max_(APC_LEVEL)
2745 BOOLEAN
2746 FLTAPI
2747 FltCurrentOplock(
2748 _In_ POPLOCK Oplock);
2749
2750 _IRQL_requires_max_(APC_LEVEL)
2751 BOOLEAN
2752 FLTAPI
2753 FltCurrentOplockH(
2754 _In_ POPLOCK Oplock);
2755
2756 _IRQL_requires_max_(APC_LEVEL)
2757 FLT_PREOP_CALLBACK_STATUS
2758 FLTAPI
2759 FltOplockBreakH(
2760 _In_ POPLOCK Oplock,
2761 _In_ PFLT_CALLBACK_DATA CallbackData,
2762 _In_ ULONG Flags,
2763 _In_opt_ PVOID Context,
2764 _In_opt_ PFLTOPLOCK_WAIT_COMPLETE_ROUTINE WaitCompletionRoutine,
2765 _In_opt_ PFLTOPLOCK_PREPOST_CALLBACKDATA_ROUTINE PrePostCallbackDataRoutine);
2766
2767 _IRQL_requires_max_(APC_LEVEL)
2768 FLT_PREOP_CALLBACK_STATUS
2769 FLTAPI
2770 FltOplockBreakToNone(
2771 _In_ POPLOCK Oplock,
2772 _In_ PFLT_CALLBACK_DATA CallbackData,
2773 _In_opt_ PVOID Context,
2774 _In_opt_ PFLTOPLOCK_WAIT_COMPLETE_ROUTINE WaitCompletionRoutine,
2775 _In_opt_ PFLTOPLOCK_PREPOST_CALLBACKDATA_ROUTINE PrePostCallbackDataRoutine);
2776
2777 _IRQL_requires_max_(APC_LEVEL)
2778 FLT_PREOP_CALLBACK_STATUS
2779 FLTAPI
2780 FltOplockBreakToNoneEx(
2781 _In_ POPLOCK Oplock,
2782 _In_ PFLT_CALLBACK_DATA CallbackData,
2783 _In_ ULONG Flags,
2784 _In_opt_ PVOID Context,
2785 _In_opt_ PFLTOPLOCK_WAIT_COMPLETE_ROUTINE WaitCompletionRoutine,
2786 _In_opt_ PFLTOPLOCK_PREPOST_CALLBACKDATA_ROUTINE PrePostCallbackDataRoutine);
2787
2788 _IRQL_requires_max_(APC_LEVEL)
2789 BOOLEAN
2790 FLTAPI
2791 FltOplockIsSharedRequest(
2792 _In_ PFLT_CALLBACK_DATA CallbackData);
2793
2794 _Must_inspect_result_
2795 _IRQL_requires_max_(APC_LEVEL)
2796 FLT_PREOP_CALLBACK_STATUS
2797 FLTAPI
2798 FltOplockFsctrlEx(
2799 _In_ POPLOCK Oplock,
2800 _In_ PFLT_CALLBACK_DATA CallbackData,
2801 _In_ ULONG OpenCount,
2802 _In_ ULONG Flags);
2803
2804 BOOLEAN
2805 FLTAPI
2806 FltOplockKeysEqual(
2807 _In_opt_ PFILE_OBJECT Fo1,
2808 _In_opt_ PFILE_OBJECT Fo2);
2809
2810 _Must_inspect_result_
2811 _IRQL_requires_max_(APC_LEVEL)
2812 NTSTATUS
2813 FLTAPI
2814 FltGetRequestorSessionId(
2815 _In_ PFLT_CALLBACK_DATA CallbackData,
2816 _Out_ PULONG SessionId);
2817
2818 _IRQL_requires_max_(DISPATCH_LEVEL)
2819 NTSTATUS
2820 FLTAPI
2821 FltAdjustDeviceStackSizeForIoRedirection(
2822 _In_ PFLT_INSTANCE SourceInstance,
2823 _In_ PFLT_INSTANCE TargetInstance,
2824 _Out_opt_ PBOOLEAN SourceDeviceStackSizeModified);
2825
2826 _IRQL_requires_max_(DISPATCH_LEVEL)
2827 NTSTATUS
2828 FLTAPI
2829 FltIsIoRedirectionAllowed(
2830 _In_ PFLT_INSTANCE SourceInstance,
2831 _In_ PFLT_INSTANCE TargetInstance,
2832 _Out_ PBOOLEAN RedirectionAllowed);
2833
2834 _IRQL_requires_max_(DISPATCH_LEVEL)
2835 NTSTATUS
2836 FLTAPI
2837 FltIsIoRedirectionAllowedForOperation(
2838 _In_ PFLT_CALLBACK_DATA Data,
2839 _In_ PFLT_INSTANCE TargetInstance,
2840 _Out_ PBOOLEAN RedirectionAllowedThisIo,
2841 _Out_opt_ PBOOLEAN RedirectionAllowedAllIo);
2842
2843 #endif /* FLT_MGR_WIN7 */
2844
2845 #endif /* FLT_MGR_BASELINE */
2846
2847 #ifdef __cplusplus
2848 } /* extern "C" */
2849 #endif
2850
2851 #endif /* __FLTKERNEL__ */