Reactos
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
26extern "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
84typedef struct _FLT_FILTER *PFLT_FILTER;
85typedef struct _FLT_VOLUME *PFLT_VOLUME;
86typedef struct _FLT_INSTANCE *PFLT_INSTANCE;
87typedef struct _FLT_PORT *PFLT_PORT;
88
89typedef PVOID PFLT_CONTEXT;
90
91#if !FLT_MGR_LONGHORN
92typedef struct _KTRANSACTION *PKTRANSACTION;
93#endif
94
95#if !defined(_AMD64_) && !defined(_IA64_) && !defined(_ARM_)
96#include "pshpack4.h"
97#endif
98
99typedef 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
403typedef 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
436typedef 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
450typedef ULONG FLT_CALLBACK_DATA_FLAGS;
451
452#if FLT_MGR_WIN7
453typedef ULONG FLT_ALLOCATE_CALLBACK_DATA_FLAGS;
454#define FLT_ALLOCATE_CALLBACK_DATA_PREALLOCATE_ALL_MEMORY 0x00000001
455#endif /* FLT_MGR_WIN7 */
456
457typedef 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
473typedef 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;
482typedef const struct _FLT_RELATED_OBJECTS *PCFLT_RELATED_OBJECTS;
483
484typedef 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
493typedef VOID
494(FLTAPI *PFLT_CONTEXT_CLEANUP_CALLBACK)(
495 _In_ PFLT_CONTEXT Context,
496 _In_ FLT_CONTEXT_TYPE ContextType);
497
498typedef PVOID
499(FLTAPI *PFLT_CONTEXT_ALLOCATE_CALLBACK)(
500 _In_ POOL_TYPE PoolType,
501 _In_ SIZE_T Size,
502 _In_ FLT_CONTEXT_TYPE ContextType);
503
504typedef VOID
505(FLTAPI *PFLT_CONTEXT_FREE_CALLBACK)(
506 _In_ PVOID Pool,
507 _In_ FLT_CONTEXT_TYPE ContextType);
508
509typedef 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
515typedef 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;
525typedef const struct _FLT_CONTEXT_REGISTRATION *PCFLT_CONTEXT_REGISTRATION;
526
527typedef 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
545typedef 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
552typedef ULONG FLT_INSTANCE_QUERY_TEARDOWN_FLAGS;
553
554typedef NTSTATUS
555(FLTAPI *PFLT_INSTANCE_QUERY_TEARDOWN_CALLBACK)(
556 _In_ PCFLT_RELATED_OBJECTS FltObjects,
557 _In_ FLT_INSTANCE_QUERY_TEARDOWN_FLAGS Flags);
558
559typedef 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
567typedef VOID
568(FLTAPI *PFLT_INSTANCE_TEARDOWN_CALLBACK)(
569 _In_ PCFLT_RELATED_OBJECTS FltObjects,
570 _In_ FLT_INSTANCE_TEARDOWN_FLAGS Reason);
571
572typedef 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
581typedef 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
587typedef 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
592typedef ULONG FLT_POST_OPERATION_FLAGS;
593
594#define FLTFL_POST_OPERATION_DRAINING 0x00000001
595
596typedef 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
603typedef 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
609typedef 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
617typedef 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
649typedef ULONG FLT_FILTER_UNLOAD_FLAGS;
650
651#define FLTFL_FILTER_UNLOAD_MANDATORY 0x00000001
652
653typedef NTSTATUS
654(FLTAPI *PFLT_FILTER_UNLOAD_CALLBACK)(
655 FLT_FILTER_UNLOAD_FLAGS Flags);
656
657typedef struct _FLT_NAME_CONTROL {
658 UNICODE_STRING Name;
659} FLT_NAME_CONTROL, *PFLT_NAME_CONTROL;
660
661typedef ULONG FLT_FILE_NAME_OPTIONS;
662
663typedef 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
672typedef ULONG FLT_NORMALIZE_NAME_FLAGS;
673
674#define FLTFL_NORMALIZE_NAME_CASE_SENSITIVE 0x01
675#define FLTFL_NORMALIZE_NAME_DESTINATION_FILE_NAME 0x02
676
677typedef 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
688typedef 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
700typedef VOID
701(FLTAPI *PFLT_NORMALIZE_CONTEXT_CLEANUP)(
702 _In_opt_ PVOID *NormalizationContext);
703
704#if FLT_MGR_LONGHORN
705typedef 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
723typedef ULONG FLT_REGISTRATION_FLAGS;
724
725#define FLTFL_REGISTRATION_DO_NOT_SUPPORT_SERVICE_STOP 0x00000001
726#define FLTFL_REGISTRATION_SUPPORT_NPFS_MSFS 0x00000002
727
728typedef 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
748typedef VOID
749(FLTAPI *PFLT_COMPLETED_ASYNC_IO_CALLBACK)(
750 _In_ PFLT_CALLBACK_DATA CallbackData,
751 _In_ PFLT_CONTEXT Context);
752
753typedef 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
763typedef 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
770typedef 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
798typedef 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
805typedef 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
818typedef 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
823typedef 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
838typedef 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
847typedef 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
855typedef VOID
856(FLTAPI *PFLT_DISCONNECT_NOTIFY)(
857 _In_opt_ PVOID ConnectionCookie);
858
859typedef VOID
860(FLTAPI *PFLT_COMPLETE_CANCELED_CALLBACK)(
861 _In_ PFLT_CALLBACK_DATA CallbackData);
862
863typedef struct _FLT_DEFERRED_IO_WORKITEM *PFLT_DEFERRED_IO_WORKITEM;
864typedef struct _FLT_GENERIC_WORKITEM *PFLT_GENERIC_WORKITEM;
865
866typedef 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
872typedef VOID
873(FLTAPI *PFLT_GENERIC_WORKITEM_ROUTINE)(
874 _In_ PFLT_GENERIC_WORKITEM FltWorkItem,
875 _In_ PVOID FltObject,
876 _In_opt_ PVOID Context);
877
878typedef IO_CSQ_IRP_CONTEXT FLT_CALLBACK_DATA_QUEUE_IO_CONTEXT, *PFLT_CALLBACK_DATA_QUEUE_IO_CONTEXT;
879
880typedef struct _FLT_CALLBACK_DATA_QUEUE FLT_CALLBACK_DATA_QUEUE, *PFLT_CALLBACK_DATA_QUEUE;
881
882typedef 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
888typedef VOID
889(FLTAPI *PFLT_CALLBACK_DATA_QUEUE_REMOVE_IO)(
890 _Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq,
891 _In_ PFLT_CALLBACK_DATA Cbd);
892
893typedef 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
899typedef VOID
900(FLTAPI *PFLT_CALLBACK_DATA_QUEUE_ACQUIRE)(
901 _Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq,
902 _Out_opt_ PKIRQL Irql);
903
904typedef VOID
905(FLTAPI *PFLT_CALLBACK_DATA_QUEUE_RELEASE)(
906 _Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq,
907 _In_opt_ KIRQL Irql);
908
909typedef VOID
910(FLTAPI *PFLT_CALLBACK_DATA_QUEUE_COMPLETE_CANCELED_IO)(
911 _Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq,
912 _Inout_ PFLT_CALLBACK_DATA Cbd);
913
914typedef ULONG FLT_CALLBACK_DATA_QUEUE_FLAGS;
915
916typedef 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
928typedef NTSTATUS
929(*PFLT_COMPLETE_LOCK_CALLBACK_DATA_ROUTINE)(
930 _In_opt_ PVOID Context,
931 _In_ PFLT_CALLBACK_DATA CallbackData);
932
933typedef VOID
934(FLTAPI *PFLTOPLOCK_WAIT_COMPLETE_ROUTINE)(
935 _In_ PFLT_CALLBACK_DATA CallbackData,
936 _In_opt_ PVOID Context);
937
938typedef VOID
939(FLTAPI *PFLTOPLOCK_PREPOST_CALLBACKDATA_ROUTINE)(
940 _In_ PFLT_CALLBACK_DATA CallbackData,
941 _In_opt_ PVOID Context);
942
943VOID
944FLTAPI
945FltSetCallbackDataDirty(
946 _Inout_ PFLT_CALLBACK_DATA Data);
947
948VOID
949FLTAPI
950FltClearCallbackDataDirty(
951 _Inout_ PFLT_CALLBACK_DATA Data);
952
953BOOLEAN
954FLTAPI
955FltIsCallbackDataDirty(
956 _In_ PFLT_CALLBACK_DATA Data);
957
958_Must_inspect_result_
959BOOLEAN
960FLTAPI
961FltDoCompletionProcessingWhenSafe(
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)
971NTSTATUS
972FLTAPI
973FltCheckAndGrowNameControl(
974 _Inout_ PFLT_NAME_CONTROL NameCtrl,
975 _In_ USHORT NewSize);
976
977_Must_inspect_result_
978_IRQL_requires_max_(APC_LEVEL)
979NTSTATUS
980FLTAPI
981FltPurgeFileNameInformationCache(
982 _In_ PFLT_INSTANCE Instance,
983 _In_opt_ PFILE_OBJECT FileObject);
984
985_Must_inspect_result_
986_IRQL_requires_max_(APC_LEVEL)
987NTSTATUS
988FLTAPI
989FltRegisterFilter(
990 _In_ PDRIVER_OBJECT Driver,
991 _In_ CONST FLT_REGISTRATION *Registration,
992 _Outptr_ PFLT_FILTER *RetFilter);
993
994_IRQL_requires_max_(APC_LEVEL)
995VOID
996FLTAPI
997FltUnregisterFilter(
998 _In_ PFLT_FILTER Filter);
999
1000_Must_inspect_result_
1001_IRQL_requires_max_(APC_LEVEL)
1002NTSTATUS
1003FLTAPI
1004FltStartFiltering(
1005 _In_ PFLT_FILTER Filter);
1006
1007_Must_inspect_result_
1008_IRQL_requires_max_(APC_LEVEL)
1009PVOID
1010FLTAPI
1011FltGetRoutineAddress(
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))
1016VOID
1017FLTAPI
1018FltCompletePendedPreOperation(
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)
1024VOID
1025FLTAPI
1026FltCompletePendedPostOperation(
1027 _In_ PFLT_CALLBACK_DATA CallbackData);
1028
1029_Must_inspect_result_
1030_IRQL_requires_max_(DISPATCH_LEVEL)
1031NTSTATUS
1032FLTAPI
1033FltRequestOperationStatusCallback(
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))
1040PVOID
1041FLTAPI
1042FltAllocatePoolAlignedWithTag(
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)
1049VOID
1050FLTAPI
1051FltFreePoolAlignedWithTag(
1052 _In_ PFLT_INSTANCE Instance,
1053 _In_ PVOID Buffer,
1054 _In_ ULONG Tag);
1055
1056_Must_inspect_result_
1057_IRQL_requires_max_(APC_LEVEL)
1058NTSTATUS
1059FLTAPI
1060FltGetFileNameInformation(
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)
1067NTSTATUS
1068FLTAPI
1069FltGetFileNameInformationUnsafe(
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)
1076VOID
1077FLTAPI
1078FltReleaseFileNameInformation(
1079 _In_ PFLT_FILE_NAME_INFORMATION FileNameInformation);
1080
1081_IRQL_requires_max_(APC_LEVEL)
1082VOID
1083FLTAPI
1084FltReferenceFileNameInformation(
1085 _In_ PFLT_FILE_NAME_INFORMATION FileNameInformation);
1086
1087_IRQL_requires_max_(APC_LEVEL)
1088NTSTATUS
1089FLTAPI
1090FltParseFileName(
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)
1097NTSTATUS
1098FLTAPI
1099FltParseFileNameInformation(
1100 _Inout_ PFLT_FILE_NAME_INFORMATION FileNameInformation);
1101
1102_Must_inspect_result_
1103_IRQL_requires_max_(APC_LEVEL)
1104NTSTATUS
1105FLTAPI
1106FltGetTunneledName(
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)
1113NTSTATUS
1114FLTAPI
1115FltGetVolumeName(
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)
1122NTSTATUS
1123FLTAPI
1124FltGetDestinationFileNameInformation(
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)
1135NTSTATUS
1136FLTAPI
1137FltIsDirectory(
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)
1144NTSTATUS
1145FLTAPI
1146FltLoadFilter(
1147 _In_ PCUNICODE_STRING FilterName);
1148
1149_Must_inspect_result_
1150_IRQL_requires_max_(PASSIVE_LEVEL)
1151NTSTATUS
1152FLTAPI
1153FltUnloadFilter(
1154 _In_ PCUNICODE_STRING FilterName);
1155
1156_Must_inspect_result_
1157_IRQL_requires_max_(APC_LEVEL)
1158NTSTATUS
1159FLTAPI
1160FltAttachVolume(
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)
1168NTSTATUS
1169FLTAPI
1170FltAttachVolumeAtAltitude(
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)
1179NTSTATUS
1180FLTAPI
1181FltDetachVolume(
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)
1188NTSTATUS
1189FLTAPI
1190FltAllocateCallbackData(
1191 _In_ PFLT_INSTANCE Instance,
1192 _In_opt_ PFILE_OBJECT FileObject,
1193 _Outptr_ PFLT_CALLBACK_DATA *RetNewCallbackData);
1194
1195_IRQL_requires_max_(DISPATCH_LEVEL)
1196VOID
1197FLTAPI
1198FltFreeCallbackData(
1199 _In_ PFLT_CALLBACK_DATA CallbackData);
1200
1201_IRQL_requires_max_(APC_LEVEL)
1202VOID
1203FLTAPI
1204FltReuseCallbackData(
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))
1209VOID
1210FLTAPI
1211FltPerformSynchronousIo(
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))
1217NTSTATUS
1218FLTAPI
1219FltPerformAsynchronousIo(
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)
1226NTSTATUS
1227FLTAPI
1228FltCreateFile(
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))
1247NTSTATUS
1248FLTAPI
1249FltReadFile(
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)
1262NTSTATUS
1263FLTAPI
1264FltTagFile(
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)
1274NTSTATUS
1275FLTAPI
1276FltUntagFile(
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))
1285NTSTATUS
1286FLTAPI
1287FltWriteFile(
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)
1300NTSTATUS
1301FLTAPI
1302FltQueryInformationFile(
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)
1312NTSTATUS
1313FLTAPI
1314FltSetInformationFile(
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)
1323NTSTATUS
1324FLTAPI
1325FltQueryVolumeInformationFile(
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)
1335NTSTATUS
1336FLTAPI
1337FltQuerySecurityObject(
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)
1347NTSTATUS
1348FLTAPI
1349FltSetSecurityObject(
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)
1357NTSTATUS
1358FLTAPI
1359FltFlushBuffers(
1360 _In_ PFLT_INSTANCE Instance,
1361 _In_ PFILE_OBJECT FileObject);
1362
1363_Must_inspect_result_
1364_IRQL_requires_max_(PASSIVE_LEVEL)
1365NTSTATUS
1366FLTAPI
1367FltFsControlFile(
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)
1379NTSTATUS
1380FLTAPI
1381FltDeviceIoControlFile(
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_When_(FlagOn(CallbackData->Iopb->IrpFlags, IRP_PAGING_IO), _IRQL_requires_max_(APC_LEVEL))
1392_When_(!FlagOn(CallbackData->Iopb->IrpFlags, IRP_PAGING_IO), _IRQL_requires_max_(PASSIVE_LEVEL))
1393VOID
1394FLTAPI
1395FltReissueSynchronousIo(
1396 _In_ PFLT_INSTANCE InitiatingInstance,
1397 _In_ PFLT_CALLBACK_DATA CallbackData);
1398
1399_IRQL_requires_max_(PASSIVE_LEVEL)
1400NTSTATUS
1401FLTAPI
1402FltClose(
1403 _In_ HANDLE FileHandle);
1404
1405_IRQL_requires_max_(PASSIVE_LEVEL)
1406VOID
1407FLTAPI
1408FltCancelFileOpen(
1409 _In_ PFLT_INSTANCE Instance,
1410 _In_ PFILE_OBJECT FileObject);
1411
1412_Must_inspect_result_
1413_IRQL_requires_max_(PASSIVE_LEVEL)
1414NTSTATUS
1415FLTAPI
1416FltCreateSystemVolumeInformationFolder(
1417 _In_ PFLT_INSTANCE Instance);
1418
1419_IRQL_requires_max_(APC_LEVEL)
1420BOOLEAN
1421FLTAPI
1422FltSupportsFileContexts(
1423 _In_ PFILE_OBJECT FileObject);
1424
1425_IRQL_requires_max_(APC_LEVEL)
1426BOOLEAN
1427FLTAPI
1428FltSupportsStreamContexts(
1429 _In_ PFILE_OBJECT FileObject);
1430
1431_IRQL_requires_max_(APC_LEVEL)
1432BOOLEAN
1433FLTAPI
1434FltSupportsStreamHandleContexts(
1435 _In_ PFILE_OBJECT FileObject);
1436
1437_Must_inspect_result_
1438_IRQL_requires_max_(APC_LEVEL)
1439NTSTATUS
1440FLTAPI
1441FltAllocateContext(
1442 _In_ PFLT_FILTER Filter,
1443 _In_ FLT_CONTEXT_TYPE ContextType,
1444 _In_ SIZE_T ContextSize,
1445 _In_ POOL_TYPE PoolType,
1446 _Outptr_result_bytebuffer_(ContextSize) PFLT_CONTEXT *ReturnedContext);
1447
1448_IRQL_requires_max_(APC_LEVEL)
1449VOID
1450FLTAPI
1451FltGetContexts(
1452 _In_ PCFLT_RELATED_OBJECTS FltObjects,
1453 _In_ FLT_CONTEXT_TYPE DesiredContexts,
1454 _Out_ PFLT_RELATED_CONTEXTS Contexts);
1455
1456_IRQL_requires_max_(APC_LEVEL)
1457VOID
1458FLTAPI
1459FltReleaseContexts(
1460 _In_ PFLT_RELATED_CONTEXTS Contexts);
1461
1462_IRQL_requires_max_(APC_LEVEL)
1463NTSTATUS
1464FLTAPI
1465FltSetVolumeContext(
1466 _In_ PFLT_VOLUME Volume,
1467 _In_ FLT_SET_CONTEXT_OPERATION Operation,
1468 _In_ PFLT_CONTEXT NewContext,
1469 _Outptr_opt_result_maybenull_ PFLT_CONTEXT *OldContext);
1470
1471_IRQL_requires_max_(APC_LEVEL)
1472NTSTATUS
1473FLTAPI
1474FltSetInstanceContext(
1475 _In_ PFLT_INSTANCE Instance,
1476 _In_ FLT_SET_CONTEXT_OPERATION Operation,
1477 _In_ PFLT_CONTEXT NewContext,
1478 _Outptr_opt_result_maybenull_ PFLT_CONTEXT *OldContext);
1479
1480_IRQL_requires_max_(APC_LEVEL)
1481NTSTATUS
1482FLTAPI
1483FltSetFileContext(
1484 _In_ PFLT_INSTANCE Instance,
1485 _In_ PFILE_OBJECT FileObject,
1486 _In_ FLT_SET_CONTEXT_OPERATION Operation,
1487 _In_ PFLT_CONTEXT NewContext,
1488 _Outptr_opt_result_maybenull_ PFLT_CONTEXT *OldContext);
1489
1490_IRQL_requires_max_(APC_LEVEL)
1491NTSTATUS
1492FLTAPI
1493FltSetStreamContext(
1494 _In_ PFLT_INSTANCE Instance,
1495 _In_ PFILE_OBJECT FileObject,
1496 _In_ FLT_SET_CONTEXT_OPERATION Operation,
1497 _In_ PFLT_CONTEXT NewContext,
1498 _Outptr_opt_result_maybenull_ PFLT_CONTEXT *OldContext);
1499
1500_IRQL_requires_max_(APC_LEVEL)
1501NTSTATUS
1502FLTAPI
1503FltSetStreamHandleContext(
1504 _In_ PFLT_INSTANCE Instance,
1505 _In_ PFILE_OBJECT FileObject,
1506 _In_ FLT_SET_CONTEXT_OPERATION Operation,
1507 _In_ PFLT_CONTEXT NewContext,
1508 _Outptr_opt_result_maybenull_ PFLT_CONTEXT *OldContext);
1509
1510_IRQL_requires_max_(APC_LEVEL)
1511VOID
1512FLTAPI
1513FltDeleteContext(
1514 _In_ PFLT_CONTEXT Context);
1515
1516_IRQL_requires_max_(APC_LEVEL)
1517NTSTATUS
1518FLTAPI
1519FltDeleteVolumeContext(
1520 _In_ PFLT_FILTER Filter,
1521 _In_ PFLT_VOLUME Volume,
1522 _Outptr_opt_result_maybenull_ PFLT_CONTEXT *OldContext);
1523
1524_IRQL_requires_max_(APC_LEVEL)
1525NTSTATUS
1526FLTAPI
1527FltDeleteInstanceContext(
1528 _In_ PFLT_INSTANCE Instance,
1529 _Outptr_opt_result_maybenull_ PFLT_CONTEXT *OldContext);
1530
1531_IRQL_requires_max_(APC_LEVEL)
1532NTSTATUS
1533FLTAPI
1534FltDeleteFileContext(
1535 _In_ PFLT_INSTANCE Instance,
1536 _In_ PFILE_OBJECT FileObject,
1537 _Outptr_opt_result_maybenull_ PFLT_CONTEXT *OldContext);
1538
1539_IRQL_requires_max_(APC_LEVEL)
1540NTSTATUS
1541FLTAPI
1542FltDeleteStreamContext(
1543 _In_ PFLT_INSTANCE Instance,
1544 _In_ PFILE_OBJECT FileObject,
1545 _Outptr_opt_result_maybenull_ PFLT_CONTEXT *OldContext);
1546
1547_IRQL_requires_max_(APC_LEVEL)
1548NTSTATUS
1549FLTAPI
1550FltDeleteStreamHandleContext(
1551 _In_ PFLT_INSTANCE Instance,
1552 _In_ PFILE_OBJECT FileObject,
1553 _Outptr_opt_result_maybenull_ PFLT_CONTEXT *OldContext);
1554
1555_IRQL_requires_max_(APC_LEVEL)
1556NTSTATUS
1557FLTAPI
1558FltGetVolumeContext(
1559 _In_ PFLT_FILTER Filter,
1560 _In_ PFLT_VOLUME Volume,
1561 _Outptr_ PFLT_CONTEXT *Context);
1562
1563_IRQL_requires_max_(APC_LEVEL)
1564NTSTATUS
1565FLTAPI
1566FltGetInstanceContext(
1567 _In_ PFLT_INSTANCE Instance,
1568 _Outptr_ PFLT_CONTEXT *Context);
1569
1570_IRQL_requires_max_(APC_LEVEL)
1571NTSTATUS
1572FLTAPI
1573FltGetFileContext(
1574 _In_ PFLT_INSTANCE Instance,
1575 _In_ PFILE_OBJECT FileObject,
1576 _Outptr_ PFLT_CONTEXT *Context);
1577
1578_IRQL_requires_max_(APC_LEVEL)
1579NTSTATUS
1580FLTAPI
1581FltGetStreamContext(
1582 _In_ PFLT_INSTANCE Instance,
1583 _In_ PFILE_OBJECT FileObject,
1584 _Outptr_ PFLT_CONTEXT *Context);
1585
1586_IRQL_requires_max_(APC_LEVEL)
1587NTSTATUS
1588FLTAPI
1589FltGetStreamHandleContext(
1590 _In_ PFLT_INSTANCE Instance,
1591 _In_ PFILE_OBJECT FileObject,
1592 _Outptr_ PFLT_CONTEXT *Context);
1593
1594_IRQL_requires_max_(DISPATCH_LEVEL)
1595VOID
1596FLTAPI
1597FltReferenceContext(
1598 _In_ PFLT_CONTEXT Context);
1599
1600_IRQL_requires_max_(DISPATCH_LEVEL)
1601VOID
1602FLTAPI
1603FltReleaseContext(
1604 _In_ PFLT_CONTEXT Context);
1605
1606_IRQL_requires_max_(APC_LEVEL)
1607NTSTATUS
1608FLTAPI
1609FltGetFilterFromName(
1610 _In_ PCUNICODE_STRING FilterName,
1611 _Outptr_ PFLT_FILTER *RetFilter);
1612
1613_IRQL_requires_max_(PASSIVE_LEVEL)
1614NTSTATUS
1615FLTAPI
1616FltGetVolumeFromName(
1617 _In_ PFLT_FILTER Filter,
1618 _In_ PCUNICODE_STRING VolumeName,
1619 _Outptr_ PFLT_VOLUME *RetVolume);
1620
1621_IRQL_requires_max_(APC_LEVEL)
1622NTSTATUS
1623FLTAPI
1624FltGetVolumeInstanceFromName(
1625 _In_opt_ PFLT_FILTER Filter,
1626 _In_ PFLT_VOLUME Volume,
1627 _In_opt_ PCUNICODE_STRING InstanceName,
1628 _Outptr_ PFLT_INSTANCE *RetInstance);
1629
1630_IRQL_requires_max_(APC_LEVEL)
1631NTSTATUS
1632FLTAPI
1633FltGetVolumeFromInstance(
1634 _In_ PFLT_INSTANCE Instance,
1635 _Outptr_ PFLT_VOLUME *RetVolume);
1636
1637_IRQL_requires_max_(APC_LEVEL)
1638NTSTATUS
1639FLTAPI
1640FltGetFilterFromInstance(
1641 _In_ PFLT_INSTANCE Instance,
1642 _Outptr_ PFLT_FILTER *RetFilter);
1643
1644_IRQL_requires_max_(APC_LEVEL)
1645NTSTATUS
1646FLTAPI
1647FltGetVolumeFromFileObject(
1648 _In_ PFLT_FILTER Filter,
1649 _In_ PFILE_OBJECT FileObject,
1650 _Outptr_ PFLT_VOLUME *RetVolume);
1651
1652_IRQL_requires_max_(APC_LEVEL)
1653NTSTATUS
1654FLTAPI
1655FltGetVolumeFromDeviceObject(
1656 _In_ PFLT_FILTER Filter,
1657 _In_ PDEVICE_OBJECT DeviceObject,
1658 _Outptr_ PFLT_VOLUME *RetVolume);
1659
1660_IRQL_requires_max_(DISPATCH_LEVEL)
1661NTSTATUS
1662FLTAPI
1663FltGetDeviceObject(
1664 _In_ PFLT_VOLUME Volume,
1665 _Outptr_ PDEVICE_OBJECT *DeviceObject);
1666
1667_IRQL_requires_max_(DISPATCH_LEVEL)
1668NTSTATUS
1669FLTAPI
1670FltGetDiskDeviceObject(
1671 _In_ PFLT_VOLUME Volume,
1672 _Outptr_ PDEVICE_OBJECT *DiskDeviceObject);
1673
1674_IRQL_requires_max_(APC_LEVEL)
1675NTSTATUS
1676FLTAPI
1677FltGetLowerInstance(
1678 _In_ PFLT_INSTANCE CurrentInstance,
1679 _Outptr_ PFLT_INSTANCE *LowerInstance);
1680
1681_IRQL_requires_max_(APC_LEVEL)
1682NTSTATUS
1683FLTAPI
1684FltGetUpperInstance(
1685 _In_ PFLT_INSTANCE CurrentInstance,
1686 _Outptr_ PFLT_INSTANCE *UpperInstance);
1687
1688_IRQL_requires_max_(APC_LEVEL)
1689NTSTATUS
1690FLTAPI
1691FltGetTopInstance(
1692 _In_ PFLT_VOLUME Volume,
1693 _Outptr_ PFLT_INSTANCE *Instance);
1694
1695_IRQL_requires_max_(APC_LEVEL)
1696NTSTATUS
1697FLTAPI
1698FltGetBottomInstance(
1699 _In_ PFLT_VOLUME Volume,
1700 _Outptr_ PFLT_INSTANCE *Instance);
1701
1702LONG
1703FLTAPI
1704FltCompareInstanceAltitudes(
1705 _In_ PFLT_INSTANCE Instance1,
1706 _In_ PFLT_INSTANCE Instance2);
1707
1708_IRQL_requires_max_(APC_LEVEL)
1709NTSTATUS
1710FLTAPI
1711FltGetFilterInformation(
1712 _In_ PFLT_FILTER Filter,
1713 _In_ FILTER_INFORMATION_CLASS InformationClass,
1714 _Out_writes_bytes_to_opt_(BufferSize, *BytesReturned) PVOID Buffer,
1715 _In_ ULONG BufferSize,
1716 _Out_ PULONG BytesReturned);
1717
1718_IRQL_requires_max_(APC_LEVEL)
1719NTSTATUS
1720FLTAPI
1721FltGetInstanceInformation(
1722 _In_ PFLT_INSTANCE Instance,
1723 _In_ INSTANCE_INFORMATION_CLASS InformationClass,
1724 _Out_writes_bytes_to_opt_(BufferSize,*BytesReturned) PVOID Buffer,
1725 _In_ ULONG BufferSize,
1726 _Out_ PULONG BytesReturned);
1727
1728_IRQL_requires_max_(APC_LEVEL)
1729NTSTATUS
1730FLTAPI
1731FltGetVolumeProperties(
1732 _In_ PFLT_VOLUME Volume,
1733 _Out_writes_bytes_to_opt_(VolumePropertiesLength,*LengthReturned) PFLT_VOLUME_PROPERTIES VolumeProperties,
1734 _In_ ULONG VolumePropertiesLength,
1735 _Out_ PULONG LengthReturned);
1736
1737_Must_inspect_result_
1738_IRQL_requires_max_(PASSIVE_LEVEL)
1739NTSTATUS
1740FLTAPI
1741FltIsVolumeWritable(
1742 _In_ PVOID FltObject,
1743 _Out_ PBOOLEAN IsWritable);
1744
1745_Must_inspect_result_
1746_IRQL_requires_max_(PASSIVE_LEVEL)
1747NTSTATUS
1748FLTAPI
1749FltGetVolumeGuidName(
1750 _In_ PFLT_VOLUME Volume,
1751 _Out_ PUNICODE_STRING VolumeGuidName,
1752 _Out_opt_ PULONG BufferSizeNeeded);
1753
1754_Must_inspect_result_
1755_IRQL_requires_max_(PASSIVE_LEVEL)
1756NTSTATUS
1757FLTAPI
1758FltQueryVolumeInformation(
1759 _In_ PFLT_INSTANCE Instance,
1760 _Out_ PIO_STATUS_BLOCK Iosb,
1761 _Out_writes_bytes_(Length) PVOID FsInformation,
1762 _In_ ULONG Length,
1763 _In_ FS_INFORMATION_CLASS FsInformationClass);
1764
1765_Must_inspect_result_
1766_IRQL_requires_max_(PASSIVE_LEVEL)
1767NTSTATUS
1768FLTAPI
1769FltSetVolumeInformation(
1770 _In_ PFLT_INSTANCE Instance,
1771 _Out_ PIO_STATUS_BLOCK Iosb,
1772 _Out_writes_bytes_(Length) PVOID FsInformation,
1773 _In_ ULONG Length,
1774 _In_ FS_INFORMATION_CLASS FsInformationClass);
1775
1776_Must_inspect_result_
1777_IRQL_requires_max_(APC_LEVEL)
1778NTSTATUS
1779FLTAPI
1780FltEnumerateFilters(
1781 _Out_writes_to_opt_(FilterListSize,*NumberFiltersReturned) PFLT_FILTER *FilterList,
1782 _In_ ULONG FilterListSize,
1783 _Out_ PULONG NumberFiltersReturned);
1784
1785_Must_inspect_result_
1786_IRQL_requires_max_(APC_LEVEL)
1787NTSTATUS
1788FLTAPI
1789FltEnumerateVolumes(
1790 _In_ PFLT_FILTER Filter,
1791 _Out_writes_to_opt_(VolumeListSize,*NumberVolumesReturned) PFLT_VOLUME *VolumeList,
1792 _In_ ULONG VolumeListSize,
1793 _Out_ PULONG NumberVolumesReturned);
1794
1795_Must_inspect_result_
1796_IRQL_requires_max_(APC_LEVEL)
1797NTSTATUS
1798FLTAPI
1799FltEnumerateInstances(
1800 _In_opt_ PFLT_VOLUME Volume,
1801 _In_opt_ PFLT_FILTER Filter,
1802 _Out_writes_to_opt_(InstanceListSize,*NumberInstancesReturned) PFLT_INSTANCE *InstanceList,
1803 _In_ ULONG InstanceListSize,
1804 _Out_ PULONG NumberInstancesReturned);
1805
1806_Must_inspect_result_
1807_IRQL_requires_max_(APC_LEVEL)
1808NTSTATUS
1809FLTAPI
1810FltEnumerateFilterInformation(
1811 _In_ ULONG Index,
1812 _In_ FILTER_INFORMATION_CLASS InformationClass,
1813 _Out_writes_bytes_to_opt_(BufferSize,*BytesReturned) PVOID Buffer,
1814 _In_ ULONG BufferSize,
1815 _Out_ PULONG BytesReturned);
1816
1817_Must_inspect_result_
1818_IRQL_requires_max_(APC_LEVEL)
1819NTSTATUS
1820FLTAPI
1821FltEnumerateInstanceInformationByFilter(
1822 _In_ PFLT_FILTER Filter,
1823 _In_ ULONG Index,
1824 _In_ INSTANCE_INFORMATION_CLASS InformationClass,
1825 _Out_writes_bytes_to_opt_(BufferSize,*BytesReturned) PVOID Buffer,
1826 _In_ ULONG BufferSize,
1827 _Out_ PULONG BytesReturned);
1828
1829_Must_inspect_result_
1830_IRQL_requires_max_(APC_LEVEL)
1831NTSTATUS
1832FLTAPI
1833FltEnumerateInstanceInformationByVolume(
1834 _In_ PFLT_VOLUME Volume,
1835 _In_ ULONG Index,
1836 _In_ INSTANCE_INFORMATION_CLASS InformationClass,
1837 _Out_writes_bytes_to_opt_(BufferSize,*BytesReturned) PVOID Buffer,
1838 _In_ ULONG BufferSize,
1839 _Out_ PULONG BytesReturned);
1840
1841_Must_inspect_result_
1842_IRQL_requires_max_(APC_LEVEL)
1843NTSTATUS
1844FLTAPI
1845FltEnumerateVolumeInformation(
1846 _In_ PFLT_FILTER Filter,
1847 _In_ ULONG Index,
1848 _In_ FILTER_VOLUME_INFORMATION_CLASS InformationClass,
1849 _Out_writes_bytes_to_opt_(BufferSize,*BytesReturned) PVOID Buffer,
1850 _In_ ULONG BufferSize,
1851 _Out_ PULONG BytesReturned);
1852
1853_Must_inspect_result_
1854_IRQL_requires_max_(DISPATCH_LEVEL)
1855NTSTATUS
1856FLTAPI
1857FltObjectReference(
1858 _Inout_ PVOID FltObject);
1859
1860_IRQL_requires_max_(DISPATCH_LEVEL)
1861VOID
1862FLTAPI
1863FltObjectDereference(
1864 _Inout_ PVOID FltObject);
1865
1866_Must_inspect_result_
1867_IRQL_requires_max_(PASSIVE_LEVEL)
1868NTSTATUS
1869FLTAPI
1870FltCreateCommunicationPort(
1871 _In_ PFLT_FILTER Filter,
1872 _Outptr_ PFLT_PORT *ServerPort,
1873 _In_ POBJECT_ATTRIBUTES ObjectAttributes,
1874 _In_opt_ PVOID ServerPortCookie,
1875 _In_ PFLT_CONNECT_NOTIFY ConnectNotifyCallback,
1876 _In_ PFLT_DISCONNECT_NOTIFY DisconnectNotifyCallback,
1877 _In_opt_ PFLT_MESSAGE_NOTIFY MessageNotifyCallback,
1878 _In_ LONG MaxConnections);
1879
1880_IRQL_requires_max_(PASSIVE_LEVEL)
1881VOID
1882FLTAPI
1883FltCloseCommunicationPort(
1884 _In_ PFLT_PORT ServerPort);
1885
1886_IRQL_requires_max_(PASSIVE_LEVEL)
1887VOID
1888FLTAPI
1889FltCloseClientPort(
1890 _In_ PFLT_FILTER Filter,
1891 _Outptr_ PFLT_PORT *ClientPort);
1892
1893_Must_inspect_result_
1894_IRQL_requires_max_(APC_LEVEL)
1895NTSTATUS
1896FLTAPI
1897FltSendMessage(
1898 _In_ PFLT_FILTER Filter,
1899 _In_ PFLT_PORT *ClientPort,
1900 _In_reads_bytes_(SenderBufferLength) PVOID SenderBuffer,
1901 _In_ ULONG SenderBufferLength,
1902 _Out_writes_bytes_opt_(*ReplyLength) PVOID ReplyBuffer,
1903 _Inout_opt_ PULONG ReplyLength,
1904 _In_opt_ PLARGE_INTEGER Timeout);
1905
1906_Must_inspect_result_
1907_IRQL_requires_max_(APC_LEVEL)
1908NTSTATUS
1909FLTAPI
1910FltBuildDefaultSecurityDescriptor(
1911 _Outptr_ PSECURITY_DESCRIPTOR *SecurityDescriptor,
1912 _In_ ACCESS_MASK DesiredAccess);
1913
1914_IRQL_requires_max_(APC_LEVEL)
1915VOID
1916FLTAPI
1917FltFreeSecurityDescriptor(
1918 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor);
1919
1920_Must_inspect_result_
1921_IRQL_requires_max_(DISPATCH_LEVEL)
1922BOOLEAN
1923FLTAPI
1924FltCancelIo(
1925 _In_ PFLT_CALLBACK_DATA CallbackData);
1926
1927_IRQL_requires_max_(DISPATCH_LEVEL)
1928NTSTATUS
1929FLTAPI
1930FltSetCancelCompletion(
1931 _In_ PFLT_CALLBACK_DATA CallbackData,
1932 _In_ PFLT_COMPLETE_CANCELED_CALLBACK CanceledCallback);
1933
1934_Must_inspect_result_
1935_IRQL_requires_max_(DISPATCH_LEVEL)
1936NTSTATUS
1937FLTAPI
1938FltClearCancelCompletion(
1939 _In_ PFLT_CALLBACK_DATA CallbackData);
1940
1941BOOLEAN
1942FLTAPI
1943FltIsIoCanceled(
1944 _In_ PFLT_CALLBACK_DATA CallbackData);
1945
1946_Must_inspect_result_
1947_IRQL_requires_max_(DISPATCH_LEVEL)
1948PFLT_DEFERRED_IO_WORKITEM
1949FLTAPI
1950FltAllocateDeferredIoWorkItem(VOID);
1951
1952_IRQL_requires_max_(DISPATCH_LEVEL)
1953VOID
1954FLTAPI
1955FltFreeDeferredIoWorkItem(
1956 _In_ PFLT_DEFERRED_IO_WORKITEM FltWorkItem);
1957
1958_Must_inspect_result_
1959_IRQL_requires_max_(DISPATCH_LEVEL)
1960PFLT_GENERIC_WORKITEM
1961FLTAPI
1962FltAllocateGenericWorkItem(VOID);
1963
1964_IRQL_requires_max_(DISPATCH_LEVEL)
1965VOID
1966FLTAPI
1967FltFreeGenericWorkItem(
1968 _In_ PFLT_GENERIC_WORKITEM FltWorkItem);
1969
1970_Must_inspect_result_
1971_IRQL_requires_max_(DISPATCH_LEVEL)
1972NTSTATUS
1973FLTAPI
1974FltQueueDeferredIoWorkItem(
1975 _In_ PFLT_DEFERRED_IO_WORKITEM FltWorkItem,
1976 _In_ PFLT_CALLBACK_DATA Data,
1977 _In_ PFLT_DEFERRED_IO_WORKITEM_ROUTINE WorkerRoutine,
1978 _In_ WORK_QUEUE_TYPE QueueType,
1979 _In_ PVOID Context);
1980
1981_Must_inspect_result_
1982_IRQL_requires_max_(DISPATCH_LEVEL)
1983NTSTATUS
1984FLTAPI
1985FltQueueGenericWorkItem(
1986 _In_ PFLT_GENERIC_WORKITEM FltWorkItem,
1987 _In_ PVOID FltObject,
1988 _In_ PFLT_GENERIC_WORKITEM_ROUTINE WorkerRoutine,
1989 _In_ WORK_QUEUE_TYPE QueueType,
1990 _In_opt_ PVOID Context);
1991
1992_Must_inspect_result_
1993_IRQL_requires_max_(APC_LEVEL)
1994NTSTATUS
1995FLTAPI
1996FltLockUserBuffer(
1997 _In_ PFLT_CALLBACK_DATA CallbackData);
1998
1999NTSTATUS
2000FLTAPI
2001FltDecodeParameters(
2002 _In_ PFLT_CALLBACK_DATA CallbackData,
2003 _Outptr_opt_ PMDL **MdlAddressPointer,
2004 _Outptr_opt_result_bytebuffer_(**Length) PVOID **Buffer,
2005 _Outptr_opt_ PULONG *Length,
2006 _Out_opt_ LOCK_OPERATION *DesiredAccess);
2007
2008PMDL
2009FASTCALL
2010FltGetSwappedBufferMdlAddress(
2011 _In_ PFLT_CALLBACK_DATA CallbackData);
2012
2013VOID
2014FASTCALL
2015FltRetainSwappedBufferMdlAddress(
2016 _In_ PFLT_CALLBACK_DATA CallbackData);
2017
2018NTSTATUS
2019FLTAPI
2020FltCbdqInitialize(
2021 _In_ PFLT_INSTANCE Instance,
2022 _Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq,
2023 _In_ PFLT_CALLBACK_DATA_QUEUE_INSERT_IO CbdqInsertIo,
2024 _In_ PFLT_CALLBACK_DATA_QUEUE_REMOVE_IO CbdqRemoveIo,
2025 _In_ PFLT_CALLBACK_DATA_QUEUE_PEEK_NEXT_IO CbdqPeekNextIo,
2026 _In_ PFLT_CALLBACK_DATA_QUEUE_ACQUIRE CbdqAcquire,
2027 _In_ PFLT_CALLBACK_DATA_QUEUE_RELEASE CbdqRelease,
2028 _In_ PFLT_CALLBACK_DATA_QUEUE_COMPLETE_CANCELED_IO CbdqCompleteCanceledIo);
2029
2030VOID
2031FLTAPI
2032FltCbdqEnable(
2033 _Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq);
2034
2035VOID
2036FLTAPI
2037FltCbdqDisable(
2038 _Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq);
2039
2040_Must_inspect_result_
2041NTSTATUS
2042FLTAPI
2043FltCbdqInsertIo(
2044 _Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq,
2045 _In_ PFLT_CALLBACK_DATA Cbd,
2046 _In_opt_ PFLT_CALLBACK_DATA_QUEUE_IO_CONTEXT Context,
2047 _In_opt_ PVOID InsertContext);
2048
2049_Must_inspect_result_
2050PFLT_CALLBACK_DATA
2051FLTAPI
2052FltCbdqRemoveIo(
2053 _Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq,
2054 _In_ PFLT_CALLBACK_DATA_QUEUE_IO_CONTEXT Context);
2055
2056_Must_inspect_result_
2057PFLT_CALLBACK_DATA
2058FLTAPI
2059FltCbdqRemoveNextIo(
2060 _Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq,
2061 _In_opt_ PVOID PeekContext);
2062
2063_IRQL_requires_max_(APC_LEVEL)
2064VOID
2065FLTAPI
2066FltInitializeOplock(
2067 _Out_ POPLOCK Oplock);
2068
2069_IRQL_requires_max_(APC_LEVEL)
2070VOID
2071FLTAPI
2072FltUninitializeOplock(
2073 _In_ POPLOCK Oplock);
2074
2075_Must_inspect_result_
2076_IRQL_requires_max_(APC_LEVEL)
2077FLT_PREOP_CALLBACK_STATUS
2078FLTAPI
2079FltOplockFsctrl(
2080 _In_ POPLOCK Oplock,
2081 _In_ PFLT_CALLBACK_DATA CallbackData,
2082 _In_ ULONG OpenCount);
2083
2084_Must_inspect_result_
2085_IRQL_requires_max_(APC_LEVEL)
2086FLT_PREOP_CALLBACK_STATUS
2087FLTAPI
2088FltCheckOplock(
2089 _In_ POPLOCK Oplock,
2090 _In_ PFLT_CALLBACK_DATA CallbackData,
2091 _In_opt_ PVOID Context,
2092 _In_opt_ PFLTOPLOCK_WAIT_COMPLETE_ROUTINE WaitCompletionRoutine,
2093 _In_opt_ PFLTOPLOCK_PREPOST_CALLBACKDATA_ROUTINE PrePostCallbackDataRoutine);
2094
2095_IRQL_requires_max_(APC_LEVEL)
2096BOOLEAN
2097FLTAPI
2098FltOplockIsFastIoPossible(
2099 _In_ POPLOCK Oplock);
2100
2101_IRQL_requires_max_(APC_LEVEL)
2102BOOLEAN
2103FLTAPI
2104FltCurrentBatchOplock(
2105 _In_ POPLOCK Oplock);
2106
2107VOID
2108FLTAPI
2109FltInitializeFileLock(
2110 _Out_ PFILE_LOCK FileLock);
2111
2112VOID
2113FLTAPI
2114FltUninitializeFileLock(
2115 _In_ PFILE_LOCK FileLock);
2116
2117_Must_inspect_result_
2118_IRQL_requires_max_(APC_LEVEL)
2119PFILE_LOCK
2120FLTAPI
2121FltAllocateFileLock(
2122 _In_opt_ PFLT_COMPLETE_LOCK_CALLBACK_DATA_ROUTINE CompleteLockCallbackDataRoutine,
2123 _In_opt_ PUNLOCK_ROUTINE UnlockRoutine);
2124
2125_IRQL_requires_max_(APC_LEVEL)
2126VOID
2127FLTAPI
2128FltFreeFileLock(
2129 _In_ PFILE_LOCK FileLock);
2130
2131_Must_inspect_result_
2132_IRQL_requires_max_(APC_LEVEL)
2133FLT_PREOP_CALLBACK_STATUS
2134FLTAPI
2135FltProcessFileLock(
2136 _In_ PFILE_LOCK FileLock,
2137 _In_ PFLT_CALLBACK_DATA CallbackData,
2138 _In_opt_ PVOID Context);
2139
2140_Must_inspect_result_
2141_IRQL_requires_max_(APC_LEVEL)
2142BOOLEAN
2143FLTAPI
2144FltCheckLockForReadAccess(
2145 _In_ PFILE_LOCK FileLock,
2146 _In_ PFLT_CALLBACK_DATA CallbackData);
2147
2148_Must_inspect_result_
2149_IRQL_requires_max_(APC_LEVEL)
2150BOOLEAN
2151FLTAPI
2152FltCheckLockForWriteAccess(
2153 _In_ PFILE_LOCK FileLock,
2154 _In_ PFLT_CALLBACK_DATA CallbackData);
2155
2156_Acquires_lock_(_Global_critical_region_)
2157_IRQL_requires_max_(APC_LEVEL)
2158VOID
2159FLTAPI
2160FltAcquireResourceExclusive(
2161 _Inout_ _Requires_lock_not_held_(*_Curr_) _Acquires_lock_(*_Curr_) PERESOURCE Resource);
2162
2163_Acquires_lock_(_Global_critical_region_)
2164_IRQL_requires_max_(APC_LEVEL)
2165VOID
2166FLTAPI
2167FltAcquireResourceShared(
2168 _Inout_ _Requires_lock_not_held_(*_Curr_) _Acquires_lock_(*_Curr_) PERESOURCE Resource);
2169
2170_Releases_lock_(_Global_critical_region_)
2171_IRQL_requires_max_(DISPATCH_LEVEL)
2172VOID
2173FLTAPI
2174FltReleaseResource(
2175 _Inout_ _Requires_lock_held_(*_Curr_) _Releases_lock_(*_Curr_) PERESOURCE Resource);
2176
2177_IRQL_requires_max_(APC_LEVEL)
2178VOID
2179FLTAPI
2180FltInitializePushLock(
2181 _Out_ PEX_PUSH_LOCK PushLock);
2182
2183_IRQL_requires_max_(APC_LEVEL)
2184VOID
2185FLTAPI
2186FltDeletePushLock(
2187 _In_ PEX_PUSH_LOCK PushLock);
2188
2189_Acquires_lock_(_Global_critical_region_)
2190_IRQL_requires_max_(APC_LEVEL)
2191VOID
2192FLTAPI
2193FltAcquirePushLockExclusive(
2194 _Inout_ _Requires_lock_not_held_(*_Curr_) _Acquires_lock_(*_Curr_) PEX_PUSH_LOCK PushLock);
2195
2196_Acquires_lock_(_Global_critical_region_)
2197_IRQL_requires_max_(APC_LEVEL)
2198VOID
2199FLTAPI
2200FltAcquirePushLockShared(
2201 _Inout_ _Requires_lock_not_held_(*_Curr_) _Acquires_lock_(*_Curr_) PEX_PUSH_LOCK PushLock);
2202
2203_Releases_lock_(_Global_critical_region_)
2204_IRQL_requires_max_(APC_LEVEL)
2205VOID
2206FLTAPI
2207FltReleasePushLock(
2208 _Inout_ _Requires_lock_held_(*_Curr_) _Releases_lock_(*_Curr_) PEX_PUSH_LOCK PushLock);
2209
2210BOOLEAN
2211FLTAPI
2212FltIsOperationSynchronous(
2213 _In_ PFLT_CALLBACK_DATA CallbackData);
2214
2215_IRQL_requires_max_(DISPATCH_LEVEL)
2216BOOLEAN
2217FLTAPI
2218FltIs32bitProcess(
2219 _In_opt_ PFLT_CALLBACK_DATA CallbackData);
2220
2221_IRQL_requires_max_(DISPATCH_LEVEL)
2222PEPROCESS
2223FLTAPI
2224FltGetRequestorProcess(
2225 _In_ PFLT_CALLBACK_DATA CallbackData);
2226
2227_IRQL_requires_max_(DISPATCH_LEVEL)
2228ULONG
2229FLTAPI
2230FltGetRequestorProcessId(
2231 _In_ PFLT_CALLBACK_DATA CallbackData);
2232
2233_IRQL_requires_max_(APC_LEVEL)
2234VOID
2235FLTAPI
2236FltNotifyFilterChangeDirectory(
2237 _Inout_ PNOTIFY_SYNC NotifySync,
2238 _Inout_ PLIST_ENTRY NotifyList,
2239 _In_ PVOID FsContext,
2240 _In_ PSTRING FullDirectoryName,
2241 _In_ BOOLEAN WatchTree,
2242 _In_ BOOLEAN IgnoreBuffer,
2243 _In_ ULONG CompletionFilter,
2244 _In_ PFLT_CALLBACK_DATA NotifyCallbackData,
2245 _In_opt_ PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback,
2246 _In_opt_ PSECURITY_SUBJECT_CONTEXT SubjectContext,
2247 _In_opt_ PFILTER_REPORT_CHANGE FilterCallback);
2248
2249PCHAR
2250FLTAPI
2251FltGetIrpName(
2252 _In_ UCHAR IrpMajorCode);
2253
2254#if FLT_MGR_AFTER_XPSP2
2255
2256_Must_inspect_result_
2257_IRQL_requires_max_(PASSIVE_LEVEL)
2258NTSTATUS
2259FLTAPI
2260FltCreateFileEx(
2261 _In_ PFLT_FILTER Filter,
2262 _In_opt_ PFLT_INSTANCE Instance,
2263 _Out_ PHANDLE FileHandle,
2264 _Outptr_opt_ PFILE_OBJECT *FileObject,
2265 _In_ ACCESS_MASK DesiredAccess,
2266 _In_ POBJECT_ATTRIBUTES ObjectAttributes,
2267 _Out_ PIO_STATUS_BLOCK IoStatusBlock,
2268 _In_opt_ PLARGE_INTEGER AllocationSize,
2269 _In_ ULONG FileAttributes,
2270 _In_ ULONG ShareAccess,
2271 _In_ ULONG CreateDisposition,
2272 _In_ ULONG CreateOptions,
2273 _In_reads_bytes_opt_(EaLength) PVOID EaBuffer,
2274 _In_ ULONG EaLength,
2275 _In_ ULONG Flags);
2276
2277_Must_inspect_result_
2278_IRQL_requires_max_(PASSIVE_LEVEL)
2279NTSTATUS
2280FLTAPI
2281FltOpenVolume(
2282 _In_ PFLT_INSTANCE Instance,
2283 _Out_ PHANDLE VolumeHandle,
2284 _Outptr_opt_ PFILE_OBJECT *VolumeFileObject);
2285
2286_Must_inspect_result_
2287_IRQL_requires_max_(PASSIVE_LEVEL)
2288NTSTATUS
2289FLTAPI
2290FltQueryEaFile(
2291 _In_ PFLT_INSTANCE Instance,
2292 _In_ PFILE_OBJECT FileObject,
2293 _Out_writes_bytes_to_(Length,*LengthReturned) PVOID ReturnedEaData,
2294 _In_ ULONG Length,
2295 _In_ BOOLEAN ReturnSingleEntry,
2296 _In_reads_bytes_opt_(EaListLength) PVOID EaList,
2297 _In_ ULONG EaListLength,
2298 _In_opt_ PULONG EaIndex,
2299 _In_ BOOLEAN RestartScan,
2300 _Out_opt_ PULONG LengthReturned);
2301
2302_Must_inspect_result_
2303_IRQL_requires_max_(PASSIVE_LEVEL)
2304NTSTATUS
2305FLTAPI
2306FltSetEaFile(
2307 _In_ PFLT_INSTANCE Instance,
2308 _In_ PFILE_OBJECT FileObject,
2309 _In_reads_bytes_(Length) PVOID EaBuffer,
2310 _In_ ULONG Length);
2311
2312#endif /* FLT_MGR_AFTER_XPSP2 */
2313
2314#if FLT_MGR_LONGHORN
2315
2316_Must_inspect_result_
2317_IRQL_requires_max_(PASSIVE_LEVEL)
2318NTSTATUS
2319FLTAPI
2320FltCreateFileEx2(
2321 _In_ PFLT_FILTER Filter,
2322 _In_opt_ PFLT_INSTANCE Instance,
2323 _Out_ PHANDLE FileHandle,
2324 _Outptr_opt_ PFILE_OBJECT *FileObject,
2325 _In_ ACCESS_MASK DesiredAccess,
2326 _In_ POBJECT_ATTRIBUTES ObjectAttributes,
2327 _Out_ PIO_STATUS_BLOCK IoStatusBlock,
2328 _In_opt_ PLARGE_INTEGER AllocationSize,
2329 _In_ ULONG FileAttributes,
2330 _In_ ULONG ShareAccess,
2331 _In_ ULONG CreateDisposition,
2332 _In_ ULONG CreateOptions,
2333 _In_reads_bytes_opt_(EaLength) PVOID EaBuffer,
2334 _In_ ULONG EaLength,
2335 _In_ ULONG Flags,
2336 _In_opt_ PIO_DRIVER_CREATE_CONTEXT DriverContext);
2337
2338_Must_inspect_result_
2339_IRQL_requires_max_(PASSIVE_LEVEL)
2340NTSTATUS
2341FLTAPI
2342FltQueryDirectoryFile(
2343 _In_ PFLT_INSTANCE Instance,
2344 _In_ PFILE_OBJECT FileObject,
2345 _Out_writes_bytes_(Length) PVOID FileInformation,
2346 _In_ ULONG Length,
2347 _In_ FILE_INFORMATION_CLASS FileInformationClass,
2348 _In_ BOOLEAN ReturnSingleEntry,
2349 _In_opt_ PUNICODE_STRING FileName,
2350 _In_ BOOLEAN RestartScan,
2351 _Out_opt_ PULONG LengthReturned);
2352
2353_IRQL_requires_max_(APC_LEVEL)
2354BOOLEAN
2355FLTAPI
2356FltSupportsFileContextsEx(
2357 _In_ PFILE_OBJECT FileObject,
2358 _In_opt_ PFLT_INSTANCE Instance);
2359
2360_IRQL_requires_max_(APC_LEVEL)
2361NTSTATUS
2362FLTAPI
2363FltSetTransactionContext(
2364 _In_ PFLT_INSTANCE Instance,
2365 _In_ PKTRANSACTION Transaction,
2366 _In_ FLT_SET_CONTEXT_OPERATION Operation,
2367 _In_ PFLT_CONTEXT NewContext,
2368 _Outptr_opt_ PFLT_CONTEXT *OldContext);
2369
2370_IRQL_requires_max_(APC_LEVEL)
2371NTSTATUS
2372FLTAPI
2373FltDeleteTransactionContext(
2374 _In_ PFLT_INSTANCE Instance,
2375 _In_ PKTRANSACTION Transaction,
2376 _Outptr_opt_ PFLT_CONTEXT *OldContext);
2377
2378_IRQL_requires_max_(APC_LEVEL)
2379NTSTATUS
2380FLTAPI
2381FltGetTransactionContext(
2382 _In_ PFLT_INSTANCE Instance,
2383 _In_ PKTRANSACTION Transaction,
2384 _Outptr_ PFLT_CONTEXT *Context);
2385
2386_IRQL_requires_max_(APC_LEVEL)
2387BOOLEAN
2388FLTAPI
2389FltIsFltMgrVolumeDeviceObject(
2390 _In_ PDEVICE_OBJECT DeviceObject);
2391
2392_IRQL_requires_max_(APC_LEVEL)
2393NTSTATUS
2394FLTAPI
2395FltGetVolumeInformation(
2396 _In_ PFLT_VOLUME Volume,
2397 _In_ FILTER_VOLUME_INFORMATION_CLASS InformationClass,
2398 _Out_writes_bytes_to_opt_(BufferSize,*BytesReturned) PVOID Buffer,
2399 _In_ ULONG BufferSize,
2400 _Out_ PULONG BytesReturned);
2401
2402_IRQL_requires_max_(APC_LEVEL)
2403NTSTATUS
2404FLTAPI
2405FltGetFileSystemType(
2406 _In_ PVOID FltObject,
2407 _Out_ PFLT_FILESYSTEM_TYPE FileSystemType);
2408
2409_Must_inspect_result_
2410_IRQL_requires_max_(PASSIVE_LEVEL)
2411NTSTATUS
2412FLTAPI
2413FltIsVolumeSnapshot(
2414 _In_ PVOID FltObject,
2415 _Out_ PBOOLEAN IsSnapshotVolume);
2416
2417_Must_inspect_result_
2418_When_(((CallbackData!=NULL) && FLT_IS_IRP_OPERATION(CallbackData)), _IRQL_requires_max_(PASSIVE_LEVEL))
2419_When_((!((CallbackData!=NULL) && FLT_IS_IRP_OPERATION(CallbackData))), _IRQL_requires_max_(APC_LEVEL))
2420NTSTATUS
2421FLTAPI
2422FltCancellableWaitForSingleObject(
2423 _In_ PVOID Object,
2424 _In_opt_ PLARGE_INTEGER Timeout,
2425 _In_opt_ PFLT_CALLBACK_DATA CallbackData);
2426
2427_Must_inspect_result_
2428_When_(((CallbackData!=NULL) && FLT_IS_IRP_OPERATION(CallbackData)), _IRQL_requires_max_(PASSIVE_LEVEL))
2429_When_((!((CallbackData!=NULL) && FLT_IS_IRP_OPERATION(CallbackData))), _IRQL_requires_max_(APC_LEVEL))
2430NTSTATUS
2431FLTAPI
2432FltCancellableWaitForMultipleObjects(
2433 _In_ ULONG Count,
2434 _In_reads_(Count) PVOID ObjectArray[],
2435 _In_ WAIT_TYPE WaitType,
2436 _In_opt_ PLARGE_INTEGER Timeout,
2437 _In_opt_ PKWAIT_BLOCK WaitBlockArray,
2438 _In_ PFLT_CALLBACK_DATA CallbackData);
2439
2440_IRQL_requires_max_(DISPATCH_LEVEL)
2441HANDLE
2442FLTAPI
2443FltGetRequestorProcessIdEx(
2444 _In_ PFLT_CALLBACK_DATA CallbackData);
2445
2446_Must_inspect_result_
2447_IRQL_requires_max_(APC_LEVEL)
2448NTSTATUS
2449FLTAPI
2450FltEnlistInTransaction(
2451 _In_ PFLT_INSTANCE Instance,
2452 _In_ PKTRANSACTION Transaction,
2453 _In_ PFLT_CONTEXT TransactionContext,
2454 _In_ NOTIFICATION_MASK NotificationMask);
2455
2456_IRQL_requires_max_(APC_LEVEL)
2457NTSTATUS
2458FLTAPI
2459FltRollbackEnlistment(
2460 _In_ PFLT_INSTANCE Instance,
2461 _In_ PKTRANSACTION Transaction,
2462 _In_opt_ PFLT_CONTEXT TransactionContext);
2463
2464_IRQL_requires_max_(APC_LEVEL)
2465NTSTATUS
2466FLTAPI
2467FltPrePrepareComplete(
2468 _In_ PFLT_INSTANCE Instance,
2469 _In_ PKTRANSACTION Transaction,
2470 _In_opt_ PFLT_CONTEXT TransactionContext);
2471
2472_IRQL_requires_max_(APC_LEVEL)
2473NTSTATUS
2474FLTAPI
2475FltPrepareComplete(
2476 _In_ PFLT_INSTANCE Instance,
2477 _In_ PKTRANSACTION Transaction,
2478 _In_opt_ PFLT_CONTEXT TransactionContext);
2479
2480_IRQL_requires_max_(PASSIVE_LEVEL)
2481NTSTATUS
2482FLTAPI
2483FltCommitComplete(
2484 _In_ PFLT_INSTANCE Instance,
2485 _In_ PKTRANSACTION Transaction,
2486 _In_opt_ PFLT_CONTEXT TransactionContext);
2487
2488_IRQL_requires_max_(APC_LEVEL)
2489NTSTATUS
2490FLTAPI
2491FltCommitFinalizeComplete(
2492 _In_ PFLT_INSTANCE Instance,
2493 _In_ PKTRANSACTION Transaction,
2494 _In_opt_ PFLT_CONTEXT TransactionContext);
2495
2496_IRQL_requires_max_(PASSIVE_LEVEL)
2497NTSTATUS
2498FLTAPI
2499FltRollbackComplete(
2500 _In_ PFLT_INSTANCE Instance,
2501 _In_ PKTRANSACTION Transaction,
2502 _In_opt_ PFLT_CONTEXT TransactionContext);
2503
2504_Must_inspect_result_
2505_IRQL_requires_max_(APC_LEVEL)
2506NTSTATUS
2507FLTAPI
2508FltAllocateExtraCreateParameterList(
2509 _In_ PFLT_FILTER Filter,
2510 _In_ FSRTL_ALLOCATE_ECPLIST_FLAGS Flags,
2511 _Outptr_ PECP_LIST *EcpList);
2512
2513_Must_inspect_result_
2514_IRQL_requires_max_(APC_LEVEL)
2515NTSTATUS
2516FLTAPI
2517FltAllocateExtraCreateParameter(
2518 _In_ PFLT_FILTER Filter,
2519 _In_ LPCGUID EcpType,
2520 ULONG SizeOfContext,
2521 _In_ FSRTL_ALLOCATE_ECP_FLAGS Flags,
2522 _In_opt_ PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback,
2523 _In_ ULONG PoolTag,
2524 _Outptr_ PVOID *EcpContext);
2525
2526_IRQL_requires_max_(APC_LEVEL)
2527VOID
2528FLTAPI
2529FltInitExtraCreateParameterLookasideList(
2530 _In_ PFLT_FILTER Filter,
2531 _Inout_ PVOID Lookaside,
2532 _In_ FSRTL_ECP_LOOKASIDE_FLAGS Flags,
2533 _In_ SIZE_T Size,
2534 _In_ ULONG Tag);
2535
2536_IRQL_requires_max_(APC_LEVEL)
2537VOID
2538FLTAPI
2539FltDeleteExtraCreateParameterLookasideList(
2540 _In_ PFLT_FILTER Filter,
2541 _Inout_ PVOID Lookaside,
2542 _In_ FSRTL_ECP_LOOKASIDE_FLAGS Flags);
2543
2544_Must_inspect_result_
2545_IRQL_requires_max_(APC_LEVEL)
2546NTSTATUS
2547FLTAPI
2548FltAllocateExtraCreateParameterFromLookasideList(
2549 _In_ PFLT_FILTER Filter,
2550 _In_ LPCGUID EcpType,
2551 _In_ ULONG SizeOfContext,
2552 _In_ FSRTL_ALLOCATE_ECP_FLAGS Flags,
2553 _In_opt_ PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback,
2554 _Inout_ PVOID LookasideList,
2555 _Outptr_ PVOID *EcpContext);
2556
2557_IRQL_requires_max_(APC_LEVEL)
2558NTSTATUS
2559FLTAPI
2560FltInsertExtraCreateParameter(
2561 _In_ PFLT_FILTER Filter,
2562 _Inout_ PECP_LIST EcpList,
2563 _Inout_ PVOID EcpContext);
2564
2565_IRQL_requires_max_(APC_LEVEL)
2566NTSTATUS
2567FLTAPI
2568FltFindExtraCreateParameter(
2569 _In_ PFLT_FILTER Filter,
2570 _In_ PECP_LIST EcpList,
2571 _In_ LPCGUID EcpType,
2572 _Outptr_opt_ PVOID *EcpContext,
2573 _Out_opt_ ULONG *EcpContextSize);
2574
2575_IRQL_requires_max_(APC_LEVEL)
2576NTSTATUS
2577FLTAPI
2578FltRemoveExtraCreateParameter(
2579 _In_ PFLT_FILTER Filter,
2580 _Inout_ PECP_LIST EcpList,
2581 _In_ LPCGUID EcpType,
2582 _Outptr_ PVOID *EcpContext,
2583 _Out_opt_ ULONG *EcpContextSize);
2584
2585_IRQL_requires_max_(APC_LEVEL)
2586VOID
2587FLTAPI
2588FltFreeExtraCreateParameterList(
2589 _In_ PFLT_FILTER Filter,
2590 _In_ PECP_LIST EcpList);
2591
2592_IRQL_requires_max_(APC_LEVEL)
2593VOID
2594FLTAPI
2595FltFreeExtraCreateParameter(
2596 _In_ PFLT_FILTER Filter,
2597 _In_ PVOID EcpContext);
2598
2599_IRQL_requires_max_(APC_LEVEL)
2600NTSTATUS
2601FLTAPI
2602FltGetEcpListFromCallbackData(
2603 _In_ PFLT_FILTER Filter,
2604 _In_ PFLT_CALLBACK_DATA CallbackData,
2605 _Outptr_result_maybenull_ PECP_LIST *EcpList);
2606
2607_IRQL_requires_max_(APC_LEVEL)
2608NTSTATUS
2609FLTAPI
2610FltSetEcpListIntoCallbackData(
2611 _In_ PFLT_FILTER Filter,
2612 _In_ PFLT_CALLBACK_DATA CallbackData,
2613 _In_ PECP_LIST EcpList);
2614
2615_IRQL_requires_max_(APC_LEVEL)
2616NTSTATUS
2617FLTAPI
2618FltGetNextExtraCreateParameter(
2619 _In_ PFLT_FILTER Filter,
2620 _In_ PECP_LIST EcpList,
2621 _In_opt_ PVOID CurrentEcpContext,
2622 _Out_opt_ LPGUID NextEcpType,
2623 _Outptr_opt_ PVOID *NextEcpContext,
2624 _Out_opt_ ULONG *NextEcpContextSize);
2625
2626_IRQL_requires_max_(APC_LEVEL)
2627VOID
2628FLTAPI
2629FltAcknowledgeEcp(
2630 _In_ PFLT_FILTER Filter,
2631 _In_ PVOID EcpContext);
2632
2633_IRQL_requires_max_(APC_LEVEL)
2634BOOLEAN
2635FLTAPI
2636FltIsEcpAcknowledged(
2637 _In_ PFLT_FILTER Filter,
2638 _In_ PVOID EcpContext);
2639
2640_IRQL_requires_max_(APC_LEVEL)
2641BOOLEAN
2642FLTAPI
2643FltIsEcpFromUserMode(
2644 _In_ PFLT_FILTER Filter,
2645 _In_ PVOID EcpContext);
2646
2647_IRQL_requires_max_(DISPATCH_LEVEL)
2648NTSTATUS
2649FLTAPI
2650FltRetrieveIoPriorityInfo(
2651 _In_opt_ PFLT_CALLBACK_DATA Data,
2652 _In_opt_ PFILE_OBJECT FileObject,
2653 _In_opt_ PETHREAD Thread,
2654 _Inout_ PIO_PRIORITY_INFO PriorityInfo);
2655
2656_IRQL_requires_max_(DISPATCH_LEVEL)
2657NTSTATUS
2658FLTAPI
2659FltApplyPriorityInfoThread(
2660 _In_ PIO_PRIORITY_INFO InputPriorityInfo,
2661 _Out_opt_ PIO_PRIORITY_INFO OutputPriorityInfo,
2662 _In_ PETHREAD Thread);
2663
2664_IRQL_requires_max_(DISPATCH_LEVEL)
2665IO_PRIORITY_HINT
2666FLTAPI
2667FltGetIoPriorityHint(
2668 _In_ PFLT_CALLBACK_DATA Data);
2669
2670_IRQL_requires_max_(DISPATCH_LEVEL)
2671IO_PRIORITY_HINT
2672FLTAPI
2673FltGetIoPriorityHintFromCallbackData(
2674 _In_ PFLT_CALLBACK_DATA Data);
2675
2676_IRQL_requires_max_(DISPATCH_LEVEL)
2677NTSTATUS
2678FLTAPI
2679FltSetIoPriorityHintIntoCallbackData(
2680 _In_ PFLT_CALLBACK_DATA Data,
2681 _In_ IO_PRIORITY_HINT PriorityHint);
2682
2683_IRQL_requires_max_(DISPATCH_LEVEL)
2684IO_PRIORITY_HINT
2685FLTAPI
2686FltGetIoPriorityHintFromFileObject(
2687 _In_ PFILE_OBJECT FileObject);
2688
2689_Must_inspect_result_
2690_IRQL_requires_max_(DISPATCH_LEVEL)
2691NTSTATUS
2692FLTAPI
2693FltSetIoPriorityHintIntoFileObject(
2694 _In_ PFILE_OBJECT FileObject,
2695 _In_ IO_PRIORITY_HINT PriorityHint);
2696
2697_IRQL_requires_max_(DISPATCH_LEVEL)
2698IO_PRIORITY_HINT
2699FLTAPI
2700FltGetIoPriorityHintFromThread(
2701 _In_ PETHREAD Thread);
2702
2703_IRQL_requires_max_(DISPATCH_LEVEL)
2704NTSTATUS
2705FLTAPI
2706FltSetIoPriorityHintIntoThread(
2707 _In_ PETHREAD Thread,
2708 _In_ IO_PRIORITY_HINT PriorityHint);
2709
2710#endif /* FLT_MGR_LONGHORN */
2711
2712#if FLT_MGR_WIN7
2713
2714_Must_inspect_result_
2715_IRQL_requires_max_(APC_LEVEL)
2716NTSTATUS
2717FLTAPI
2718FltAllocateCallbackDataEx(
2719 _In_ PFLT_INSTANCE Instance,
2720 _In_opt_ PFILE_OBJECT FileObject,
2721 _In_ FLT_ALLOCATE_CALLBACK_DATA_FLAGS Flags,
2722 _Outptr_ PFLT_CALLBACK_DATA *RetNewCallbackData);
2723
2724_Must_inspect_result_
2725_IRQL_requires_max_(DPC_LEVEL)
2726PVOID
2727FLTAPI
2728FltGetNewSystemBufferAddress(
2729 _In_ PFLT_CALLBACK_DATA CallbackData);
2730
2731_Must_inspect_result_
2732_IRQL_requires_max_(APC_LEVEL)
2733FLT_PREOP_CALLBACK_STATUS
2734FLTAPI
2735FltCheckOplockEx(
2736 _In_ POPLOCK Oplock,
2737 _In_ PFLT_CALLBACK_DATA CallbackData,
2738 _In_ ULONG Flags,
2739 _In_opt_ PVOID Context,
2740 _In_opt_ PFLTOPLOCK_WAIT_COMPLETE_ROUTINE WaitCompletionRoutine,
2741 _In_opt_ PFLTOPLOCK_PREPOST_CALLBACKDATA_ROUTINE PrePostCallbackDataRoutine);
2742
2743_IRQL_requires_max_(APC_LEVEL)
2744BOOLEAN
2745FLTAPI
2746FltCurrentOplock(
2747 _In_ POPLOCK Oplock);
2748
2749_IRQL_requires_max_(APC_LEVEL)
2750BOOLEAN
2751FLTAPI
2752FltCurrentOplockH(
2753 _In_ POPLOCK Oplock);
2754
2755_IRQL_requires_max_(APC_LEVEL)
2756FLT_PREOP_CALLBACK_STATUS
2757FLTAPI
2758FltOplockBreakH(
2759 _In_ POPLOCK Oplock,
2760 _In_ PFLT_CALLBACK_DATA CallbackData,
2761 _In_ ULONG Flags,
2762 _In_opt_ PVOID Context,
2763 _In_opt_ PFLTOPLOCK_WAIT_COMPLETE_ROUTINE WaitCompletionRoutine,
2764 _In_opt_ PFLTOPLOCK_PREPOST_CALLBACKDATA_ROUTINE PrePostCallbackDataRoutine);
2765
2766_IRQL_requires_max_(APC_LEVEL)
2767FLT_PREOP_CALLBACK_STATUS
2768FLTAPI
2769FltOplockBreakToNone(
2770 _In_ POPLOCK Oplock,
2771 _In_ PFLT_CALLBACK_DATA CallbackData,
2772 _In_opt_ PVOID Context,
2773 _In_opt_ PFLTOPLOCK_WAIT_COMPLETE_ROUTINE WaitCompletionRoutine,
2774 _In_opt_ PFLTOPLOCK_PREPOST_CALLBACKDATA_ROUTINE PrePostCallbackDataRoutine);
2775
2776_IRQL_requires_max_(APC_LEVEL)
2777FLT_PREOP_CALLBACK_STATUS
2778FLTAPI
2779FltOplockBreakToNoneEx(
2780 _In_ POPLOCK Oplock,
2781 _In_ PFLT_CALLBACK_DATA CallbackData,
2782 _In_ ULONG Flags,
2783 _In_opt_ PVOID Context,
2784 _In_opt_ PFLTOPLOCK_WAIT_COMPLETE_ROUTINE WaitCompletionRoutine,
2785 _In_opt_ PFLTOPLOCK_PREPOST_CALLBACKDATA_ROUTINE PrePostCallbackDataRoutine);
2786
2787_IRQL_requires_max_(APC_LEVEL)
2788BOOLEAN
2789FLTAPI
2790FltOplockIsSharedRequest(
2791 _In_ PFLT_CALLBACK_DATA CallbackData);
2792
2793_Must_inspect_result_
2794_IRQL_requires_max_(APC_LEVEL)
2795FLT_PREOP_CALLBACK_STATUS
2796FLTAPI
2797FltOplockFsctrlEx(
2798 _In_ POPLOCK Oplock,
2799 _In_ PFLT_CALLBACK_DATA CallbackData,
2800 _In_ ULONG OpenCount,
2801 _In_ ULONG Flags);
2802
2803BOOLEAN
2804FLTAPI
2805FltOplockKeysEqual(
2806 _In_opt_ PFILE_OBJECT Fo1,
2807 _In_opt_ PFILE_OBJECT Fo2);
2808
2809_Must_inspect_result_
2810_IRQL_requires_max_(APC_LEVEL)
2811NTSTATUS
2812FLTAPI
2813FltGetRequestorSessionId(
2814 _In_ PFLT_CALLBACK_DATA CallbackData,
2815 _Out_ PULONG SessionId);
2816
2817_IRQL_requires_max_(DISPATCH_LEVEL)
2818NTSTATUS
2819FLTAPI
2820FltAdjustDeviceStackSizeForIoRedirection(
2821 _In_ PFLT_INSTANCE SourceInstance,
2822 _In_ PFLT_INSTANCE TargetInstance,
2823 _Out_opt_ PBOOLEAN SourceDeviceStackSizeModified);
2824
2825_IRQL_requires_max_(DISPATCH_LEVEL)
2826NTSTATUS
2827FLTAPI
2828FltIsIoRedirectionAllowed(
2829 _In_ PFLT_INSTANCE SourceInstance,
2830 _In_ PFLT_INSTANCE TargetInstance,
2831 _Out_ PBOOLEAN RedirectionAllowed);
2832
2833_IRQL_requires_max_(DISPATCH_LEVEL)
2834NTSTATUS
2835FLTAPI
2836FltIsIoRedirectionAllowedForOperation(
2837 _In_ PFLT_CALLBACK_DATA Data,
2838 _In_ PFLT_INSTANCE TargetInstance,
2839 _Out_ PBOOLEAN RedirectionAllowedThisIo,
2840 _Out_opt_ PBOOLEAN RedirectionAllowedAllIo);
2841
2842#endif /* FLT_MGR_WIN7 */
2843
2844#endif /* FLT_MGR_BASELINE */
2845
2846#ifdef __cplusplus
2847} /* extern "C" */
2848#endif
2849
2850#endif /* __FLTKERNEL__ */