4 * This file is part of the ReactOS DDK package.
7 * Amine Khaldi (amine.khaldi@reactos.org)
9 * THIS SOFTWARE IS NOT COPYRIGHTED
11 * This source code is offered for use in the public domain. You may
12 * use, modify or distribute it freely.
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.
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))
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))
39 #define FLT_MGR_LONGHORN (NTDDI_VERSION >= NTDDI_VISTA)
40 #define FLT_MGR_WIN7 (NTDDI_VERSION >= NTDDI_WIN7)
43 #include <fltuserstructures.h>
49 #define FLT_ASSERT(_e) NT_ASSERT(_e)
50 #define FLT_ASSERTMSG(_m, _e) NT_ASSERTMSG(_m, _e)
52 #define FLT_ASSERT(_e) ASSERT(_e)
53 #define FLT_ASSERTMSG(_m, _e) ASSERTMSG(_m, _e)
54 #endif /* FLT_MGR_LONGHORN */
56 #define Add2Ptr(P,I) ((PVOID)((PUCHAR)(P) + (I)))
57 #define PtrOffset(B,O) ((ULONG)((ULONG_PTR)(O) - (ULONG_PTR)(B)))
59 #define ROUND_TO_SIZE(_length, _alignment) \
60 ((((ULONG_PTR)(_length)) + ((_alignment)-1)) & ~(ULONG_PTR) ((_alignment) - 1))
62 #define IS_ALIGNED(_pointer, _alignment) \
63 ((((ULONG_PTR) (_pointer)) & ((_alignment) - 1)) == 0)
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
82 #define NULL_CONTEXT ((PFLT_CONTEXT)NULL)
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
;
89 typedef PVOID PFLT_CONTEXT
;
92 typedef struct _KTRANSACTION
*PKTRANSACTION
;
95 #if !defined(_AMD64_) && !defined(_IA64_) && !defined(_ARM_)
99 typedef union _FLT_PARAMETERS
{
101 PIO_SECURITY_CONTEXT SecurityContext
;
103 USHORT POINTER_ALIGNMENT FileAttributes
;
105 ULONG POINTER_ALIGNMENT EaLength
;
107 LARGE_INTEGER AllocationSize
;
110 PIO_SECURITY_CONTEXT SecurityContext
;
112 USHORT POINTER_ALIGNMENT Reserved
;
117 PIO_SECURITY_CONTEXT SecurityContext
;
119 USHORT POINTER_ALIGNMENT Reserved
;
125 ULONG POINTER_ALIGNMENT Key
;
126 LARGE_INTEGER ByteOffset
;
132 ULONG POINTER_ALIGNMENT Key
;
133 LARGE_INTEGER ByteOffset
;
139 FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass
;
141 } QueryFileInformation
;
144 FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass
;
145 PFILE_OBJECT ParentOfTarget
;
146 _ANONYMOUS_UNION
union {
147 _ANONYMOUS_STRUCT
struct {
148 BOOLEAN ReplaceIfExists
;
155 } SetFileInformation
;
160 ULONG POINTER_ALIGNMENT EaIndex
;
171 FS_INFORMATION_CLASS POINTER_ALIGNMENT FsInformationClass
;
173 } QueryVolumeInformation
;
176 FS_INFORMATION_CLASS POINTER_ALIGNMENT FsInformationClass
;
178 } SetVolumeInformation
;
182 PUNICODE_STRING FileName
;
183 FILE_INFORMATION_CLASS FileInformationClass
;
184 ULONG POINTER_ALIGNMENT FileIndex
;
185 PVOID DirectoryBuffer
;
190 ULONG POINTER_ALIGNMENT CompletionFilter
;
191 ULONG POINTER_ALIGNMENT Spare1
;
192 ULONG POINTER_ALIGNMENT Spare2
;
193 PVOID DirectoryBuffer
;
200 PDEVICE_OBJECT DeviceObject
;
203 ULONG OutputBufferLength
;
204 ULONG POINTER_ALIGNMENT InputBufferLength
;
205 ULONG POINTER_ALIGNMENT FsControlCode
;
208 ULONG OutputBufferLength
;
209 ULONG POINTER_ALIGNMENT InputBufferLength
;
210 ULONG POINTER_ALIGNMENT FsControlCode
;
213 PMDL OutputMdlAddress
;
216 ULONG OutputBufferLength
;
217 ULONG POINTER_ALIGNMENT InputBufferLength
;
218 ULONG POINTER_ALIGNMENT FsControlCode
;
222 ULONG OutputBufferLength
;
223 ULONG POINTER_ALIGNMENT InputBufferLength
;
224 ULONG POINTER_ALIGNMENT FsControlCode
;
225 PVOID InputSystemBuffer
;
227 PMDL OutputMdlAddress
;
232 ULONG OutputBufferLength
;
233 ULONG POINTER_ALIGNMENT InputBufferLength
;
234 ULONG POINTER_ALIGNMENT IoControlCode
;
237 ULONG OutputBufferLength
;
238 ULONG POINTER_ALIGNMENT InputBufferLength
;
239 ULONG POINTER_ALIGNMENT IoControlCode
;
242 PMDL OutputMdlAddress
;
245 ULONG OutputBufferLength
;
246 ULONG POINTER_ALIGNMENT InputBufferLength
;
247 ULONG POINTER_ALIGNMENT IoControlCode
;
251 ULONG OutputBufferLength
;
252 ULONG POINTER_ALIGNMENT InputBufferLength
;
253 ULONG POINTER_ALIGNMENT IoControlCode
;
254 PVOID InputSystemBuffer
;
256 PMDL OutputMdlAddress
;
259 ULONG OutputBufferLength
;
260 ULONG POINTER_ALIGNMENT InputBufferLength
;
261 ULONG POINTER_ALIGNMENT IoControlCode
;
267 PLARGE_INTEGER Length
;
268 ULONG POINTER_ALIGNMENT Key
;
269 LARGE_INTEGER ByteOffset
;
271 BOOLEAN FailImmediately
;
272 BOOLEAN ExclusiveLock
;
275 SECURITY_INFORMATION SecurityInformation
;
276 ULONG POINTER_ALIGNMENT Length
;
277 PVOID SecurityBuffer
;
281 SECURITY_INFORMATION SecurityInformation
;
282 PSECURITY_DESCRIPTOR SecurityDescriptor
;
285 ULONG_PTR ProviderId
;
293 PFILE_GET_QUOTA_INFORMATION SidList
;
305 PCM_RESOURCE_LIST AllocatedResources
;
306 PCM_RESOURCE_LIST AllocatedResourcesTranslated
;
309 DEVICE_RELATION_TYPE Type
;
310 } QueryDeviceRelations
;
312 CONST GUID
*InterfaceType
;
315 PINTERFACE Interface
;
316 PVOID InterfaceSpecificData
;
319 PDEVICE_CAPABILITIES Capabilities
;
320 } DeviceCapabilities
;
322 PIO_RESOURCE_REQUIREMENTS_LIST IoResourceRequirementList
;
323 } FilterResourceRequirements
;
328 ULONG POINTER_ALIGNMENT Length
;
334 BUS_QUERY_ID_TYPE IdType
;
337 DEVICE_TEXT_TYPE DeviceTextType
;
338 LCID POINTER_ALIGNMENT LocaleId
;
343 DEVICE_USAGE_NOTIFICATION_TYPE POINTER_ALIGNMENT Type
;
347 FS_FILTER_SECTION_SYNC_TYPE SyncType
;
348 ULONG PageProtection
;
349 } AcquireForSectionSynchronization
;
351 PLARGE_INTEGER EndingOffset
;
352 PERESOURCE
*ResourceToRelease
;
353 } AcquireForModifiedPageWriter
;
355 PERESOURCE ResourceToRelease
;
356 } ReleaseForModifiedPageWriter
;
358 LARGE_INTEGER FileOffset
;
360 ULONG POINTER_ALIGNMENT LockKey
;
361 BOOLEAN POINTER_ALIGNMENT CheckForReadOperation
;
362 } FastIoCheckIfPossible
;
365 PFILE_NETWORK_OPEN_INFORMATION NetworkInformation
;
368 LARGE_INTEGER FileOffset
;
369 ULONG POINTER_ALIGNMENT Length
;
370 ULONG POINTER_ALIGNMENT Key
;
377 LARGE_INTEGER FileOffset
;
378 ULONG POINTER_ALIGNMENT Length
;
379 ULONG POINTER_ALIGNMENT Key
;
383 LARGE_INTEGER FileOffset
;
395 LARGE_INTEGER Argument6
;
397 } FLT_PARAMETERS
, *PFLT_PARAMETERS
;
399 #if !defined(_AMD64_) && !defined(_IA64_) && !defined(_ARM_)
403 typedef struct _FLT_IO_PARAMETER_BLOCK
{
407 UCHAR OperationFlags
;
409 PFILE_OBJECT TargetFileObject
;
410 PFLT_INSTANCE TargetInstance
;
411 FLT_PARAMETERS Parameters
;
412 } FLT_IO_PARAMETER_BLOCK
, *PFLT_IO_PARAMETER_BLOCK
;
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
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)
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))
436 typedef USHORT FLT_CONTEXT_TYPE
;
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
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)
450 typedef ULONG FLT_CALLBACK_DATA_FLAGS
;
453 typedef ULONG FLT_ALLOCATE_CALLBACK_DATA_FLAGS
;
454 #define FLT_ALLOCATE_CALLBACK_DATA_PREALLOCATE_ALL_MEMORY 0x00000001
455 #endif /* FLT_MGR_WIN7 */
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];
468 PVOID FilterContext
[4];
470 KPROCESSOR_MODE RequestorMode
;
471 } FLT_CALLBACK_DATA
, *PFLT_CALLBACK_DATA
;
473 typedef struct _FLT_RELATED_OBJECTS
{
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
;
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
;
493 (FLTAPI
*PFLT_CONTEXT_CLEANUP_CALLBACK
)(
494 _In_ PFLT_CONTEXT Context
,
495 _In_ FLT_CONTEXT_TYPE ContextType
);
498 (FLTAPI
*PFLT_CONTEXT_ALLOCATE_CALLBACK
)(
499 _In_ POOL_TYPE PoolType
,
501 _In_ FLT_CONTEXT_TYPE ContextType
);
504 (FLTAPI
*PFLT_CONTEXT_FREE_CALLBACK
)(
506 _In_ FLT_CONTEXT_TYPE ContextType
);
508 typedef USHORT FLT_CONTEXT_REGISTRATION_FLAGS
;
510 #define FLTFL_CONTEXT_REGISTRATION_NO_EXACT_SIZE_MATCH 0x0001
512 #define FLT_VARIABLE_SIZED_CONTEXTS ((SIZE_T)-1)
514 typedef struct _FLT_CONTEXT_REGISTRATION
{
515 FLT_CONTEXT_TYPE ContextType
;
516 FLT_CONTEXT_REGISTRATION_FLAGS Flags
;
517 PFLT_CONTEXT_CLEANUP_CALLBACK ContextCleanupCallback
;
520 PFLT_CONTEXT_ALLOCATE_CALLBACK ContextAllocateCallback
;
521 PFLT_CONTEXT_FREE_CALLBACK ContextFreeCallback
;
523 } FLT_CONTEXT_REGISTRATION
, *PFLT_CONTEXT_REGISTRATION
, const *PCFLT_CONTEXT_REGISTRATION
;
525 typedef ULONG FLT_INSTANCE_SETUP_FLAGS
;
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
533 #define FLTFL_INSTANCE_SETUP_DETACHED_VOLUME 0x00000008
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)
541 #endif /* FLT_MGR_LONGHORN */
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
);
550 typedef ULONG FLT_INSTANCE_QUERY_TEARDOWN_FLAGS
;
553 (FLTAPI
*PFLT_INSTANCE_QUERY_TEARDOWN_CALLBACK
)(
554 _In_ PCFLT_RELATED_OBJECTS FltObjects
,
555 _In_ FLT_INSTANCE_QUERY_TEARDOWN_FLAGS Flags
);
557 typedef ULONG FLT_INSTANCE_TEARDOWN_FLAGS
;
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
566 (FLTAPI
*PFLT_INSTANCE_TEARDOWN_CALLBACK
)(
567 _In_ PCFLT_RELATED_OBJECTS FltObjects
,
568 _In_ FLT_INSTANCE_TEARDOWN_FLAGS Reason
);
570 typedef enum _FLT_PREOP_CALLBACK_STATUS
{
571 FLT_PREOP_SUCCESS_WITH_CALLBACK
,
572 FLT_PREOP_SUCCESS_NO_CALLBACK
,
574 FLT_PREOP_DISALLOW_FASTIO
,
576 FLT_PREOP_SYNCHRONIZE
577 } FLT_PREOP_CALLBACK_STATUS
, *PFLT_PREOP_CALLBACK_STATUS
;
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
);
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
;
590 typedef ULONG FLT_POST_OPERATION_FLAGS
;
592 #define FLTFL_POST_OPERATION_DRAINING 0x00000001
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
);
601 typedef ULONG FLT_OPERATION_REGISTRATION_FLAGS
;
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
607 typedef struct _FLT_OPERATION_REGISTRATION
{
609 FLT_OPERATION_REGISTRATION_FLAGS Flags
;
610 PFLT_PRE_OPERATION_CALLBACK PreOperation
;
611 PFLT_POST_OPERATION_CALLBACK PostOperation
;
613 } FLT_OPERATION_REGISTRATION
, *PFLT_OPERATION_REGISTRATION
;
615 typedef struct _FLT_TAG_DATA_BUFFER
{
617 USHORT TagDataLength
;
618 USHORT UnparsedNameLength
;
619 _ANONYMOUS_UNION
union {
621 USHORT SubstituteNameOffset
;
622 USHORT SubstituteNameLength
;
623 USHORT PrintNameOffset
;
624 USHORT PrintNameLength
;
627 } SymbolicLinkReparseBuffer
;
629 USHORT SubstituteNameOffset
;
630 USHORT SubstituteNameLength
;
631 USHORT PrintNameOffset
;
632 USHORT PrintNameLength
;
634 } MountPointReparseBuffer
;
637 } GenericReparseBuffer
;
641 } GenericGUIDReparseBuffer
;
643 } FLT_TAG_DATA_BUFFER
, *PFLT_TAG_DATA_BUFFER
;
645 #define FLT_TAG_DATA_BUFFER_HEADER_SIZE FIELD_OFFSET(FLT_TAG_DATA_BUFFER, GenericReparseBuffer)
647 typedef ULONG FLT_FILTER_UNLOAD_FLAGS
;
649 #define FLTFL_FILTER_UNLOAD_MANDATORY 0x00000001
652 (FLTAPI
*PFLT_FILTER_UNLOAD_CALLBACK
)(
653 FLT_FILTER_UNLOAD_FLAGS Flags
);
655 typedef struct _FLT_NAME_CONTROL
{
657 } FLT_NAME_CONTROL
, *PFLT_NAME_CONTROL
;
659 typedef ULONG FLT_FILE_NAME_OPTIONS
;
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
);
670 typedef ULONG FLT_NORMALIZE_NAME_FLAGS
;
672 #define FLTFL_NORMALIZE_NAME_CASE_SENSITIVE 0x01
673 #define FLTFL_NORMALIZE_NAME_DESTINATION_FILE_NAME 0x02
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
);
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
);
699 (FLTAPI
*PFLT_NORMALIZE_CONTEXT_CLEANUP
)(
700 _In_opt_ PVOID
*NormalizationContext
);
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 */
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
716 #define FLT_REGISTRATION_VERSION FLT_REGISTRATION_VERSION_0202
718 #define FLT_REGISTRATION_VERSION FLT_REGISTRATION_VERSION_0200
721 typedef ULONG FLT_REGISTRATION_FLAGS
;
723 #define FLTFL_REGISTRATION_DO_NOT_SUPPORT_SERVICE_STOP 0x00000001
724 #define FLTFL_REGISTRATION_SUPPORT_NPFS_MSFS 0x00000002
726 typedef struct _FLT_REGISTRATION
{
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
;
741 PFLT_TRANSACTION_NOTIFICATION_CALLBACK TransactionNotificationCallback
;
742 PFLT_NORMALIZE_NAME_COMPONENT_EX NormalizeNameComponentExCallback
;
743 #endif /* FLT_MGR_LONGHORN */
744 } FLT_REGISTRATION
, *PFLT_REGISTRATION
;
747 (FLTAPI
*PFLT_COMPLETED_ASYNC_IO_CALLBACK
)(
748 _In_ PFLT_CALLBACK_DATA CallbackData
,
749 _In_ PFLT_CONTEXT Context
);
751 typedef ULONG FLT_IO_OPERATION_FLAGS
;
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
758 #define FLTFL_IO_OPERATION_SYNCHRONOUS_PAGING 0x00000008
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
);
768 typedef ULONG FLT_FILE_NAME_OPTIONS
;
770 #define FLT_VALID_FILE_NAME_FORMATS 0x000000ff
772 #define FLT_FILE_NAME_NORMALIZED 0x01
773 #define FLT_FILE_NAME_OPENED 0x02
774 #define FLT_FILE_NAME_SHORT 0x03
776 #define FltGetFileNameFormat( _NameOptions ) ((_NameOptions) & FLT_VALID_FILE_NAME_FORMATS)
778 #define FLT_VALID_FILE_NAME_QUERY_METHODS 0x0000ff00
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
785 #define FltGetFileNameQueryMethod( _NameOptions ) ((_NameOptions) & FLT_VALID_FILE_NAME_QUERY_METHODS)
787 #define FLT_VALID_FILE_NAME_FLAGS 0xff000000
789 #define FLT_FILE_NAME_REQUEST_FROM_CURRENT_PROVIDER 0x01000000
790 #define FLT_FILE_NAME_DO_NOT_CACHE 0x02000000
792 #if FLT_MGR_AFTER_XPSP2
793 #define FLT_FILE_NAME_ALLOW_QUERY_ON_REPARSE 0x04000000
796 typedef USHORT FLT_FILE_NAME_PARSED_FLAGS
;
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
803 typedef struct _FLT_FILE_NAME_INFORMATION
{
805 FLT_FILE_NAME_PARSED_FLAGS NamesParsed
;
806 FLT_FILE_NAME_OPTIONS Format
;
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
;
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
;
821 typedef struct _FLT_VOLUME_PROPERTIES
{
822 DEVICE_TYPE DeviceType
;
823 ULONG DeviceCharacteristics
;
824 ULONG DeviceObjectFlags
;
825 ULONG AlignmentRequirement
;
828 UNICODE_STRING FileSystemDriverName
;
829 UNICODE_STRING FileSystemDeviceName
;
830 UNICODE_STRING RealDeviceName
;
831 } FLT_VOLUME_PROPERTIES
, *PFLT_VOLUME_PROPERTIES
;
833 #define FLT_PORT_CONNECT 0x0001
834 #define FLT_PORT_ALL_ACCESS (FLT_PORT_CONNECT | STANDARD_RIGHTS_ALL)
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
);
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
);
854 (FLTAPI
*PFLT_DISCONNECT_NOTIFY
)(
855 _In_opt_ PVOID ConnectionCookie
);
858 (FLTAPI
*PFLT_COMPLETE_CANCELED_CALLBACK
)(
859 _In_ PFLT_CALLBACK_DATA CallbackData
);
861 typedef struct _FLT_DEFERRED_IO_WORKITEM
*PFLT_DEFERRED_IO_WORKITEM
;
862 typedef struct _FLT_GENERIC_WORKITEM
*PFLT_GENERIC_WORKITEM
;
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
);
871 (FLTAPI
*PFLT_GENERIC_WORKITEM_ROUTINE
)(
872 _In_ PFLT_GENERIC_WORKITEM FltWorkItem
,
873 _In_ PVOID FltObject
,
874 _In_opt_ PVOID Context
);
876 typedef IO_CSQ_IRP_CONTEXT FLT_CALLBACK_DATA_QUEUE_IO_CONTEXT
, *PFLT_CALLBACK_DATA_QUEUE_IO_CONTEXT
;
878 typedef struct _FLT_CALLBACK_DATA_QUEUE FLT_CALLBACK_DATA_QUEUE
, *PFLT_CALLBACK_DATA_QUEUE
;
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
);
887 (FLTAPI
*PFLT_CALLBACK_DATA_QUEUE_REMOVE_IO
)(
888 _Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq
,
889 _In_ PFLT_CALLBACK_DATA Cbd
);
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
);
898 (FLTAPI
*PFLT_CALLBACK_DATA_QUEUE_ACQUIRE
)(
899 _Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq
,
900 _Out_opt_ PKIRQL Irql
);
903 (FLTAPI
*PFLT_CALLBACK_DATA_QUEUE_RELEASE
)(
904 _Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq
,
905 _In_opt_ KIRQL Irql
);
908 (FLTAPI
*PFLT_CALLBACK_DATA_QUEUE_COMPLETE_CANCELED_IO
)(
909 _Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq
,
910 _Inout_ PFLT_CALLBACK_DATA Cbd
);
912 typedef enum _FLT_CALLBACK_DATA_QUEUE_FLAGS FLT_CALLBACK_DATA_QUEUE_FLAGS
;
914 typedef struct _FLT_CALLBACK_DATA_QUEUE
{
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
;
927 (*PFLT_COMPLETE_LOCK_CALLBACK_DATA_ROUTINE
)(
928 _In_opt_ PVOID Context
,
929 _In_ PFLT_CALLBACK_DATA CallbackData
);
932 (FLTAPI
*PFLTOPLOCK_WAIT_COMPLETE_ROUTINE
)(
933 _In_ PFLT_CALLBACK_DATA CallbackData
,
934 _In_opt_ PVOID Context
);
937 (FLTAPI
*PFLTOPLOCK_PREPOST_CALLBACKDATA_ROUTINE
)(
938 _In_ PFLT_CALLBACK_DATA CallbackData
,
939 _In_opt_ PVOID Context
);
943 FltSetCallbackDataDirty(
944 _Inout_ PFLT_CALLBACK_DATA Data
);
948 FltClearCallbackDataDirty(
949 _Inout_ PFLT_CALLBACK_DATA Data
);
953 FltIsCallbackDataDirty(
954 _In_ PFLT_CALLBACK_DATA Data
);
956 _Must_inspect_result_
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
);
967 _Must_inspect_result_
968 _IRQL_requires_max_(APC_LEVEL
)
971 FltCheckAndGrowNameControl(
972 _Inout_ PFLT_NAME_CONTROL NameCtrl
,
973 _In_ USHORT NewSize
);
975 _Must_inspect_result_
976 _IRQL_requires_max_(APC_LEVEL
)
979 FltPurgeFileNameInformationCache(
980 _In_ PFLT_INSTANCE Instance
,
981 _In_opt_ PFILE_OBJECT FileObject
);
983 _Must_inspect_result_
984 _IRQL_requires_max_(APC_LEVEL
)
988 _In_ PDRIVER_OBJECT Driver
,
989 _In_ CONST FLT_REGISTRATION
*Registration
,
990 _Outptr_ PFLT_FILTER
*RetFilter
);
992 _IRQL_requires_max_(APC_LEVEL
)
996 _In_ PFLT_FILTER Filter
);
998 _Must_inspect_result_
999 _IRQL_requires_max_(APC_LEVEL
)
1003 _In_ PFLT_FILTER Filter
);
1005 _Must_inspect_result_
1006 _IRQL_requires_max_(APC_LEVEL
)
1009 FltGetRoutineAddress(
1010 _In_ PCSTR FltMgrRoutineName
);
1012 _When_(CallbackStatus
==FLT_PREOP_COMPLETE
, _IRQL_requires_max_(DISPATCH_LEVEL
))
1013 _When_(CallbackStatus
!=FLT_PREOP_COMPLETE
, _IRQL_requires_max_(APC_LEVEL
))
1016 FltCompletePendedPreOperation(
1017 _In_ PFLT_CALLBACK_DATA CallbackData
,
1018 _In_ FLT_PREOP_CALLBACK_STATUS CallbackStatus
,
1019 _In_opt_ PVOID Context
);
1021 _IRQL_requires_max_(DISPATCH_LEVEL
)
1024 FltCompletePendedPostOperation(
1025 _In_ PFLT_CALLBACK_DATA CallbackData
);
1027 _Must_inspect_result_
1028 _IRQL_requires_max_(DISPATCH_LEVEL
)
1031 FltRequestOperationStatusCallback(
1032 _In_ PFLT_CALLBACK_DATA Data
,
1033 _In_ PFLT_GET_OPERATION_STATUS_CALLBACK CallbackRoutine
,
1034 _In_opt_ PVOID RequesterContext
);
1036 _When_((PoolType
==NonPagedPoolNx
), _IRQL_requires_max_(DISPATCH_LEVEL
))
1037 _When_((PoolType
!=NonPagedPoolNx
), _IRQL_requires_max_(APC_LEVEL
))
1040 FltAllocatePoolAlignedWithTag(
1041 _In_ PFLT_INSTANCE Instance
,
1042 _In_ POOL_TYPE PoolType
,
1043 _In_ SIZE_T NumberOfBytes
,
1046 _IRQL_requires_max_(DISPATCH_LEVEL
)
1049 FltFreePoolAlignedWithTag(
1050 _In_ PFLT_INSTANCE Instance
,
1054 _Must_inspect_result_
1055 _IRQL_requires_max_(APC_LEVEL
)
1058 FltGetFileNameInformation(
1059 _In_ PFLT_CALLBACK_DATA CallbackData
,
1060 _In_ FLT_FILE_NAME_OPTIONS NameOptions
,
1061 _Outptr_ PFLT_FILE_NAME_INFORMATION
*FileNameInformation
);
1063 _Must_inspect_result_
1064 _IRQL_requires_max_(APC_LEVEL
)
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
);
1073 _IRQL_requires_max_(APC_LEVEL
)
1076 FltReleaseFileNameInformation(
1077 _In_ PFLT_FILE_NAME_INFORMATION FileNameInformation
);
1079 _IRQL_requires_max_(APC_LEVEL
)
1082 FltReferenceFileNameInformation(
1083 _In_ PFLT_FILE_NAME_INFORMATION FileNameInformation
);
1085 _IRQL_requires_max_(APC_LEVEL
)
1089 _In_ PCUNICODE_STRING FileName
,
1090 _Inout_opt_ PUNICODE_STRING Extension
,
1091 _Inout_opt_ PUNICODE_STRING Stream
,
1092 _Inout_opt_ PUNICODE_STRING FinalComponent
);
1094 _IRQL_requires_max_(APC_LEVEL
)
1097 FltParseFileNameInformation(
1098 _Inout_ PFLT_FILE_NAME_INFORMATION FileNameInformation
);
1100 _Must_inspect_result_
1101 _IRQL_requires_max_(APC_LEVEL
)
1105 _In_ PFLT_CALLBACK_DATA CallbackData
,
1106 _In_ PFLT_FILE_NAME_INFORMATION FileNameInformation
,
1107 _Outptr_result_maybenull_ PFLT_FILE_NAME_INFORMATION
*RetTunneledFileNameInformation
);
1109 _Must_inspect_result_
1110 _IRQL_requires_max_(APC_LEVEL
)
1114 _In_ PFLT_VOLUME Volume
,
1115 _Inout_opt_ PUNICODE_STRING VolumeName
,
1116 _Out_opt_ PULONG BufferSizeNeeded
);
1118 _Must_inspect_result_
1119 _IRQL_requires_max_(APC_LEVEL
)
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
);
1131 _Must_inspect_result_
1132 _IRQL_requires_max_(APC_LEVEL
)
1136 _In_ PFILE_OBJECT FileObject
,
1137 _In_ PFLT_INSTANCE Instance
,
1138 _Out_ PBOOLEAN IsDirectory
);
1140 _Must_inspect_result_
1141 _IRQL_requires_max_(PASSIVE_LEVEL
)
1145 _In_ PCUNICODE_STRING FilterName
);
1147 _Must_inspect_result_
1148 _IRQL_requires_max_(PASSIVE_LEVEL
)
1152 _In_ PCUNICODE_STRING FilterName
);
1154 _Must_inspect_result_
1155 _IRQL_requires_max_(APC_LEVEL
)
1159 _Inout_ PFLT_FILTER Filter
,
1160 _Inout_ PFLT_VOLUME Volume
,
1161 _In_opt_ PCUNICODE_STRING InstanceName
,
1162 _Outptr_opt_result_maybenull_ PFLT_INSTANCE
*RetInstance
);
1164 _Must_inspect_result_
1165 _IRQL_requires_max_(APC_LEVEL
)
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
);
1175 _Must_inspect_result_
1176 _IRQL_requires_max_(APC_LEVEL
)
1180 _Inout_ PFLT_FILTER Filter
,
1181 _Inout_ PFLT_VOLUME Volume
,
1182 _In_opt_ PCUNICODE_STRING InstanceName
);
1184 _Must_inspect_result_
1185 _IRQL_requires_max_(APC_LEVEL
)
1188 FltAllocateCallbackData(
1189 _In_ PFLT_INSTANCE Instance
,
1190 _In_opt_ PFILE_OBJECT FileObject
,
1191 _Outptr_ PFLT_CALLBACK_DATA
*RetNewCallbackData
);
1193 _IRQL_requires_max_(DISPATCH_LEVEL
)
1196 FltFreeCallbackData(
1197 _In_ PFLT_CALLBACK_DATA CallbackData
);
1199 _IRQL_requires_max_(APC_LEVEL
)
1202 FltReuseCallbackData(
1203 _Inout_ PFLT_CALLBACK_DATA CallbackData
);
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
))
1209 FltPerformSynchronousIo(
1210 _Inout_ PFLT_CALLBACK_DATA CallbackData
);
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
))
1217 FltPerformAsynchronousIo(
1218 _Inout_ PFLT_CALLBACK_DATA CallbackData
,
1219 _In_ PFLT_COMPLETED_ASYNC_IO_CALLBACK CallbackRoutine
,
1220 _In_ PVOID CallbackContext
);
1222 _Must_inspect_result_
1223 _IRQL_requires_max_(PASSIVE_LEVEL
)
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
,
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
))
1248 _In_ PFLT_INSTANCE InitiatingInstance
,
1249 _In_ PFILE_OBJECT FileObject
,
1250 _In_opt_ PLARGE_INTEGER ByteOffset
,
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
);
1258 _Must_inspect_result_
1259 _IRQL_requires_max_(PASSIVE_LEVEL
)
1263 _In_ PFLT_INSTANCE InitiatingInstance
,
1264 _In_ PFILE_OBJECT FileObject
,
1266 _In_opt_ GUID
*Guid
,
1267 _In_reads_bytes_(DataBufferLength
) PVOID DataBuffer
,
1268 _In_ USHORT DataBufferLength
);
1270 _Must_inspect_result_
1271 _IRQL_requires_max_(PASSIVE_LEVEL
)
1275 _In_ PFLT_INSTANCE InitiatingInstance
,
1276 _In_ PFILE_OBJECT FileObject
,
1278 _In_opt_ GUID
*Guid
);
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
))
1286 _In_ PFLT_INSTANCE InitiatingInstance
,
1287 _In_ PFILE_OBJECT FileObject
,
1288 _In_opt_ PLARGE_INTEGER ByteOffset
,
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
);
1296 _Must_inspect_result_
1297 _IRQL_requires_max_(PASSIVE_LEVEL
)
1300 FltQueryInformationFile(
1301 _In_ PFLT_INSTANCE Instance
,
1302 _In_ PFILE_OBJECT FileObject
,
1303 _Out_writes_bytes_to_(Length
,*LengthReturned
) PVOID FileInformation
,
1305 _In_ FILE_INFORMATION_CLASS FileInformationClass
,
1306 _Out_opt_ PULONG LengthReturned
);
1308 _Must_inspect_result_
1309 _IRQL_requires_max_(PASSIVE_LEVEL
)
1312 FltSetInformationFile(
1313 _In_ PFLT_INSTANCE Instance
,
1314 _In_ PFILE_OBJECT FileObject
,
1315 _In_reads_bytes_(Length
) PVOID FileInformation
,
1317 _In_ FILE_INFORMATION_CLASS FileInformationClass
);
1319 _Must_inspect_result_
1320 _IRQL_requires_max_(PASSIVE_LEVEL
)
1323 FltQueryVolumeInformationFile(
1324 _In_ PFLT_INSTANCE Instance
,
1325 _In_ PFILE_OBJECT FileObject
,
1326 _Out_writes_bytes_to_(Length
,*LengthReturned
) PVOID FsInformation
,
1328 _In_ FS_INFORMATION_CLASS FsInformationClass
,
1329 _Out_opt_ PULONG LengthReturned
);
1331 _Must_inspect_result_
1332 _IRQL_requires_max_(PASSIVE_LEVEL
)
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
,
1341 _Out_opt_ PULONG LengthNeeded
);
1343 _Must_inspect_result_
1344 _IRQL_requires_max_(PASSIVE_LEVEL
)
1347 FltSetSecurityObject(
1348 _In_ PFLT_INSTANCE Instance
,
1349 _In_ PFILE_OBJECT FileObject
,
1350 _In_ SECURITY_INFORMATION SecurityInformation
,
1351 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor
);
1353 _Must_inspect_result_
1354 _IRQL_requires_max_(PASSIVE_LEVEL
)
1358 _In_ PFLT_INSTANCE Instance
,
1359 _In_ PFILE_OBJECT FileObject
);
1361 _Must_inspect_result_
1362 _IRQL_requires_max_(PASSIVE_LEVEL
)
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
);
1375 _Must_inspect_result_
1376 _IRQL_requires_max_(PASSIVE_LEVEL
)
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
);
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
))
1394 FltReissueSynchronousIo(
1395 _In_ PFLT_INSTANCE InitiatingInstance
,
1396 _In_ PFLT_CALLBACK_DATA CallbackData
);
1398 _IRQL_requires_max_(PASSIVE_LEVEL
)
1402 _In_ HANDLE FileHandle
);
1404 _IRQL_requires_max_(PASSIVE_LEVEL
)
1408 _In_ PFLT_INSTANCE Instance
,
1409 _In_ PFILE_OBJECT FileObject
);
1411 _Must_inspect_result_
1412 _IRQL_requires_max_(PASSIVE_LEVEL
)
1415 FltCreateSystemVolumeInformationFolder(
1416 _In_ PFLT_INSTANCE Instance
);
1418 _IRQL_requires_max_(APC_LEVEL
)
1421 FltSupportsFileContexts(
1422 _In_ PFILE_OBJECT FileObject
);
1424 _IRQL_requires_max_(APC_LEVEL
)
1427 FltSupportsStreamContexts(
1428 _In_ PFILE_OBJECT FileObject
);
1430 _IRQL_requires_max_(APC_LEVEL
)
1433 FltSupportsStreamHandleContexts(
1434 _In_ PFILE_OBJECT FileObject
);
1436 _Must_inspect_result_
1437 _IRQL_requires_max_(APC_LEVEL
)
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
);
1447 _IRQL_requires_max_(APC_LEVEL
)
1451 _In_ PCFLT_RELATED_OBJECTS FltObjects
,
1452 _In_ FLT_CONTEXT_TYPE DesiredContexts
,
1453 _Out_ PFLT_RELATED_CONTEXTS Contexts
);
1455 _IRQL_requires_max_(APC_LEVEL
)
1459 _In_ PFLT_RELATED_CONTEXTS Contexts
);
1461 _IRQL_requires_max_(APC_LEVEL
)
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
);
1470 _IRQL_requires_max_(APC_LEVEL
)
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
);
1479 _IRQL_requires_max_(APC_LEVEL
)
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
);
1489 _IRQL_requires_max_(APC_LEVEL
)
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
);
1499 _IRQL_requires_max_(APC_LEVEL
)
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
);
1509 _IRQL_requires_max_(APC_LEVEL
)
1513 _In_ PFLT_CONTEXT Context
);
1515 _IRQL_requires_max_(APC_LEVEL
)
1518 FltDeleteVolumeContext(
1519 _In_ PFLT_FILTER Filter
,
1520 _In_ PFLT_VOLUME Volume
,
1521 _Outptr_opt_result_maybenull_ PFLT_CONTEXT
*OldContext
);
1523 _IRQL_requires_max_(APC_LEVEL
)
1526 FltDeleteInstanceContext(
1527 _In_ PFLT_INSTANCE Instance
,
1528 _Outptr_opt_result_maybenull_ PFLT_CONTEXT
*OldContext
);
1530 _IRQL_requires_max_(APC_LEVEL
)
1533 FltDeleteFileContext(
1534 _In_ PFLT_INSTANCE Instance
,
1535 _In_ PFILE_OBJECT FileObject
,
1536 _Outptr_opt_result_maybenull_ PFLT_CONTEXT
*OldContext
);
1538 _IRQL_requires_max_(APC_LEVEL
)
1541 FltDeleteStreamContext(
1542 _In_ PFLT_INSTANCE Instance
,
1543 _In_ PFILE_OBJECT FileObject
,
1544 _Outptr_opt_result_maybenull_ PFLT_CONTEXT
*OldContext
);
1546 _IRQL_requires_max_(APC_LEVEL
)
1549 FltDeleteStreamHandleContext(
1550 _In_ PFLT_INSTANCE Instance
,
1551 _In_ PFILE_OBJECT FileObject
,
1552 _Outptr_opt_result_maybenull_ PFLT_CONTEXT
*OldContext
);
1554 _IRQL_requires_max_(APC_LEVEL
)
1557 FltGetVolumeContext(
1558 _In_ PFLT_FILTER Filter
,
1559 _In_ PFLT_VOLUME Volume
,
1560 _Outptr_ PFLT_CONTEXT
*Context
);
1562 _IRQL_requires_max_(APC_LEVEL
)
1565 FltGetInstanceContext(
1566 _In_ PFLT_INSTANCE Instance
,
1567 _Outptr_ PFLT_CONTEXT
*Context
);
1569 _IRQL_requires_max_(APC_LEVEL
)
1573 _In_ PFLT_INSTANCE Instance
,
1574 _In_ PFILE_OBJECT FileObject
,
1575 _Outptr_ PFLT_CONTEXT
*Context
);
1577 _IRQL_requires_max_(APC_LEVEL
)
1580 FltGetStreamContext(
1581 _In_ PFLT_INSTANCE Instance
,
1582 _In_ PFILE_OBJECT FileObject
,
1583 _Outptr_ PFLT_CONTEXT
*Context
);
1585 _IRQL_requires_max_(APC_LEVEL
)
1588 FltGetStreamHandleContext(
1589 _In_ PFLT_INSTANCE Instance
,
1590 _In_ PFILE_OBJECT FileObject
,
1591 _Outptr_ PFLT_CONTEXT
*Context
);
1593 _IRQL_requires_max_(DISPATCH_LEVEL
)
1596 FltReferenceContext(
1597 _In_ PFLT_CONTEXT Context
);
1599 _IRQL_requires_max_(DISPATCH_LEVEL
)
1603 _In_ PFLT_CONTEXT Context
);
1605 _IRQL_requires_max_(APC_LEVEL
)
1608 FltGetFilterFromName(
1609 _In_ PCUNICODE_STRING FilterName
,
1610 _Outptr_ PFLT_FILTER
*RetFilter
);
1612 _IRQL_requires_max_(PASSIVE_LEVEL
)
1615 FltGetVolumeFromName(
1616 _In_ PFLT_FILTER Filter
,
1617 _In_ PCUNICODE_STRING VolumeName
,
1618 _Outptr_ PFLT_VOLUME
*RetVolume
);
1620 _IRQL_requires_max_(APC_LEVEL
)
1623 FltGetVolumeInstanceFromName(
1624 _In_opt_ PFLT_FILTER Filter
,
1625 _In_ PFLT_VOLUME Volume
,
1626 _In_opt_ PCUNICODE_STRING InstanceName
,
1627 _Outptr_ PFLT_INSTANCE
*RetInstance
);
1629 _IRQL_requires_max_(APC_LEVEL
)
1632 FltGetVolumeFromInstance(
1633 _In_ PFLT_INSTANCE Instance
,
1634 _Outptr_ PFLT_VOLUME
*RetVolume
);
1636 _IRQL_requires_max_(APC_LEVEL
)
1639 FltGetFilterFromInstance(
1640 _In_ PFLT_INSTANCE Instance
,
1641 _Outptr_ PFLT_FILTER
*RetFilter
);
1643 _IRQL_requires_max_(APC_LEVEL
)
1646 FltGetVolumeFromFileObject(
1647 _In_ PFLT_FILTER Filter
,
1648 _In_ PFILE_OBJECT FileObject
,
1649 _Outptr_ PFLT_VOLUME
*RetVolume
);
1651 _IRQL_requires_max_(APC_LEVEL
)
1654 FltGetVolumeFromDeviceObject(
1655 _In_ PFLT_FILTER Filter
,
1656 _In_ PDEVICE_OBJECT DeviceObject
,
1657 _Outptr_ PFLT_VOLUME
*RetVolume
);
1659 _IRQL_requires_max_(DISPATCH_LEVEL
)
1663 _In_ PFLT_VOLUME Volume
,
1664 _Outptr_ PDEVICE_OBJECT
*DeviceObject
);
1666 _IRQL_requires_max_(DISPATCH_LEVEL
)
1669 FltGetDiskDeviceObject(
1670 _In_ PFLT_VOLUME Volume
,
1671 _Outptr_ PDEVICE_OBJECT
*DiskDeviceObject
);
1673 _IRQL_requires_max_(APC_LEVEL
)
1676 FltGetLowerInstance(
1677 _In_ PFLT_INSTANCE CurrentInstance
,
1678 _Outptr_ PFLT_INSTANCE
*LowerInstance
);
1680 _IRQL_requires_max_(APC_LEVEL
)
1683 FltGetUpperInstance(
1684 _In_ PFLT_INSTANCE CurrentInstance
,
1685 _Outptr_ PFLT_INSTANCE
*UpperInstance
);
1687 _IRQL_requires_max_(APC_LEVEL
)
1691 _In_ PFLT_VOLUME Volume
,
1692 _Outptr_ PFLT_INSTANCE
*Instance
);
1694 _IRQL_requires_max_(APC_LEVEL
)
1697 FltGetBottomInstance(
1698 _In_ PFLT_VOLUME Volume
,
1699 _Outptr_ PFLT_INSTANCE
*Instance
);
1703 FltCompareInstanceAltitudes(
1704 _In_ PFLT_INSTANCE Instance1
,
1705 _In_ PFLT_INSTANCE Instance2
);
1707 _IRQL_requires_max_(APC_LEVEL
)
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
);
1717 _IRQL_requires_max_(APC_LEVEL
)
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
);
1727 _IRQL_requires_max_(APC_LEVEL
)
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
);
1736 _Must_inspect_result_
1737 _IRQL_requires_max_(PASSIVE_LEVEL
)
1740 FltIsVolumeWritable(
1741 _In_ PVOID FltObject
,
1742 _Out_ PBOOLEAN IsWritable
);
1744 _Must_inspect_result_
1745 _IRQL_requires_max_(PASSIVE_LEVEL
)
1748 FltGetVolumeGuidName(
1749 _In_ PFLT_VOLUME Volume
,
1750 _Out_ PUNICODE_STRING VolumeGuidName
,
1751 _Out_opt_ PULONG BufferSizeNeeded
);
1753 _Must_inspect_result_
1754 _IRQL_requires_max_(PASSIVE_LEVEL
)
1757 FltQueryVolumeInformation(
1758 _In_ PFLT_INSTANCE Instance
,
1759 _Out_ PIO_STATUS_BLOCK Iosb
,
1760 _Out_writes_bytes_(Length
) PVOID FsInformation
,
1762 _In_ FS_INFORMATION_CLASS FsInformationClass
);
1764 _Must_inspect_result_
1765 _IRQL_requires_max_(PASSIVE_LEVEL
)
1768 FltSetVolumeInformation(
1769 _In_ PFLT_INSTANCE Instance
,
1770 _Out_ PIO_STATUS_BLOCK Iosb
,
1771 _Out_writes_bytes_(Length
) PVOID FsInformation
,
1773 _In_ FS_INFORMATION_CLASS FsInformationClass
);
1775 _Must_inspect_result_
1776 _IRQL_requires_max_(APC_LEVEL
)
1779 FltEnumerateFilters(
1780 _Out_writes_to_opt_(FilterListSize
,*NumberFiltersReturned
) PFLT_FILTER
*FilterList
,
1781 _In_ ULONG FilterListSize
,
1782 _Out_ PULONG NumberFiltersReturned
);
1784 _Must_inspect_result_
1785 _IRQL_requires_max_(APC_LEVEL
)
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
);
1794 _Must_inspect_result_
1795 _IRQL_requires_max_(APC_LEVEL
)
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
);
1805 _Must_inspect_result_
1806 _IRQL_requires_max_(APC_LEVEL
)
1809 FltEnumerateFilterInformation(
1811 _In_ FILTER_INFORMATION_CLASS InformationClass
,
1812 _Out_writes_bytes_to_opt_(BufferSize
,*BytesReturned
) PVOID Buffer
,
1813 _In_ ULONG BufferSize
,
1814 _Out_ PULONG BytesReturned
);
1816 _Must_inspect_result_
1817 _IRQL_requires_max_(APC_LEVEL
)
1820 FltEnumerateInstanceInformationByFilter(
1821 _In_ PFLT_FILTER Filter
,
1823 _In_ INSTANCE_INFORMATION_CLASS InformationClass
,
1824 _Out_writes_bytes_to_opt_(BufferSize
,*BytesReturned
) PVOID Buffer
,
1825 _In_ ULONG BufferSize
,
1826 _Out_ PULONG BytesReturned
);
1828 _Must_inspect_result_
1829 _IRQL_requires_max_(APC_LEVEL
)
1832 FltEnumerateInstanceInformationByVolume(
1833 _In_ PFLT_VOLUME Volume
,
1835 _In_ INSTANCE_INFORMATION_CLASS InformationClass
,
1836 _Out_writes_bytes_to_opt_(BufferSize
,*BytesReturned
) PVOID Buffer
,
1837 _In_ ULONG BufferSize
,
1838 _Out_ PULONG BytesReturned
);
1840 _Must_inspect_result_
1841 _IRQL_requires_max_(APC_LEVEL
)
1844 FltEnumerateVolumeInformation(
1845 _In_ PFLT_FILTER Filter
,
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
);
1852 _Must_inspect_result_
1853 _IRQL_requires_max_(DISPATCH_LEVEL
)
1857 _Inout_ PVOID FltObject
);
1859 _IRQL_requires_max_(DISPATCH_LEVEL
)
1862 FltObjectDereference(
1863 _Inout_ PVOID FltObject
);
1865 _Must_inspect_result_
1866 _IRQL_requires_max_(PASSIVE_LEVEL
)
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
);
1879 _IRQL_requires_max_(PASSIVE_LEVEL
)
1882 FltCloseCommunicationPort(
1883 _In_ PFLT_PORT ServerPort
);
1885 _IRQL_requires_max_(PASSIVE_LEVEL
)
1889 _In_ PFLT_FILTER Filter
,
1890 _Outptr_ PFLT_PORT
*ClientPort
);
1892 _Must_inspect_result_
1893 _IRQL_requires_max_(APC_LEVEL
)
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
);
1905 _Must_inspect_result_
1906 _IRQL_requires_max_(APC_LEVEL
)
1909 FltBuildDefaultSecurityDescriptor(
1910 _Outptr_ PSECURITY_DESCRIPTOR
*SecurityDescriptor
,
1911 _In_ ACCESS_MASK DesiredAccess
);
1913 _IRQL_requires_max_(APC_LEVEL
)
1916 FltFreeSecurityDescriptor(
1917 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor
);
1919 _Must_inspect_result_
1920 _IRQL_requires_max_(DISPATCH_LEVEL
)
1924 _In_ PFLT_CALLBACK_DATA CallbackData
);
1926 _IRQL_requires_max_(DISPATCH_LEVEL
)
1929 FltSetCancelCompletion(
1930 _In_ PFLT_CALLBACK_DATA CallbackData
,
1931 _In_ PFLT_COMPLETE_CANCELED_CALLBACK CanceledCallback
);
1933 _Must_inspect_result_
1934 _IRQL_requires_max_(DISPATCH_LEVEL
)
1937 FltClearCancelCompletion(
1938 _In_ PFLT_CALLBACK_DATA CallbackData
);
1943 _In_ PFLT_CALLBACK_DATA CallbackData
);
1945 _Must_inspect_result_
1946 _IRQL_requires_max_(DISPATCH_LEVEL
)
1947 PFLT_DEFERRED_IO_WORKITEM
1949 FltAllocateDeferredIoWorkItem(VOID
);
1951 _IRQL_requires_max_(DISPATCH_LEVEL
)
1954 FltFreeDeferredIoWorkItem(
1955 _In_ PFLT_DEFERRED_IO_WORKITEM FltWorkItem
);
1957 _Must_inspect_result_
1958 _IRQL_requires_max_(DISPATCH_LEVEL
)
1959 PFLT_GENERIC_WORKITEM
1961 FltAllocateGenericWorkItem(VOID
);
1963 _IRQL_requires_max_(DISPATCH_LEVEL
)
1966 FltFreeGenericWorkItem(
1967 _In_ PFLT_GENERIC_WORKITEM FltWorkItem
);
1969 _Must_inspect_result_
1970 _IRQL_requires_max_(DISPATCH_LEVEL
)
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
);
1980 _Must_inspect_result_
1981 _IRQL_requires_max_(DISPATCH_LEVEL
)
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
);
1991 _Must_inspect_result_
1992 _IRQL_requires_max_(APC_LEVEL
)
1996 _In_ PFLT_CALLBACK_DATA CallbackData
);
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
);
2009 FltGetSwappedBufferMdlAddress(
2010 _In_ PFLT_CALLBACK_DATA CallbackData
);
2014 FltRetainSwappedBufferMdlAddress(
2015 _In_ PFLT_CALLBACK_DATA CallbackData
);
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
);
2032 _Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq
);
2037 _Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq
);
2039 _Must_inspect_result_
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
);
2048 _Must_inspect_result_
2052 _Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq
,
2053 _In_ PFLT_CALLBACK_DATA_QUEUE_IO_CONTEXT Context
);
2055 _Must_inspect_result_
2058 FltCbdqRemoveNextIo(
2059 _Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq
,
2060 _In_opt_ PVOID PeekContext
);
2062 _IRQL_requires_max_(APC_LEVEL
)
2065 FltInitializeOplock(
2066 _Out_ POPLOCK Oplock
);
2068 _IRQL_requires_max_(APC_LEVEL
)
2071 FltUninitializeOplock(
2072 _In_ POPLOCK Oplock
);
2074 _Must_inspect_result_
2075 _IRQL_requires_max_(APC_LEVEL
)
2076 FLT_PREOP_CALLBACK_STATUS
2079 _In_ POPLOCK Oplock
,
2080 _In_ PFLT_CALLBACK_DATA CallbackData
,
2081 _In_ ULONG OpenCount
);
2083 _Must_inspect_result_
2084 _IRQL_requires_max_(APC_LEVEL
)
2085 FLT_PREOP_CALLBACK_STATUS
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
);
2094 _IRQL_requires_max_(APC_LEVEL
)
2097 FltOplockIsFastIoPossible(
2098 _In_ POPLOCK Oplock
);
2100 _IRQL_requires_max_(APC_LEVEL
)
2103 FltCurrentBatchOplock(
2104 _In_ POPLOCK Oplock
);
2108 FltInitializeFileLock(
2109 _Out_ PFILE_LOCK FileLock
);
2113 FltUninitializeFileLock(
2114 _In_ PFILE_LOCK FileLock
);
2116 _Must_inspect_result_
2117 _IRQL_requires_max_(APC_LEVEL
)
2120 FltAllocateFileLock(
2121 _In_opt_ PFLT_COMPLETE_LOCK_CALLBACK_DATA_ROUTINE CompleteLockCallbackDataRoutine
,
2122 _In_opt_ PUNLOCK_ROUTINE UnlockRoutine
);
2124 _IRQL_requires_max_(APC_LEVEL
)
2128 _In_ PFILE_LOCK FileLock
);
2130 _Must_inspect_result_
2131 _IRQL_requires_max_(APC_LEVEL
)
2132 FLT_PREOP_CALLBACK_STATUS
2135 _In_ PFILE_LOCK FileLock
,
2136 _In_ PFLT_CALLBACK_DATA CallbackData
,
2137 _In_opt_ PVOID Context
);
2139 _Must_inspect_result_
2140 _IRQL_requires_max_(APC_LEVEL
)
2143 FltCheckLockForReadAccess(
2144 _In_ PFILE_LOCK FileLock
,
2145 _In_ PFLT_CALLBACK_DATA CallbackData
);
2147 _Must_inspect_result_
2148 _IRQL_requires_max_(APC_LEVEL
)
2151 FltCheckLockForWriteAccess(
2152 _In_ PFILE_LOCK FileLock
,
2153 _In_ PFLT_CALLBACK_DATA CallbackData
);
2155 _Acquires_lock_(_Global_critical_region_
)
2156 _IRQL_requires_max_(APC_LEVEL
)
2159 FltAcquireResourceExclusive(
2160 _Inout_
_Requires_lock_not_held_(*_Curr_
) _Acquires_lock_(*_Curr_
) PERESOURCE Resource
);
2162 _Acquires_lock_(_Global_critical_region_
)
2163 _IRQL_requires_max_(APC_LEVEL
)
2166 FltAcquireResourceShared(
2167 _Inout_
_Requires_lock_not_held_(*_Curr_
) _Acquires_lock_(*_Curr_
) PERESOURCE Resource
);
2169 _Releases_lock_(_Global_critical_region_
)
2170 _IRQL_requires_max_(DISPATCH_LEVEL
)
2174 _Inout_
_Requires_lock_held_(*_Curr_
) _Releases_lock_(*_Curr_
) PERESOURCE Resource
);
2176 _IRQL_requires_max_(APC_LEVEL
)
2179 FltInitializePushLock(
2180 _Out_ PEX_PUSH_LOCK PushLock
);
2182 _IRQL_requires_max_(APC_LEVEL
)
2186 _In_ PEX_PUSH_LOCK PushLock
);
2188 _Acquires_lock_(_Global_critical_region_
)
2189 _IRQL_requires_max_(APC_LEVEL
)
2192 FltAcquirePushLockExclusive(
2193 _Inout_
_Requires_lock_not_held_(*_Curr_
) _Acquires_lock_(*_Curr_
) PEX_PUSH_LOCK PushLock
);
2195 _Acquires_lock_(_Global_critical_region_
)
2196 _IRQL_requires_max_(APC_LEVEL
)
2199 FltAcquirePushLockShared(
2200 _Inout_
_Requires_lock_not_held_(*_Curr_
) _Acquires_lock_(*_Curr_
) PEX_PUSH_LOCK PushLock
);
2202 _Releases_lock_(_Global_critical_region_
)
2203 _IRQL_requires_max_(APC_LEVEL
)
2207 _Inout_
_Requires_lock_held_(*_Curr_
) _Releases_lock_(*_Curr_
) PEX_PUSH_LOCK PushLock
);
2211 FltIsOperationSynchronous(
2212 _In_ PFLT_CALLBACK_DATA CallbackData
);
2214 _IRQL_requires_max_(DISPATCH_LEVEL
)
2218 _In_opt_ PFLT_CALLBACK_DATA CallbackData
);
2220 _IRQL_requires_max_(DISPATCH_LEVEL
)
2223 FltGetRequestorProcess(
2224 _In_ PFLT_CALLBACK_DATA CallbackData
);
2226 _IRQL_requires_max_(DISPATCH_LEVEL
)
2229 FltGetRequestorProcessId(
2230 _In_ PFLT_CALLBACK_DATA CallbackData
);
2232 _IRQL_requires_max_(APC_LEVEL
)
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
);
2251 _In_ UCHAR IrpMajorCode
);
2253 #if FLT_MGR_AFTER_XPSP2
2255 _Must_inspect_result_
2256 _IRQL_requires_max_(PASSIVE_LEVEL
)
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
,
2276 _Must_inspect_result_
2277 _IRQL_requires_max_(PASSIVE_LEVEL
)
2281 _In_ PFLT_INSTANCE Instance
,
2282 _Out_ PHANDLE VolumeHandle
,
2283 _Outptr_opt_ PFILE_OBJECT
*VolumeFileObject
);
2285 _Must_inspect_result_
2286 _IRQL_requires_max_(PASSIVE_LEVEL
)
2290 _In_ PFLT_INSTANCE Instance
,
2291 _In_ PFILE_OBJECT FileObject
,
2292 _Out_writes_bytes_to_(Length
,*LengthReturned
) PVOID ReturnedEaData
,
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
);
2301 _Must_inspect_result_
2302 _IRQL_requires_max_(PASSIVE_LEVEL
)
2306 _In_ PFLT_INSTANCE Instance
,
2307 _In_ PFILE_OBJECT FileObject
,
2308 _In_reads_bytes_(Length
) PVOID EaBuffer
,
2311 #endif /* FLT_MGR_AFTER_XPSP2 */
2313 #if FLT_MGR_LONGHORN
2315 _Must_inspect_result_
2316 _IRQL_requires_max_(PASSIVE_LEVEL
)
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
,
2335 _In_opt_ PIO_DRIVER_CREATE_CONTEXT DriverContext
);
2337 _Must_inspect_result_
2338 _IRQL_requires_max_(PASSIVE_LEVEL
)
2341 FltQueryDirectoryFile(
2342 _In_ PFLT_INSTANCE Instance
,
2343 _In_ PFILE_OBJECT FileObject
,
2344 _Out_writes_bytes_(Length
) PVOID FileInformation
,
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
);
2352 _IRQL_requires_max_(APC_LEVEL
)
2355 FltSupportsFileContextsEx(
2356 _In_ PFILE_OBJECT FileObject
,
2357 _In_opt_ PFLT_INSTANCE Instance
);
2359 _IRQL_requires_max_(APC_LEVEL
)
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
);
2369 _IRQL_requires_max_(APC_LEVEL
)
2372 FltDeleteTransactionContext(
2373 _In_ PFLT_INSTANCE Instance
,
2374 _In_ PKTRANSACTION Transaction
,
2375 _Outptr_opt_ PFLT_CONTEXT
*OldContext
);
2377 _IRQL_requires_max_(APC_LEVEL
)
2380 FltGetTransactionContext(
2381 _In_ PFLT_INSTANCE Instance
,
2382 _In_ PKTRANSACTION Transaction
,
2383 _Outptr_ PFLT_CONTEXT
*Context
);
2385 _IRQL_requires_max_(APC_LEVEL
)
2388 FltIsFltMgrVolumeDeviceObject(
2389 _In_ PDEVICE_OBJECT DeviceObject
);
2391 _IRQL_requires_max_(APC_LEVEL
)
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
);
2401 _IRQL_requires_max_(APC_LEVEL
)
2404 FltGetFileSystemType(
2405 _In_ PVOID FltObject
,
2406 _Out_ PFLT_FILESYSTEM_TYPE FileSystemType
);
2408 _Must_inspect_result_
2409 _IRQL_requires_max_(PASSIVE_LEVEL
)
2412 FltIsVolumeSnapshot(
2413 _In_ PVOID FltObject
,
2414 _Out_ PBOOLEAN IsSnapshotVolume
);
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
))
2421 FltCancellableWaitForSingleObject(
2423 _In_opt_ PLARGE_INTEGER Timeout
,
2424 _In_opt_ PFLT_CALLBACK_DATA CallbackData
);
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
))
2431 FltCancellableWaitForMultipleObjects(
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
);
2439 _IRQL_requires_max_(DISPATCH_LEVEL
)
2442 FltGetRequestorProcessIdEx(
2443 _In_ PFLT_CALLBACK_DATA CallbackData
);
2445 _Must_inspect_result_
2446 _IRQL_requires_max_(APC_LEVEL
)
2449 FltEnlistInTransaction(
2450 _In_ PFLT_INSTANCE Instance
,
2451 _In_ PKTRANSACTION Transaction
,
2452 _In_ PFLT_CONTEXT TransactionContext
,
2453 _In_ NOTIFICATION_MASK NotificationMask
);
2455 _IRQL_requires_max_(APC_LEVEL
)
2458 FltRollbackEnlistment(
2459 _In_ PFLT_INSTANCE Instance
,
2460 _In_ PKTRANSACTION Transaction
,
2461 _In_opt_ PFLT_CONTEXT TransactionContext
);
2463 _IRQL_requires_max_(APC_LEVEL
)
2466 FltPrePrepareComplete(
2467 _In_ PFLT_INSTANCE Instance
,
2468 _In_ PKTRANSACTION Transaction
,
2469 _In_opt_ PFLT_CONTEXT TransactionContext
);
2471 _IRQL_requires_max_(APC_LEVEL
)
2475 _In_ PFLT_INSTANCE Instance
,
2476 _In_ PKTRANSACTION Transaction
,
2477 _In_opt_ PFLT_CONTEXT TransactionContext
);
2479 _IRQL_requires_max_(PASSIVE_LEVEL
)
2483 _In_ PFLT_INSTANCE Instance
,
2484 _In_ PKTRANSACTION Transaction
,
2485 _In_opt_ PFLT_CONTEXT TransactionContext
);
2487 _IRQL_requires_max_(APC_LEVEL
)
2490 FltCommitFinalizeComplete(
2491 _In_ PFLT_INSTANCE Instance
,
2492 _In_ PKTRANSACTION Transaction
,
2493 _In_opt_ PFLT_CONTEXT TransactionContext
);
2495 _IRQL_requires_max_(PASSIVE_LEVEL
)
2498 FltRollbackComplete(
2499 _In_ PFLT_INSTANCE Instance
,
2500 _In_ PKTRANSACTION Transaction
,
2501 _In_opt_ PFLT_CONTEXT TransactionContext
);
2503 _Must_inspect_result_
2504 _IRQL_requires_max_(APC_LEVEL
)
2507 FltAllocateExtraCreateParameterList(
2508 _In_ PFLT_FILTER Filter
,
2509 _In_ FSRTL_ALLOCATE_ECPLIST_FLAGS Flags
,
2510 _Outptr_ PECP_LIST
*EcpList
);
2512 _Must_inspect_result_
2513 _IRQL_requires_max_(APC_LEVEL
)
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
,
2523 _Outptr_ PVOID
*EcpContext
);
2525 _IRQL_requires_max_(APC_LEVEL
)
2528 FltInitExtraCreateParameterLookasideList(
2529 _In_ PFLT_FILTER Filter
,
2530 _Inout_ PVOID Lookaside
,
2531 _In_ FSRTL_ECP_LOOKASIDE_FLAGS Flags
,
2535 _IRQL_requires_max_(APC_LEVEL
)
2538 FltDeleteExtraCreateParameterLookasideList(
2539 _In_ PFLT_FILTER Filter
,
2540 _Inout_ PVOID Lookaside
,
2541 _In_ FSRTL_ECP_LOOKASIDE_FLAGS Flags
);
2543 _Must_inspect_result_
2544 _IRQL_requires_max_(APC_LEVEL
)
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
);
2556 _IRQL_requires_max_(APC_LEVEL
)
2559 FltInsertExtraCreateParameter(
2560 _In_ PFLT_FILTER Filter
,
2561 _Inout_ PECP_LIST EcpList
,
2562 _Inout_ PVOID EcpContext
);
2564 _IRQL_requires_max_(APC_LEVEL
)
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
);
2574 _IRQL_requires_max_(APC_LEVEL
)
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
);
2584 _IRQL_requires_max_(APC_LEVEL
)
2587 FltFreeExtraCreateParameterList(
2588 _In_ PFLT_FILTER Filter
,
2589 _In_ PECP_LIST EcpList
);
2591 _IRQL_requires_max_(APC_LEVEL
)
2594 FltFreeExtraCreateParameter(
2595 _In_ PFLT_FILTER Filter
,
2596 _In_ PVOID EcpContext
);
2598 _IRQL_requires_max_(APC_LEVEL
)
2601 FltGetEcpListFromCallbackData(
2602 _In_ PFLT_FILTER Filter
,
2603 _In_ PFLT_CALLBACK_DATA CallbackData
,
2604 _Outptr_result_maybenull_ PECP_LIST
*EcpList
);
2606 _IRQL_requires_max_(APC_LEVEL
)
2609 FltSetEcpListIntoCallbackData(
2610 _In_ PFLT_FILTER Filter
,
2611 _In_ PFLT_CALLBACK_DATA CallbackData
,
2612 _In_ PECP_LIST EcpList
);
2614 _IRQL_requires_max_(APC_LEVEL
)
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
);
2625 _IRQL_requires_max_(APC_LEVEL
)
2629 _In_ PFLT_FILTER Filter
,
2630 _In_ PVOID EcpContext
);
2632 _IRQL_requires_max_(APC_LEVEL
)
2635 FltIsEcpAcknowledged(
2636 _In_ PFLT_FILTER Filter
,
2637 _In_ PVOID EcpContext
);
2639 _IRQL_requires_max_(APC_LEVEL
)
2642 FltIsEcpFromUserMode(
2643 _In_ PFLT_FILTER Filter
,
2644 _In_ PVOID EcpContext
);
2646 _IRQL_requires_max_(DISPATCH_LEVEL
)
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
);
2655 _IRQL_requires_max_(DISPATCH_LEVEL
)
2658 FltApplyPriorityInfoThread(
2659 _In_ PIO_PRIORITY_INFO InputPriorityInfo
,
2660 _Out_opt_ PIO_PRIORITY_INFO OutputPriorityInfo
,
2661 _In_ PETHREAD Thread
);
2663 _IRQL_requires_max_(DISPATCH_LEVEL
)
2666 FltGetIoPriorityHint(
2667 _In_ PFLT_CALLBACK_DATA Data
);
2669 _IRQL_requires_max_(DISPATCH_LEVEL
)
2672 FltGetIoPriorityHintFromCallbackData(
2673 _In_ PFLT_CALLBACK_DATA Data
);
2675 _IRQL_requires_max_(DISPATCH_LEVEL
)
2678 FltSetIoPriorityHintIntoCallbackData(
2679 _In_ PFLT_CALLBACK_DATA Data
,
2680 _In_ IO_PRIORITY_HINT PriorityHint
);
2682 _IRQL_requires_max_(DISPATCH_LEVEL
)
2685 FltGetIoPriorityHintFromFileObject(
2686 _In_ PFILE_OBJECT FileObject
);
2688 _Must_inspect_result_
2689 _IRQL_requires_max_(DISPATCH_LEVEL
)
2692 FltSetIoPriorityHintIntoFileObject(
2693 _In_ PFILE_OBJECT FileObject
,
2694 _In_ IO_PRIORITY_HINT PriorityHint
);
2696 _IRQL_requires_max_(DISPATCH_LEVEL
)
2699 FltGetIoPriorityHintFromThread(
2700 _In_ PETHREAD Thread
);
2702 _IRQL_requires_max_(DISPATCH_LEVEL
)
2705 FltSetIoPriorityHintIntoThread(
2706 _In_ PETHREAD Thread
,
2707 _In_ IO_PRIORITY_HINT PriorityHint
);
2709 #endif /* FLT_MGR_LONGHORN */
2713 _Must_inspect_result_
2714 _IRQL_requires_max_(APC_LEVEL
)
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
);
2723 _Must_inspect_result_
2724 _IRQL_requires_max_(DPC_LEVEL
)
2727 FltGetNewSystemBufferAddress(
2728 _In_ PFLT_CALLBACK_DATA CallbackData
);
2730 _Must_inspect_result_
2731 _IRQL_requires_max_(APC_LEVEL
)
2732 FLT_PREOP_CALLBACK_STATUS
2735 _In_ POPLOCK Oplock
,
2736 _In_ PFLT_CALLBACK_DATA CallbackData
,
2738 _In_opt_ PVOID Context
,
2739 _In_opt_ PFLTOPLOCK_WAIT_COMPLETE_ROUTINE WaitCompletionRoutine
,
2740 _In_opt_ PFLTOPLOCK_PREPOST_CALLBACKDATA_ROUTINE PrePostCallbackDataRoutine
);
2742 _IRQL_requires_max_(APC_LEVEL
)
2746 _In_ POPLOCK Oplock
);
2748 _IRQL_requires_max_(APC_LEVEL
)
2752 _In_ POPLOCK Oplock
);
2754 _IRQL_requires_max_(APC_LEVEL
)
2755 FLT_PREOP_CALLBACK_STATUS
2758 _In_ POPLOCK Oplock
,
2759 _In_ PFLT_CALLBACK_DATA CallbackData
,
2761 _In_opt_ PVOID Context
,
2762 _In_opt_ PFLTOPLOCK_WAIT_COMPLETE_ROUTINE WaitCompletionRoutine
,
2763 _In_opt_ PFLTOPLOCK_PREPOST_CALLBACKDATA_ROUTINE PrePostCallbackDataRoutine
);
2765 _IRQL_requires_max_(APC_LEVEL
)
2766 FLT_PREOP_CALLBACK_STATUS
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
);
2775 _IRQL_requires_max_(APC_LEVEL
)
2776 FLT_PREOP_CALLBACK_STATUS
2778 FltOplockBreakToNoneEx(
2779 _In_ POPLOCK Oplock
,
2780 _In_ PFLT_CALLBACK_DATA CallbackData
,
2782 _In_opt_ PVOID Context
,
2783 _In_opt_ PFLTOPLOCK_WAIT_COMPLETE_ROUTINE WaitCompletionRoutine
,
2784 _In_opt_ PFLTOPLOCK_PREPOST_CALLBACKDATA_ROUTINE PrePostCallbackDataRoutine
);
2786 _IRQL_requires_max_(APC_LEVEL
)
2789 FltOplockIsSharedRequest(
2790 _In_ PFLT_CALLBACK_DATA CallbackData
);
2792 _Must_inspect_result_
2793 _IRQL_requires_max_(APC_LEVEL
)
2794 FLT_PREOP_CALLBACK_STATUS
2797 _In_ POPLOCK Oplock
,
2798 _In_ PFLT_CALLBACK_DATA CallbackData
,
2799 _In_ ULONG OpenCount
,
2805 _In_opt_ PFILE_OBJECT Fo1
,
2806 _In_opt_ PFILE_OBJECT Fo2
);
2808 _Must_inspect_result_
2809 _IRQL_requires_max_(APC_LEVEL
)
2812 FltGetRequestorSessionId(
2813 _In_ PFLT_CALLBACK_DATA CallbackData
,
2814 _Out_ PULONG SessionId
);
2816 _IRQL_requires_max_(DISPATCH_LEVEL
)
2819 FltAdjustDeviceStackSizeForIoRedirection(
2820 _In_ PFLT_INSTANCE SourceInstance
,
2821 _In_ PFLT_INSTANCE TargetInstance
,
2822 _Out_opt_ PBOOLEAN SourceDeviceStackSizeModified
);
2824 _IRQL_requires_max_(DISPATCH_LEVEL
)
2827 FltIsIoRedirectionAllowed(
2828 _In_ PFLT_INSTANCE SourceInstance
,
2829 _In_ PFLT_INSTANCE TargetInstance
,
2830 _Out_ PBOOLEAN RedirectionAllowed
);
2832 _IRQL_requires_max_(DISPATCH_LEVEL
)
2835 FltIsIoRedirectionAllowedForOperation(
2836 _In_ PFLT_CALLBACK_DATA Data
,
2837 _In_ PFLT_INSTANCE TargetInstance
,
2838 _Out_ PBOOLEAN RedirectionAllowedThisIo
,
2839 _Out_opt_ PBOOLEAN RedirectionAllowedAllIo
);
2841 #endif /* FLT_MGR_WIN7 */
2843 #endif /* FLT_MGR_BASELINE */
2849 #endif /* __FLTKERNEL__ */