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