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
;
482 typedef const struct _FLT_RELATED_OBJECTS
*PCFLT_RELATED_OBJECTS
;
484 typedef struct _FLT_RELATED_CONTEXTS
{
485 PFLT_CONTEXT VolumeContext
;
486 PFLT_CONTEXT InstanceContext
;
487 PFLT_CONTEXT FileContext
;
488 PFLT_CONTEXT StreamContext
;
489 PFLT_CONTEXT StreamHandleContext
;
490 PFLT_CONTEXT TransactionContext
;
491 } FLT_RELATED_CONTEXTS
, *PFLT_RELATED_CONTEXTS
;
494 (FLTAPI
*PFLT_CONTEXT_CLEANUP_CALLBACK
)(
495 _In_ PFLT_CONTEXT Context
,
496 _In_ FLT_CONTEXT_TYPE ContextType
);
499 (FLTAPI
*PFLT_CONTEXT_ALLOCATE_CALLBACK
)(
500 _In_ POOL_TYPE PoolType
,
502 _In_ FLT_CONTEXT_TYPE ContextType
);
505 (FLTAPI
*PFLT_CONTEXT_FREE_CALLBACK
)(
507 _In_ FLT_CONTEXT_TYPE ContextType
);
509 typedef USHORT FLT_CONTEXT_REGISTRATION_FLAGS
;
511 #define FLTFL_CONTEXT_REGISTRATION_NO_EXACT_SIZE_MATCH 0x0001
513 #define FLT_VARIABLE_SIZED_CONTEXTS ((SIZE_T)-1)
515 typedef struct _FLT_CONTEXT_REGISTRATION
{
516 FLT_CONTEXT_TYPE ContextType
;
517 FLT_CONTEXT_REGISTRATION_FLAGS Flags
;
518 PFLT_CONTEXT_CLEANUP_CALLBACK ContextCleanupCallback
;
521 PFLT_CONTEXT_ALLOCATE_CALLBACK ContextAllocateCallback
;
522 PFLT_CONTEXT_FREE_CALLBACK ContextFreeCallback
;
524 } FLT_CONTEXT_REGISTRATION
, *PFLT_CONTEXT_REGISTRATION
;
525 typedef const struct _FLT_CONTEXT_REGISTRATION
*PCFLT_CONTEXT_REGISTRATION
;
527 typedef ULONG FLT_INSTANCE_SETUP_FLAGS
;
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
535 #define FLTFL_INSTANCE_SETUP_DETACHED_VOLUME 0x00000008
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)
543 #endif /* FLT_MGR_LONGHORN */
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
);
552 typedef ULONG FLT_INSTANCE_QUERY_TEARDOWN_FLAGS
;
555 (FLTAPI
*PFLT_INSTANCE_QUERY_TEARDOWN_CALLBACK
)(
556 _In_ PCFLT_RELATED_OBJECTS FltObjects
,
557 _In_ FLT_INSTANCE_QUERY_TEARDOWN_FLAGS Flags
);
559 typedef ULONG FLT_INSTANCE_TEARDOWN_FLAGS
;
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
568 (FLTAPI
*PFLT_INSTANCE_TEARDOWN_CALLBACK
)(
569 _In_ PCFLT_RELATED_OBJECTS FltObjects
,
570 _In_ FLT_INSTANCE_TEARDOWN_FLAGS Reason
);
572 typedef enum _FLT_PREOP_CALLBACK_STATUS
{
573 FLT_PREOP_SUCCESS_WITH_CALLBACK
,
574 FLT_PREOP_SUCCESS_NO_CALLBACK
,
576 FLT_PREOP_DISALLOW_FASTIO
,
578 FLT_PREOP_SYNCHRONIZE
579 } FLT_PREOP_CALLBACK_STATUS
, *PFLT_PREOP_CALLBACK_STATUS
;
581 typedef FLT_PREOP_CALLBACK_STATUS
582 (FLTAPI
*PFLT_PRE_OPERATION_CALLBACK
)(
583 _Inout_ PFLT_CALLBACK_DATA Data
,
584 _In_ PCFLT_RELATED_OBJECTS FltObjects
,
585 _Outptr_result_maybenull_ PVOID
*CompletionContext
);
587 typedef enum _FLT_POSTOP_CALLBACK_STATUS
{
588 FLT_POSTOP_FINISHED_PROCESSING
,
589 FLT_POSTOP_MORE_PROCESSING_REQUIRED
590 } FLT_POSTOP_CALLBACK_STATUS
, *PFLT_POSTOP_CALLBACK_STATUS
;
592 typedef ULONG FLT_POST_OPERATION_FLAGS
;
594 #define FLTFL_POST_OPERATION_DRAINING 0x00000001
596 typedef FLT_POSTOP_CALLBACK_STATUS
597 (FLTAPI
*PFLT_POST_OPERATION_CALLBACK
)(
598 _Inout_ PFLT_CALLBACK_DATA Data
,
599 _In_ PCFLT_RELATED_OBJECTS FltObjects
,
600 _In_opt_ PVOID CompletionContext
,
601 _In_ FLT_POST_OPERATION_FLAGS Flags
);
603 typedef ULONG FLT_OPERATION_REGISTRATION_FLAGS
;
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
609 typedef struct _FLT_OPERATION_REGISTRATION
{
611 FLT_OPERATION_REGISTRATION_FLAGS Flags
;
612 PFLT_PRE_OPERATION_CALLBACK PreOperation
;
613 PFLT_POST_OPERATION_CALLBACK PostOperation
;
615 } FLT_OPERATION_REGISTRATION
, *PFLT_OPERATION_REGISTRATION
;
617 typedef struct _FLT_TAG_DATA_BUFFER
{
619 USHORT TagDataLength
;
620 USHORT UnparsedNameLength
;
621 _ANONYMOUS_UNION
union {
623 USHORT SubstituteNameOffset
;
624 USHORT SubstituteNameLength
;
625 USHORT PrintNameOffset
;
626 USHORT PrintNameLength
;
629 } SymbolicLinkReparseBuffer
;
631 USHORT SubstituteNameOffset
;
632 USHORT SubstituteNameLength
;
633 USHORT PrintNameOffset
;
634 USHORT PrintNameLength
;
636 } MountPointReparseBuffer
;
639 } GenericReparseBuffer
;
643 } GenericGUIDReparseBuffer
;
645 } FLT_TAG_DATA_BUFFER
, *PFLT_TAG_DATA_BUFFER
;
647 #define FLT_TAG_DATA_BUFFER_HEADER_SIZE FIELD_OFFSET(FLT_TAG_DATA_BUFFER, GenericReparseBuffer)
649 typedef ULONG FLT_FILTER_UNLOAD_FLAGS
;
651 #define FLTFL_FILTER_UNLOAD_MANDATORY 0x00000001
654 (FLTAPI
*PFLT_FILTER_UNLOAD_CALLBACK
)(
655 FLT_FILTER_UNLOAD_FLAGS Flags
);
657 typedef struct _FLT_NAME_CONTROL
{
659 } FLT_NAME_CONTROL
, *PFLT_NAME_CONTROL
;
661 typedef ULONG FLT_FILE_NAME_OPTIONS
;
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
);
672 typedef ULONG FLT_NORMALIZE_NAME_FLAGS
;
674 #define FLTFL_NORMALIZE_NAME_CASE_SENSITIVE 0x01
675 #define FLTFL_NORMALIZE_NAME_DESTINATION_FILE_NAME 0x02
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
);
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
);
701 (FLTAPI
*PFLT_NORMALIZE_CONTEXT_CLEANUP
)(
702 _In_opt_ PVOID
*NormalizationContext
);
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 */
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
718 #define FLT_REGISTRATION_VERSION FLT_REGISTRATION_VERSION_0202
720 #define FLT_REGISTRATION_VERSION FLT_REGISTRATION_VERSION_0200
723 typedef ULONG FLT_REGISTRATION_FLAGS
;
725 #define FLTFL_REGISTRATION_DO_NOT_SUPPORT_SERVICE_STOP 0x00000001
726 #define FLTFL_REGISTRATION_SUPPORT_NPFS_MSFS 0x00000002
728 typedef struct _FLT_REGISTRATION
{
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
;
743 PFLT_TRANSACTION_NOTIFICATION_CALLBACK TransactionNotificationCallback
;
744 PFLT_NORMALIZE_NAME_COMPONENT_EX NormalizeNameComponentExCallback
;
745 #endif /* FLT_MGR_LONGHORN */
746 } FLT_REGISTRATION
, *PFLT_REGISTRATION
;
749 (FLTAPI
*PFLT_COMPLETED_ASYNC_IO_CALLBACK
)(
750 _In_ PFLT_CALLBACK_DATA CallbackData
,
751 _In_ PFLT_CONTEXT Context
);
753 typedef ULONG FLT_IO_OPERATION_FLAGS
;
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
760 #define FLTFL_IO_OPERATION_SYNCHRONOUS_PAGING 0x00000008
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
);
770 typedef ULONG FLT_FILE_NAME_OPTIONS
;
772 #define FLT_VALID_FILE_NAME_FORMATS 0x000000ff
774 #define FLT_FILE_NAME_NORMALIZED 0x01
775 #define FLT_FILE_NAME_OPENED 0x02
776 #define FLT_FILE_NAME_SHORT 0x03
778 #define FltGetFileNameFormat( _NameOptions ) ((_NameOptions) & FLT_VALID_FILE_NAME_FORMATS)
780 #define FLT_VALID_FILE_NAME_QUERY_METHODS 0x0000ff00
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
787 #define FltGetFileNameQueryMethod( _NameOptions ) ((_NameOptions) & FLT_VALID_FILE_NAME_QUERY_METHODS)
789 #define FLT_VALID_FILE_NAME_FLAGS 0xff000000
791 #define FLT_FILE_NAME_REQUEST_FROM_CURRENT_PROVIDER 0x01000000
792 #define FLT_FILE_NAME_DO_NOT_CACHE 0x02000000
794 #if FLT_MGR_AFTER_XPSP2
795 #define FLT_FILE_NAME_ALLOW_QUERY_ON_REPARSE 0x04000000
798 typedef USHORT FLT_FILE_NAME_PARSED_FLAGS
;
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
805 typedef struct _FLT_FILE_NAME_INFORMATION
{
807 FLT_FILE_NAME_PARSED_FLAGS NamesParsed
;
808 FLT_FILE_NAME_OPTIONS Format
;
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
;
818 typedef enum _FLT_SET_CONTEXT_OPERATION
{
819 FLT_SET_CONTEXT_REPLACE_IF_EXISTS
,
820 FLT_SET_CONTEXT_KEEP_IF_EXISTS
821 } FLT_SET_CONTEXT_OPERATION
, *PFLT_SET_CONTEXT_OPERATION
;
823 typedef struct _FLT_VOLUME_PROPERTIES
{
824 DEVICE_TYPE DeviceType
;
825 ULONG DeviceCharacteristics
;
826 ULONG DeviceObjectFlags
;
827 ULONG AlignmentRequirement
;
830 UNICODE_STRING FileSystemDriverName
;
831 UNICODE_STRING FileSystemDeviceName
;
832 UNICODE_STRING RealDeviceName
;
833 } FLT_VOLUME_PROPERTIES
, *PFLT_VOLUME_PROPERTIES
;
835 #define FLT_PORT_CONNECT 0x0001
836 #define FLT_PORT_ALL_ACCESS (FLT_PORT_CONNECT | STANDARD_RIGHTS_ALL)
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
);
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
);
856 (FLTAPI
*PFLT_DISCONNECT_NOTIFY
)(
857 _In_opt_ PVOID ConnectionCookie
);
860 (FLTAPI
*PFLT_COMPLETE_CANCELED_CALLBACK
)(
861 _In_ PFLT_CALLBACK_DATA CallbackData
);
863 typedef struct _FLT_DEFERRED_IO_WORKITEM
*PFLT_DEFERRED_IO_WORKITEM
;
864 typedef struct _FLT_GENERIC_WORKITEM
*PFLT_GENERIC_WORKITEM
;
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
);
873 (FLTAPI
*PFLT_GENERIC_WORKITEM_ROUTINE
)(
874 _In_ PFLT_GENERIC_WORKITEM FltWorkItem
,
875 _In_ PVOID FltObject
,
876 _In_opt_ PVOID Context
);
878 typedef IO_CSQ_IRP_CONTEXT FLT_CALLBACK_DATA_QUEUE_IO_CONTEXT
, *PFLT_CALLBACK_DATA_QUEUE_IO_CONTEXT
;
880 typedef struct _FLT_CALLBACK_DATA_QUEUE FLT_CALLBACK_DATA_QUEUE
, *PFLT_CALLBACK_DATA_QUEUE
;
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
);
889 (FLTAPI
*PFLT_CALLBACK_DATA_QUEUE_REMOVE_IO
)(
890 _Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq
,
891 _In_ PFLT_CALLBACK_DATA Cbd
);
893 typedef PFLT_CALLBACK_DATA
894 (FLTAPI
*PFLT_CALLBACK_DATA_QUEUE_PEEK_NEXT_IO
)(
895 _In_ PFLT_CALLBACK_DATA_QUEUE Cbdq
,
896 _In_opt_ PFLT_CALLBACK_DATA Cbd
,
897 _In_opt_ PVOID PeekContext
);
900 (FLTAPI
*PFLT_CALLBACK_DATA_QUEUE_ACQUIRE
)(
901 _Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq
,
902 _Out_opt_ PKIRQL Irql
);
905 (FLTAPI
*PFLT_CALLBACK_DATA_QUEUE_RELEASE
)(
906 _Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq
,
907 _In_opt_ KIRQL Irql
);
910 (FLTAPI
*PFLT_CALLBACK_DATA_QUEUE_COMPLETE_CANCELED_IO
)(
911 _Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq
,
912 _Inout_ PFLT_CALLBACK_DATA Cbd
);
914 typedef ULONG FLT_CALLBACK_DATA_QUEUE_FLAGS
;
916 typedef struct _FLT_CALLBACK_DATA_QUEUE
{
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
;
929 (*PFLT_COMPLETE_LOCK_CALLBACK_DATA_ROUTINE
)(
930 _In_opt_ PVOID Context
,
931 _In_ PFLT_CALLBACK_DATA CallbackData
);
934 (FLTAPI
*PFLTOPLOCK_WAIT_COMPLETE_ROUTINE
)(
935 _In_ PFLT_CALLBACK_DATA CallbackData
,
936 _In_opt_ PVOID Context
);
939 (FLTAPI
*PFLTOPLOCK_PREPOST_CALLBACKDATA_ROUTINE
)(
940 _In_ PFLT_CALLBACK_DATA CallbackData
,
941 _In_opt_ PVOID Context
);
945 FltSetCallbackDataDirty(
946 _Inout_ PFLT_CALLBACK_DATA Data
);
950 FltClearCallbackDataDirty(
951 _Inout_ PFLT_CALLBACK_DATA Data
);
955 FltIsCallbackDataDirty(
956 _In_ PFLT_CALLBACK_DATA Data
);
958 _Must_inspect_result_
961 FltDoCompletionProcessingWhenSafe(
962 _In_ PFLT_CALLBACK_DATA Data
,
963 _In_ PCFLT_RELATED_OBJECTS FltObjects
,
964 _In_opt_ PVOID CompletionContext
,
965 _In_ FLT_POST_OPERATION_FLAGS Flags
,
966 _In_ PFLT_POST_OPERATION_CALLBACK SafePostCallback
,
967 _Out_ PFLT_POSTOP_CALLBACK_STATUS RetPostOperationStatus
);
969 _Must_inspect_result_
970 _IRQL_requires_max_(APC_LEVEL
)
973 FltCheckAndGrowNameControl(
974 _Inout_ PFLT_NAME_CONTROL NameCtrl
,
975 _In_ USHORT NewSize
);
977 _Must_inspect_result_
978 _IRQL_requires_max_(APC_LEVEL
)
981 FltPurgeFileNameInformationCache(
982 _In_ PFLT_INSTANCE Instance
,
983 _In_opt_ PFILE_OBJECT FileObject
);
985 _Must_inspect_result_
986 _IRQL_requires_max_(APC_LEVEL
)
990 _In_ PDRIVER_OBJECT Driver
,
991 _In_ CONST FLT_REGISTRATION
*Registration
,
992 _Outptr_ PFLT_FILTER
*RetFilter
);
994 _IRQL_requires_max_(APC_LEVEL
)
998 _In_ PFLT_FILTER Filter
);
1000 _Must_inspect_result_
1001 _IRQL_requires_max_(APC_LEVEL
)
1005 _In_ PFLT_FILTER Filter
);
1007 _Must_inspect_result_
1008 _IRQL_requires_max_(APC_LEVEL
)
1011 FltGetRoutineAddress(
1012 _In_ PCSTR FltMgrRoutineName
);
1014 _When_(CallbackStatus
==FLT_PREOP_COMPLETE
, _IRQL_requires_max_(DISPATCH_LEVEL
))
1015 _When_(CallbackStatus
!=FLT_PREOP_COMPLETE
, _IRQL_requires_max_(APC_LEVEL
))
1018 FltCompletePendedPreOperation(
1019 _In_ PFLT_CALLBACK_DATA CallbackData
,
1020 _In_ FLT_PREOP_CALLBACK_STATUS CallbackStatus
,
1021 _In_opt_ PVOID Context
);
1023 _IRQL_requires_max_(DISPATCH_LEVEL
)
1026 FltCompletePendedPostOperation(
1027 _In_ PFLT_CALLBACK_DATA CallbackData
);
1029 _Must_inspect_result_
1030 _IRQL_requires_max_(DISPATCH_LEVEL
)
1033 FltRequestOperationStatusCallback(
1034 _In_ PFLT_CALLBACK_DATA Data
,
1035 _In_ PFLT_GET_OPERATION_STATUS_CALLBACK CallbackRoutine
,
1036 _In_opt_ PVOID RequesterContext
);
1038 _When_((PoolType
==NonPagedPoolNx
), _IRQL_requires_max_(DISPATCH_LEVEL
))
1039 _When_((PoolType
!=NonPagedPoolNx
), _IRQL_requires_max_(APC_LEVEL
))
1042 FltAllocatePoolAlignedWithTag(
1043 _In_ PFLT_INSTANCE Instance
,
1044 _In_ POOL_TYPE PoolType
,
1045 _In_ SIZE_T NumberOfBytes
,
1048 _IRQL_requires_max_(DISPATCH_LEVEL
)
1051 FltFreePoolAlignedWithTag(
1052 _In_ PFLT_INSTANCE Instance
,
1056 _Must_inspect_result_
1057 _IRQL_requires_max_(APC_LEVEL
)
1060 FltGetFileNameInformation(
1061 _In_ PFLT_CALLBACK_DATA CallbackData
,
1062 _In_ FLT_FILE_NAME_OPTIONS NameOptions
,
1063 _Outptr_ PFLT_FILE_NAME_INFORMATION
*FileNameInformation
);
1065 _Must_inspect_result_
1066 _IRQL_requires_max_(APC_LEVEL
)
1069 FltGetFileNameInformationUnsafe(
1070 _In_ PFILE_OBJECT FileObject
,
1071 _In_opt_ PFLT_INSTANCE Instance
,
1072 _In_ FLT_FILE_NAME_OPTIONS NameOptions
,
1073 _Outptr_ PFLT_FILE_NAME_INFORMATION
*FileNameInformation
);
1075 _IRQL_requires_max_(APC_LEVEL
)
1078 FltReleaseFileNameInformation(
1079 _In_ PFLT_FILE_NAME_INFORMATION FileNameInformation
);
1081 _IRQL_requires_max_(APC_LEVEL
)
1084 FltReferenceFileNameInformation(
1085 _In_ PFLT_FILE_NAME_INFORMATION FileNameInformation
);
1087 _IRQL_requires_max_(APC_LEVEL
)
1091 _In_ PCUNICODE_STRING FileName
,
1092 _Inout_opt_ PUNICODE_STRING Extension
,
1093 _Inout_opt_ PUNICODE_STRING Stream
,
1094 _Inout_opt_ PUNICODE_STRING FinalComponent
);
1096 _IRQL_requires_max_(APC_LEVEL
)
1099 FltParseFileNameInformation(
1100 _Inout_ PFLT_FILE_NAME_INFORMATION FileNameInformation
);
1102 _Must_inspect_result_
1103 _IRQL_requires_max_(APC_LEVEL
)
1107 _In_ PFLT_CALLBACK_DATA CallbackData
,
1108 _In_ PFLT_FILE_NAME_INFORMATION FileNameInformation
,
1109 _Outptr_result_maybenull_ PFLT_FILE_NAME_INFORMATION
*RetTunneledFileNameInformation
);
1111 _Must_inspect_result_
1112 _IRQL_requires_max_(APC_LEVEL
)
1116 _In_ PFLT_VOLUME Volume
,
1117 _Inout_opt_ PUNICODE_STRING VolumeName
,
1118 _Out_opt_ PULONG BufferSizeNeeded
);
1120 _Must_inspect_result_
1121 _IRQL_requires_max_(APC_LEVEL
)
1124 FltGetDestinationFileNameInformation(
1125 _In_ PFLT_INSTANCE Instance
,
1126 _In_ PFILE_OBJECT FileObject
,
1127 _In_opt_ HANDLE RootDirectory
,
1128 _In_reads_bytes_(FileNameLength
) PWSTR FileName
,
1129 _In_ ULONG FileNameLength
,
1130 _In_ FLT_FILE_NAME_OPTIONS NameOptions
,
1131 _Outptr_ PFLT_FILE_NAME_INFORMATION
*RetFileNameInformation
);
1133 _Must_inspect_result_
1134 _IRQL_requires_max_(APC_LEVEL
)
1138 _In_ PFILE_OBJECT FileObject
,
1139 _In_ PFLT_INSTANCE Instance
,
1140 _Out_ PBOOLEAN IsDirectory
);
1142 _Must_inspect_result_
1143 _IRQL_requires_max_(PASSIVE_LEVEL
)
1147 _In_ PCUNICODE_STRING FilterName
);
1149 _Must_inspect_result_
1150 _IRQL_requires_max_(PASSIVE_LEVEL
)
1154 _In_ PCUNICODE_STRING FilterName
);
1156 _Must_inspect_result_
1157 _IRQL_requires_max_(APC_LEVEL
)
1161 _Inout_ PFLT_FILTER Filter
,
1162 _Inout_ PFLT_VOLUME Volume
,
1163 _In_opt_ PCUNICODE_STRING InstanceName
,
1164 _Outptr_opt_result_maybenull_ PFLT_INSTANCE
*RetInstance
);
1166 _Must_inspect_result_
1167 _IRQL_requires_max_(APC_LEVEL
)
1170 FltAttachVolumeAtAltitude(
1171 _Inout_ PFLT_FILTER Filter
,
1172 _Inout_ PFLT_VOLUME Volume
,
1173 _In_ PCUNICODE_STRING Altitude
,
1174 _In_opt_ PCUNICODE_STRING InstanceName
,
1175 _Outptr_opt_result_maybenull_ PFLT_INSTANCE
*RetInstance
);
1177 _Must_inspect_result_
1178 _IRQL_requires_max_(APC_LEVEL
)
1182 _Inout_ PFLT_FILTER Filter
,
1183 _Inout_ PFLT_VOLUME Volume
,
1184 _In_opt_ PCUNICODE_STRING InstanceName
);
1186 _Must_inspect_result_
1187 _IRQL_requires_max_(APC_LEVEL
)
1190 FltAllocateCallbackData(
1191 _In_ PFLT_INSTANCE Instance
,
1192 _In_opt_ PFILE_OBJECT FileObject
,
1193 _Outptr_ PFLT_CALLBACK_DATA
*RetNewCallbackData
);
1195 _IRQL_requires_max_(DISPATCH_LEVEL
)
1198 FltFreeCallbackData(
1199 _In_ PFLT_CALLBACK_DATA CallbackData
);
1201 _IRQL_requires_max_(APC_LEVEL
)
1204 FltReuseCallbackData(
1205 _Inout_ PFLT_CALLBACK_DATA CallbackData
);
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
))
1211 FltPerformSynchronousIo(
1212 _Inout_ PFLT_CALLBACK_DATA CallbackData
);
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
))
1219 FltPerformAsynchronousIo(
1220 _Inout_ PFLT_CALLBACK_DATA CallbackData
,
1221 _In_ PFLT_COMPLETED_ASYNC_IO_CALLBACK CallbackRoutine
,
1222 _In_ PVOID CallbackContext
);
1224 _Must_inspect_result_
1225 _IRQL_requires_max_(PASSIVE_LEVEL
)
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
,
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
))
1250 _In_ PFLT_INSTANCE InitiatingInstance
,
1251 _In_ PFILE_OBJECT FileObject
,
1252 _In_opt_ PLARGE_INTEGER ByteOffset
,
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
);
1260 _Must_inspect_result_
1261 _IRQL_requires_max_(PASSIVE_LEVEL
)
1265 _In_ PFLT_INSTANCE InitiatingInstance
,
1266 _In_ PFILE_OBJECT FileObject
,
1268 _In_opt_ GUID
*Guid
,
1269 _In_reads_bytes_(DataBufferLength
) PVOID DataBuffer
,
1270 _In_ USHORT DataBufferLength
);
1272 _Must_inspect_result_
1273 _IRQL_requires_max_(PASSIVE_LEVEL
)
1277 _In_ PFLT_INSTANCE InitiatingInstance
,
1278 _In_ PFILE_OBJECT FileObject
,
1280 _In_opt_ GUID
*Guid
);
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
))
1288 _In_ PFLT_INSTANCE InitiatingInstance
,
1289 _In_ PFILE_OBJECT FileObject
,
1290 _In_opt_ PLARGE_INTEGER ByteOffset
,
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
);
1298 _Must_inspect_result_
1299 _IRQL_requires_max_(PASSIVE_LEVEL
)
1302 FltQueryInformationFile(
1303 _In_ PFLT_INSTANCE Instance
,
1304 _In_ PFILE_OBJECT FileObject
,
1305 _Out_writes_bytes_to_(Length
,*LengthReturned
) PVOID FileInformation
,
1307 _In_ FILE_INFORMATION_CLASS FileInformationClass
,
1308 _Out_opt_ PULONG LengthReturned
);
1310 _Must_inspect_result_
1311 _IRQL_requires_max_(PASSIVE_LEVEL
)
1314 FltSetInformationFile(
1315 _In_ PFLT_INSTANCE Instance
,
1316 _In_ PFILE_OBJECT FileObject
,
1317 _In_reads_bytes_(Length
) PVOID FileInformation
,
1319 _In_ FILE_INFORMATION_CLASS FileInformationClass
);
1321 _Must_inspect_result_
1322 _IRQL_requires_max_(PASSIVE_LEVEL
)
1325 FltQueryVolumeInformationFile(
1326 _In_ PFLT_INSTANCE Instance
,
1327 _In_ PFILE_OBJECT FileObject
,
1328 _Out_writes_bytes_to_(Length
,*LengthReturned
) PVOID FsInformation
,
1330 _In_ FS_INFORMATION_CLASS FsInformationClass
,
1331 _Out_opt_ PULONG LengthReturned
);
1333 _Must_inspect_result_
1334 _IRQL_requires_max_(PASSIVE_LEVEL
)
1337 FltQuerySecurityObject(
1338 _In_ PFLT_INSTANCE Instance
,
1339 _In_ PFILE_OBJECT FileObject
,
1340 _In_ SECURITY_INFORMATION SecurityInformation
,
1341 _Inout_updates_bytes_opt_(Length
) PSECURITY_DESCRIPTOR SecurityDescriptor
,
1343 _Out_opt_ PULONG LengthNeeded
);
1345 _Must_inspect_result_
1346 _IRQL_requires_max_(PASSIVE_LEVEL
)
1349 FltSetSecurityObject(
1350 _In_ PFLT_INSTANCE Instance
,
1351 _In_ PFILE_OBJECT FileObject
,
1352 _In_ SECURITY_INFORMATION SecurityInformation
,
1353 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor
);
1355 _Must_inspect_result_
1356 _IRQL_requires_max_(PASSIVE_LEVEL
)
1360 _In_ PFLT_INSTANCE Instance
,
1361 _In_ PFILE_OBJECT FileObject
);
1363 _Must_inspect_result_
1364 _IRQL_requires_max_(PASSIVE_LEVEL
)
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
);
1377 _Must_inspect_result_
1378 _IRQL_requires_max_(PASSIVE_LEVEL
)
1381 FltDeviceIoControlFile(
1382 _In_ PFLT_INSTANCE Instance
,
1383 _In_ PFILE_OBJECT FileObject
,
1384 _In_ ULONG IoControlCode
,
1385 _In_reads_bytes_opt_(InputBufferLength
) PVOID InputBuffer
,
1386 _In_ ULONG InputBufferLength
,
1387 _Out_writes_bytes_to_opt_(OutputBufferLength
,*LengthReturned
) PVOID OutputBuffer
,
1388 _In_ ULONG OutputBufferLength
,
1389 _Out_opt_ PULONG LengthReturned
);
1391 _Must_inspect_result_
1392 _When_(FlagOn(CallbackData
->Iopb
->IrpFlags
, IRP_PAGING_IO
), _IRQL_requires_max_(APC_LEVEL
))
1393 _When_(!FlagOn(CallbackData
->Iopb
->IrpFlags
, IRP_PAGING_IO
), _IRQL_requires_max_(PASSIVE_LEVEL
))
1396 FltReissueSynchronousIo(
1397 _In_ PFLT_INSTANCE InitiatingInstance
,
1398 _In_ PFLT_CALLBACK_DATA CallbackData
);
1400 _IRQL_requires_max_(PASSIVE_LEVEL
)
1404 _In_ HANDLE FileHandle
);
1406 _IRQL_requires_max_(PASSIVE_LEVEL
)
1410 _In_ PFLT_INSTANCE Instance
,
1411 _In_ PFILE_OBJECT FileObject
);
1413 _Must_inspect_result_
1414 _IRQL_requires_max_(PASSIVE_LEVEL
)
1417 FltCreateSystemVolumeInformationFolder(
1418 _In_ PFLT_INSTANCE Instance
);
1420 _IRQL_requires_max_(APC_LEVEL
)
1423 FltSupportsFileContexts(
1424 _In_ PFILE_OBJECT FileObject
);
1426 _IRQL_requires_max_(APC_LEVEL
)
1429 FltSupportsStreamContexts(
1430 _In_ PFILE_OBJECT FileObject
);
1432 _IRQL_requires_max_(APC_LEVEL
)
1435 FltSupportsStreamHandleContexts(
1436 _In_ PFILE_OBJECT FileObject
);
1438 _Must_inspect_result_
1439 _IRQL_requires_max_(APC_LEVEL
)
1443 _In_ PFLT_FILTER Filter
,
1444 _In_ FLT_CONTEXT_TYPE ContextType
,
1445 _In_ SIZE_T ContextSize
,
1446 _In_ POOL_TYPE PoolType
,
1447 _Outptr_result_bytebuffer_(ContextSize
) PFLT_CONTEXT
*ReturnedContext
);
1449 _IRQL_requires_max_(APC_LEVEL
)
1453 _In_ PCFLT_RELATED_OBJECTS FltObjects
,
1454 _In_ FLT_CONTEXT_TYPE DesiredContexts
,
1455 _Out_ PFLT_RELATED_CONTEXTS Contexts
);
1457 _IRQL_requires_max_(APC_LEVEL
)
1461 _In_ PFLT_RELATED_CONTEXTS Contexts
);
1463 _IRQL_requires_max_(APC_LEVEL
)
1466 FltSetVolumeContext(
1467 _In_ PFLT_VOLUME Volume
,
1468 _In_ FLT_SET_CONTEXT_OPERATION Operation
,
1469 _In_ PFLT_CONTEXT NewContext
,
1470 _Outptr_opt_result_maybenull_ PFLT_CONTEXT
*OldContext
);
1472 _IRQL_requires_max_(APC_LEVEL
)
1475 FltSetInstanceContext(
1476 _In_ PFLT_INSTANCE Instance
,
1477 _In_ FLT_SET_CONTEXT_OPERATION Operation
,
1478 _In_ PFLT_CONTEXT NewContext
,
1479 _Outptr_opt_result_maybenull_ PFLT_CONTEXT
*OldContext
);
1481 _IRQL_requires_max_(APC_LEVEL
)
1485 _In_ PFLT_INSTANCE Instance
,
1486 _In_ PFILE_OBJECT FileObject
,
1487 _In_ FLT_SET_CONTEXT_OPERATION Operation
,
1488 _In_ PFLT_CONTEXT NewContext
,
1489 _Outptr_opt_result_maybenull_ PFLT_CONTEXT
*OldContext
);
1491 _IRQL_requires_max_(APC_LEVEL
)
1494 FltSetStreamContext(
1495 _In_ PFLT_INSTANCE Instance
,
1496 _In_ PFILE_OBJECT FileObject
,
1497 _In_ FLT_SET_CONTEXT_OPERATION Operation
,
1498 _In_ PFLT_CONTEXT NewContext
,
1499 _Outptr_opt_result_maybenull_ PFLT_CONTEXT
*OldContext
);
1501 _IRQL_requires_max_(APC_LEVEL
)
1504 FltSetStreamHandleContext(
1505 _In_ PFLT_INSTANCE Instance
,
1506 _In_ PFILE_OBJECT FileObject
,
1507 _In_ FLT_SET_CONTEXT_OPERATION Operation
,
1508 _In_ PFLT_CONTEXT NewContext
,
1509 _Outptr_opt_result_maybenull_ PFLT_CONTEXT
*OldContext
);
1511 _IRQL_requires_max_(APC_LEVEL
)
1515 _In_ PFLT_CONTEXT Context
);
1517 _IRQL_requires_max_(APC_LEVEL
)
1520 FltDeleteVolumeContext(
1521 _In_ PFLT_FILTER Filter
,
1522 _In_ PFLT_VOLUME Volume
,
1523 _Outptr_opt_result_maybenull_ PFLT_CONTEXT
*OldContext
);
1525 _IRQL_requires_max_(APC_LEVEL
)
1528 FltDeleteInstanceContext(
1529 _In_ PFLT_INSTANCE Instance
,
1530 _Outptr_opt_result_maybenull_ PFLT_CONTEXT
*OldContext
);
1532 _IRQL_requires_max_(APC_LEVEL
)
1535 FltDeleteFileContext(
1536 _In_ PFLT_INSTANCE Instance
,
1537 _In_ PFILE_OBJECT FileObject
,
1538 _Outptr_opt_result_maybenull_ PFLT_CONTEXT
*OldContext
);
1540 _IRQL_requires_max_(APC_LEVEL
)
1543 FltDeleteStreamContext(
1544 _In_ PFLT_INSTANCE Instance
,
1545 _In_ PFILE_OBJECT FileObject
,
1546 _Outptr_opt_result_maybenull_ PFLT_CONTEXT
*OldContext
);
1548 _IRQL_requires_max_(APC_LEVEL
)
1551 FltDeleteStreamHandleContext(
1552 _In_ PFLT_INSTANCE Instance
,
1553 _In_ PFILE_OBJECT FileObject
,
1554 _Outptr_opt_result_maybenull_ PFLT_CONTEXT
*OldContext
);
1556 _IRQL_requires_max_(APC_LEVEL
)
1559 FltGetVolumeContext(
1560 _In_ PFLT_FILTER Filter
,
1561 _In_ PFLT_VOLUME Volume
,
1562 _Outptr_ PFLT_CONTEXT
*Context
);
1564 _IRQL_requires_max_(APC_LEVEL
)
1567 FltGetInstanceContext(
1568 _In_ PFLT_INSTANCE Instance
,
1569 _Outptr_ PFLT_CONTEXT
*Context
);
1571 _IRQL_requires_max_(APC_LEVEL
)
1575 _In_ PFLT_INSTANCE Instance
,
1576 _In_ PFILE_OBJECT FileObject
,
1577 _Outptr_ PFLT_CONTEXT
*Context
);
1579 _IRQL_requires_max_(APC_LEVEL
)
1582 FltGetStreamContext(
1583 _In_ PFLT_INSTANCE Instance
,
1584 _In_ PFILE_OBJECT FileObject
,
1585 _Outptr_ PFLT_CONTEXT
*Context
);
1587 _IRQL_requires_max_(APC_LEVEL
)
1590 FltGetStreamHandleContext(
1591 _In_ PFLT_INSTANCE Instance
,
1592 _In_ PFILE_OBJECT FileObject
,
1593 _Outptr_ PFLT_CONTEXT
*Context
);
1595 _IRQL_requires_max_(DISPATCH_LEVEL
)
1598 FltReferenceContext(
1599 _In_ PFLT_CONTEXT Context
);
1601 _IRQL_requires_max_(DISPATCH_LEVEL
)
1605 _In_ PFLT_CONTEXT Context
);
1607 _IRQL_requires_max_(APC_LEVEL
)
1610 FltGetFilterFromName(
1611 _In_ PCUNICODE_STRING FilterName
,
1612 _Outptr_ PFLT_FILTER
*RetFilter
);
1614 _IRQL_requires_max_(PASSIVE_LEVEL
)
1617 FltGetVolumeFromName(
1618 _In_ PFLT_FILTER Filter
,
1619 _In_ PCUNICODE_STRING VolumeName
,
1620 _Outptr_ PFLT_VOLUME
*RetVolume
);
1622 _IRQL_requires_max_(APC_LEVEL
)
1625 FltGetVolumeInstanceFromName(
1626 _In_opt_ PFLT_FILTER Filter
,
1627 _In_ PFLT_VOLUME Volume
,
1628 _In_opt_ PCUNICODE_STRING InstanceName
,
1629 _Outptr_ PFLT_INSTANCE
*RetInstance
);
1631 _IRQL_requires_max_(APC_LEVEL
)
1634 FltGetVolumeFromInstance(
1635 _In_ PFLT_INSTANCE Instance
,
1636 _Outptr_ PFLT_VOLUME
*RetVolume
);
1638 _IRQL_requires_max_(APC_LEVEL
)
1641 FltGetFilterFromInstance(
1642 _In_ PFLT_INSTANCE Instance
,
1643 _Outptr_ PFLT_FILTER
*RetFilter
);
1645 _IRQL_requires_max_(APC_LEVEL
)
1648 FltGetVolumeFromFileObject(
1649 _In_ PFLT_FILTER Filter
,
1650 _In_ PFILE_OBJECT FileObject
,
1651 _Outptr_ PFLT_VOLUME
*RetVolume
);
1653 _IRQL_requires_max_(APC_LEVEL
)
1656 FltGetVolumeFromDeviceObject(
1657 _In_ PFLT_FILTER Filter
,
1658 _In_ PDEVICE_OBJECT DeviceObject
,
1659 _Outptr_ PFLT_VOLUME
*RetVolume
);
1661 _IRQL_requires_max_(DISPATCH_LEVEL
)
1665 _In_ PFLT_VOLUME Volume
,
1666 _Outptr_ PDEVICE_OBJECT
*DeviceObject
);
1668 _IRQL_requires_max_(DISPATCH_LEVEL
)
1671 FltGetDiskDeviceObject(
1672 _In_ PFLT_VOLUME Volume
,
1673 _Outptr_ PDEVICE_OBJECT
*DiskDeviceObject
);
1675 _IRQL_requires_max_(APC_LEVEL
)
1678 FltGetLowerInstance(
1679 _In_ PFLT_INSTANCE CurrentInstance
,
1680 _Outptr_ PFLT_INSTANCE
*LowerInstance
);
1682 _IRQL_requires_max_(APC_LEVEL
)
1685 FltGetUpperInstance(
1686 _In_ PFLT_INSTANCE CurrentInstance
,
1687 _Outptr_ PFLT_INSTANCE
*UpperInstance
);
1689 _IRQL_requires_max_(APC_LEVEL
)
1693 _In_ PFLT_VOLUME Volume
,
1694 _Outptr_ PFLT_INSTANCE
*Instance
);
1696 _IRQL_requires_max_(APC_LEVEL
)
1699 FltGetBottomInstance(
1700 _In_ PFLT_VOLUME Volume
,
1701 _Outptr_ PFLT_INSTANCE
*Instance
);
1705 FltCompareInstanceAltitudes(
1706 _In_ PFLT_INSTANCE Instance1
,
1707 _In_ PFLT_INSTANCE Instance2
);
1709 _IRQL_requires_max_(APC_LEVEL
)
1712 FltGetFilterInformation(
1713 _In_ PFLT_FILTER Filter
,
1714 _In_ FILTER_INFORMATION_CLASS InformationClass
,
1715 _Out_writes_bytes_to_opt_(BufferSize
, *BytesReturned
) PVOID Buffer
,
1716 _In_ ULONG BufferSize
,
1717 _Out_ PULONG BytesReturned
);
1719 _IRQL_requires_max_(APC_LEVEL
)
1722 FltGetInstanceInformation(
1723 _In_ PFLT_INSTANCE Instance
,
1724 _In_ INSTANCE_INFORMATION_CLASS InformationClass
,
1725 _Out_writes_bytes_to_opt_(BufferSize
,*BytesReturned
) PVOID Buffer
,
1726 _In_ ULONG BufferSize
,
1727 _Out_ PULONG BytesReturned
);
1729 _IRQL_requires_max_(APC_LEVEL
)
1732 FltGetVolumeProperties(
1733 _In_ PFLT_VOLUME Volume
,
1734 _Out_writes_bytes_to_opt_(VolumePropertiesLength
,*LengthReturned
) PFLT_VOLUME_PROPERTIES VolumeProperties
,
1735 _In_ ULONG VolumePropertiesLength
,
1736 _Out_ PULONG LengthReturned
);
1738 _Must_inspect_result_
1739 _IRQL_requires_max_(PASSIVE_LEVEL
)
1742 FltIsVolumeWritable(
1743 _In_ PVOID FltObject
,
1744 _Out_ PBOOLEAN IsWritable
);
1746 _Must_inspect_result_
1747 _IRQL_requires_max_(PASSIVE_LEVEL
)
1750 FltGetVolumeGuidName(
1751 _In_ PFLT_VOLUME Volume
,
1752 _Out_ PUNICODE_STRING VolumeGuidName
,
1753 _Out_opt_ PULONG BufferSizeNeeded
);
1755 _Must_inspect_result_
1756 _IRQL_requires_max_(PASSIVE_LEVEL
)
1759 FltQueryVolumeInformation(
1760 _In_ PFLT_INSTANCE Instance
,
1761 _Out_ PIO_STATUS_BLOCK Iosb
,
1762 _Out_writes_bytes_(Length
) PVOID FsInformation
,
1764 _In_ FS_INFORMATION_CLASS FsInformationClass
);
1766 _Must_inspect_result_
1767 _IRQL_requires_max_(PASSIVE_LEVEL
)
1770 FltSetVolumeInformation(
1771 _In_ PFLT_INSTANCE Instance
,
1772 _Out_ PIO_STATUS_BLOCK Iosb
,
1773 _Out_writes_bytes_(Length
) PVOID FsInformation
,
1775 _In_ FS_INFORMATION_CLASS FsInformationClass
);
1777 _Must_inspect_result_
1778 _IRQL_requires_max_(APC_LEVEL
)
1781 FltEnumerateFilters(
1782 _Out_writes_to_opt_(FilterListSize
,*NumberFiltersReturned
) PFLT_FILTER
*FilterList
,
1783 _In_ ULONG FilterListSize
,
1784 _Out_ PULONG NumberFiltersReturned
);
1786 _Must_inspect_result_
1787 _IRQL_requires_max_(APC_LEVEL
)
1790 FltEnumerateVolumes(
1791 _In_ PFLT_FILTER Filter
,
1792 _Out_writes_to_opt_(VolumeListSize
,*NumberVolumesReturned
) PFLT_VOLUME
*VolumeList
,
1793 _In_ ULONG VolumeListSize
,
1794 _Out_ PULONG NumberVolumesReturned
);
1796 _Must_inspect_result_
1797 _IRQL_requires_max_(APC_LEVEL
)
1800 FltEnumerateInstances(
1801 _In_opt_ PFLT_VOLUME Volume
,
1802 _In_opt_ PFLT_FILTER Filter
,
1803 _Out_writes_to_opt_(InstanceListSize
,*NumberInstancesReturned
) PFLT_INSTANCE
*InstanceList
,
1804 _In_ ULONG InstanceListSize
,
1805 _Out_ PULONG NumberInstancesReturned
);
1807 _Must_inspect_result_
1808 _IRQL_requires_max_(APC_LEVEL
)
1811 FltEnumerateFilterInformation(
1813 _In_ FILTER_INFORMATION_CLASS InformationClass
,
1814 _Out_writes_bytes_to_opt_(BufferSize
,*BytesReturned
) PVOID Buffer
,
1815 _In_ ULONG BufferSize
,
1816 _Out_ PULONG BytesReturned
);
1818 _Must_inspect_result_
1819 _IRQL_requires_max_(APC_LEVEL
)
1822 FltEnumerateInstanceInformationByFilter(
1823 _In_ PFLT_FILTER Filter
,
1825 _In_ INSTANCE_INFORMATION_CLASS InformationClass
,
1826 _Out_writes_bytes_to_opt_(BufferSize
,*BytesReturned
) PVOID Buffer
,
1827 _In_ ULONG BufferSize
,
1828 _Out_ PULONG BytesReturned
);
1830 _Must_inspect_result_
1831 _IRQL_requires_max_(APC_LEVEL
)
1834 FltEnumerateInstanceInformationByVolume(
1835 _In_ PFLT_VOLUME Volume
,
1837 _In_ INSTANCE_INFORMATION_CLASS InformationClass
,
1838 _Out_writes_bytes_to_opt_(BufferSize
,*BytesReturned
) PVOID Buffer
,
1839 _In_ ULONG BufferSize
,
1840 _Out_ PULONG BytesReturned
);
1842 _Must_inspect_result_
1843 _IRQL_requires_max_(APC_LEVEL
)
1846 FltEnumerateVolumeInformation(
1847 _In_ PFLT_FILTER Filter
,
1849 _In_ FILTER_VOLUME_INFORMATION_CLASS InformationClass
,
1850 _Out_writes_bytes_to_opt_(BufferSize
,*BytesReturned
) PVOID Buffer
,
1851 _In_ ULONG BufferSize
,
1852 _Out_ PULONG BytesReturned
);
1854 _Must_inspect_result_
1855 _IRQL_requires_max_(DISPATCH_LEVEL
)
1859 _Inout_ PVOID FltObject
);
1861 _IRQL_requires_max_(DISPATCH_LEVEL
)
1864 FltObjectDereference(
1865 _Inout_ PVOID FltObject
);
1867 _Must_inspect_result_
1868 _IRQL_requires_max_(PASSIVE_LEVEL
)
1871 FltCreateCommunicationPort(
1872 _In_ PFLT_FILTER Filter
,
1873 _Outptr_ PFLT_PORT
*ServerPort
,
1874 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
1875 _In_opt_ PVOID ServerPortCookie
,
1876 _In_ PFLT_CONNECT_NOTIFY ConnectNotifyCallback
,
1877 _In_ PFLT_DISCONNECT_NOTIFY DisconnectNotifyCallback
,
1878 _In_opt_ PFLT_MESSAGE_NOTIFY MessageNotifyCallback
,
1879 _In_ LONG MaxConnections
);
1881 _IRQL_requires_max_(PASSIVE_LEVEL
)
1884 FltCloseCommunicationPort(
1885 _In_ PFLT_PORT ServerPort
);
1887 _IRQL_requires_max_(PASSIVE_LEVEL
)
1891 _In_ PFLT_FILTER Filter
,
1892 _Outptr_ PFLT_PORT
*ClientPort
);
1894 _Must_inspect_result_
1895 _IRQL_requires_max_(APC_LEVEL
)
1899 _In_ PFLT_FILTER Filter
,
1900 _In_ PFLT_PORT
*ClientPort
,
1901 _In_reads_bytes_(SenderBufferLength
) PVOID SenderBuffer
,
1902 _In_ ULONG SenderBufferLength
,
1903 _Out_writes_bytes_opt_(*ReplyLength
) PVOID ReplyBuffer
,
1904 _Inout_opt_ PULONG ReplyLength
,
1905 _In_opt_ PLARGE_INTEGER Timeout
);
1907 _Must_inspect_result_
1908 _IRQL_requires_max_(APC_LEVEL
)
1911 FltBuildDefaultSecurityDescriptor(
1912 _Outptr_ PSECURITY_DESCRIPTOR
*SecurityDescriptor
,
1913 _In_ ACCESS_MASK DesiredAccess
);
1915 _IRQL_requires_max_(APC_LEVEL
)
1918 FltFreeSecurityDescriptor(
1919 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor
);
1921 _Must_inspect_result_
1922 _IRQL_requires_max_(DISPATCH_LEVEL
)
1926 _In_ PFLT_CALLBACK_DATA CallbackData
);
1928 _IRQL_requires_max_(DISPATCH_LEVEL
)
1931 FltSetCancelCompletion(
1932 _In_ PFLT_CALLBACK_DATA CallbackData
,
1933 _In_ PFLT_COMPLETE_CANCELED_CALLBACK CanceledCallback
);
1935 _Must_inspect_result_
1936 _IRQL_requires_max_(DISPATCH_LEVEL
)
1939 FltClearCancelCompletion(
1940 _In_ PFLT_CALLBACK_DATA CallbackData
);
1945 _In_ PFLT_CALLBACK_DATA CallbackData
);
1947 _Must_inspect_result_
1948 _IRQL_requires_max_(DISPATCH_LEVEL
)
1949 PFLT_DEFERRED_IO_WORKITEM
1951 FltAllocateDeferredIoWorkItem(VOID
);
1953 _IRQL_requires_max_(DISPATCH_LEVEL
)
1956 FltFreeDeferredIoWorkItem(
1957 _In_ PFLT_DEFERRED_IO_WORKITEM FltWorkItem
);
1959 _Must_inspect_result_
1960 _IRQL_requires_max_(DISPATCH_LEVEL
)
1961 PFLT_GENERIC_WORKITEM
1963 FltAllocateGenericWorkItem(VOID
);
1965 _IRQL_requires_max_(DISPATCH_LEVEL
)
1968 FltFreeGenericWorkItem(
1969 _In_ PFLT_GENERIC_WORKITEM FltWorkItem
);
1971 _Must_inspect_result_
1972 _IRQL_requires_max_(DISPATCH_LEVEL
)
1975 FltQueueDeferredIoWorkItem(
1976 _In_ PFLT_DEFERRED_IO_WORKITEM FltWorkItem
,
1977 _In_ PFLT_CALLBACK_DATA Data
,
1978 _In_ PFLT_DEFERRED_IO_WORKITEM_ROUTINE WorkerRoutine
,
1979 _In_ WORK_QUEUE_TYPE QueueType
,
1980 _In_ PVOID Context
);
1982 _Must_inspect_result_
1983 _IRQL_requires_max_(DISPATCH_LEVEL
)
1986 FltQueueGenericWorkItem(
1987 _In_ PFLT_GENERIC_WORKITEM FltWorkItem
,
1988 _In_ PVOID FltObject
,
1989 _In_ PFLT_GENERIC_WORKITEM_ROUTINE WorkerRoutine
,
1990 _In_ WORK_QUEUE_TYPE QueueType
,
1991 _In_opt_ PVOID Context
);
1993 _Must_inspect_result_
1994 _IRQL_requires_max_(APC_LEVEL
)
1998 _In_ PFLT_CALLBACK_DATA CallbackData
);
2002 FltDecodeParameters(
2003 _In_ PFLT_CALLBACK_DATA CallbackData
,
2004 _Outptr_opt_ PMDL
**MdlAddressPointer
,
2005 _Outptr_opt_result_bytebuffer_(**Length
) PVOID
**Buffer
,
2006 _Outptr_opt_ PULONG
*Length
,
2007 _Out_opt_ LOCK_OPERATION
*DesiredAccess
);
2011 FltGetSwappedBufferMdlAddress(
2012 _In_ PFLT_CALLBACK_DATA CallbackData
);
2016 FltRetainSwappedBufferMdlAddress(
2017 _In_ PFLT_CALLBACK_DATA CallbackData
);
2022 _In_ PFLT_INSTANCE Instance
,
2023 _Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq
,
2024 _In_ PFLT_CALLBACK_DATA_QUEUE_INSERT_IO CbdqInsertIo
,
2025 _In_ PFLT_CALLBACK_DATA_QUEUE_REMOVE_IO CbdqRemoveIo
,
2026 _In_ PFLT_CALLBACK_DATA_QUEUE_PEEK_NEXT_IO CbdqPeekNextIo
,
2027 _In_ PFLT_CALLBACK_DATA_QUEUE_ACQUIRE CbdqAcquire
,
2028 _In_ PFLT_CALLBACK_DATA_QUEUE_RELEASE CbdqRelease
,
2029 _In_ PFLT_CALLBACK_DATA_QUEUE_COMPLETE_CANCELED_IO CbdqCompleteCanceledIo
);
2034 _Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq
);
2039 _Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq
);
2041 _Must_inspect_result_
2045 _Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq
,
2046 _In_ PFLT_CALLBACK_DATA Cbd
,
2047 _In_opt_ PFLT_CALLBACK_DATA_QUEUE_IO_CONTEXT Context
,
2048 _In_opt_ PVOID InsertContext
);
2050 _Must_inspect_result_
2054 _Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq
,
2055 _In_ PFLT_CALLBACK_DATA_QUEUE_IO_CONTEXT Context
);
2057 _Must_inspect_result_
2060 FltCbdqRemoveNextIo(
2061 _Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq
,
2062 _In_opt_ PVOID PeekContext
);
2064 _IRQL_requires_max_(APC_LEVEL
)
2067 FltInitializeOplock(
2068 _Out_ POPLOCK Oplock
);
2070 _IRQL_requires_max_(APC_LEVEL
)
2073 FltUninitializeOplock(
2074 _In_ POPLOCK Oplock
);
2076 _Must_inspect_result_
2077 _IRQL_requires_max_(APC_LEVEL
)
2078 FLT_PREOP_CALLBACK_STATUS
2081 _In_ POPLOCK Oplock
,
2082 _In_ PFLT_CALLBACK_DATA CallbackData
,
2083 _In_ ULONG OpenCount
);
2085 _Must_inspect_result_
2086 _IRQL_requires_max_(APC_LEVEL
)
2087 FLT_PREOP_CALLBACK_STATUS
2090 _In_ POPLOCK Oplock
,
2091 _In_ PFLT_CALLBACK_DATA CallbackData
,
2092 _In_opt_ PVOID Context
,
2093 _In_opt_ PFLTOPLOCK_WAIT_COMPLETE_ROUTINE WaitCompletionRoutine
,
2094 _In_opt_ PFLTOPLOCK_PREPOST_CALLBACKDATA_ROUTINE PrePostCallbackDataRoutine
);
2096 _IRQL_requires_max_(APC_LEVEL
)
2099 FltOplockIsFastIoPossible(
2100 _In_ POPLOCK Oplock
);
2102 _IRQL_requires_max_(APC_LEVEL
)
2105 FltCurrentBatchOplock(
2106 _In_ POPLOCK Oplock
);
2110 FltInitializeFileLock(
2111 _Out_ PFILE_LOCK FileLock
);
2115 FltUninitializeFileLock(
2116 _In_ PFILE_LOCK FileLock
);
2118 _Must_inspect_result_
2119 _IRQL_requires_max_(APC_LEVEL
)
2122 FltAllocateFileLock(
2123 _In_opt_ PFLT_COMPLETE_LOCK_CALLBACK_DATA_ROUTINE CompleteLockCallbackDataRoutine
,
2124 _In_opt_ PUNLOCK_ROUTINE UnlockRoutine
);
2126 _IRQL_requires_max_(APC_LEVEL
)
2130 _In_ PFILE_LOCK FileLock
);
2132 _Must_inspect_result_
2133 _IRQL_requires_max_(APC_LEVEL
)
2134 FLT_PREOP_CALLBACK_STATUS
2137 _In_ PFILE_LOCK FileLock
,
2138 _In_ PFLT_CALLBACK_DATA CallbackData
,
2139 _In_opt_ PVOID Context
);
2141 _Must_inspect_result_
2142 _IRQL_requires_max_(APC_LEVEL
)
2145 FltCheckLockForReadAccess(
2146 _In_ PFILE_LOCK FileLock
,
2147 _In_ PFLT_CALLBACK_DATA CallbackData
);
2149 _Must_inspect_result_
2150 _IRQL_requires_max_(APC_LEVEL
)
2153 FltCheckLockForWriteAccess(
2154 _In_ PFILE_LOCK FileLock
,
2155 _In_ PFLT_CALLBACK_DATA CallbackData
);
2157 _Acquires_lock_(_Global_critical_region_
)
2158 _IRQL_requires_max_(APC_LEVEL
)
2161 FltAcquireResourceExclusive(
2162 _Inout_
_Requires_lock_not_held_(*_Curr_
) _Acquires_lock_(*_Curr_
) PERESOURCE Resource
);
2164 _Acquires_lock_(_Global_critical_region_
)
2165 _IRQL_requires_max_(APC_LEVEL
)
2168 FltAcquireResourceShared(
2169 _Inout_
_Requires_lock_not_held_(*_Curr_
) _Acquires_lock_(*_Curr_
) PERESOURCE Resource
);
2171 _Releases_lock_(_Global_critical_region_
)
2172 _IRQL_requires_max_(DISPATCH_LEVEL
)
2176 _Inout_
_Requires_lock_held_(*_Curr_
) _Releases_lock_(*_Curr_
) PERESOURCE Resource
);
2178 _IRQL_requires_max_(APC_LEVEL
)
2181 FltInitializePushLock(
2182 _Out_ PEX_PUSH_LOCK PushLock
);
2184 _IRQL_requires_max_(APC_LEVEL
)
2188 _In_ PEX_PUSH_LOCK PushLock
);
2190 _Acquires_lock_(_Global_critical_region_
)
2191 _IRQL_requires_max_(APC_LEVEL
)
2194 FltAcquirePushLockExclusive(
2195 _Inout_
_Requires_lock_not_held_(*_Curr_
) _Acquires_lock_(*_Curr_
) PEX_PUSH_LOCK PushLock
);
2197 _Acquires_lock_(_Global_critical_region_
)
2198 _IRQL_requires_max_(APC_LEVEL
)
2201 FltAcquirePushLockShared(
2202 _Inout_
_Requires_lock_not_held_(*_Curr_
) _Acquires_lock_(*_Curr_
) PEX_PUSH_LOCK PushLock
);
2204 _Releases_lock_(_Global_critical_region_
)
2205 _IRQL_requires_max_(APC_LEVEL
)
2209 _Inout_
_Requires_lock_held_(*_Curr_
) _Releases_lock_(*_Curr_
) PEX_PUSH_LOCK PushLock
);
2213 FltIsOperationSynchronous(
2214 _In_ PFLT_CALLBACK_DATA CallbackData
);
2216 _IRQL_requires_max_(DISPATCH_LEVEL
)
2220 _In_opt_ PFLT_CALLBACK_DATA CallbackData
);
2222 _IRQL_requires_max_(DISPATCH_LEVEL
)
2225 FltGetRequestorProcess(
2226 _In_ PFLT_CALLBACK_DATA CallbackData
);
2228 _IRQL_requires_max_(DISPATCH_LEVEL
)
2231 FltGetRequestorProcessId(
2232 _In_ PFLT_CALLBACK_DATA CallbackData
);
2234 _IRQL_requires_max_(APC_LEVEL
)
2237 FltNotifyFilterChangeDirectory(
2238 _Inout_ PNOTIFY_SYNC NotifySync
,
2239 _Inout_ PLIST_ENTRY NotifyList
,
2240 _In_ PVOID FsContext
,
2241 _In_ PSTRING FullDirectoryName
,
2242 _In_ BOOLEAN WatchTree
,
2243 _In_ BOOLEAN IgnoreBuffer
,
2244 _In_ ULONG CompletionFilter
,
2245 _In_ PFLT_CALLBACK_DATA NotifyCallbackData
,
2246 _In_opt_ PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback
,
2247 _In_opt_ PSECURITY_SUBJECT_CONTEXT SubjectContext
,
2248 _In_opt_ PFILTER_REPORT_CHANGE FilterCallback
);
2253 _In_ UCHAR IrpMajorCode
);
2255 #if FLT_MGR_AFTER_XPSP2
2257 _Must_inspect_result_
2258 _IRQL_requires_max_(PASSIVE_LEVEL
)
2262 _In_ PFLT_FILTER Filter
,
2263 _In_opt_ PFLT_INSTANCE Instance
,
2264 _Out_ PHANDLE FileHandle
,
2265 _Outptr_opt_ PFILE_OBJECT
*FileObject
,
2266 _In_ ACCESS_MASK DesiredAccess
,
2267 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
2268 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
2269 _In_opt_ PLARGE_INTEGER AllocationSize
,
2270 _In_ ULONG FileAttributes
,
2271 _In_ ULONG ShareAccess
,
2272 _In_ ULONG CreateDisposition
,
2273 _In_ ULONG CreateOptions
,
2274 _In_reads_bytes_opt_(EaLength
) PVOID EaBuffer
,
2275 _In_ ULONG EaLength
,
2278 _Must_inspect_result_
2279 _IRQL_requires_max_(PASSIVE_LEVEL
)
2283 _In_ PFLT_INSTANCE Instance
,
2284 _Out_ PHANDLE VolumeHandle
,
2285 _Outptr_opt_ PFILE_OBJECT
*VolumeFileObject
);
2287 _Must_inspect_result_
2288 _IRQL_requires_max_(PASSIVE_LEVEL
)
2292 _In_ PFLT_INSTANCE Instance
,
2293 _In_ PFILE_OBJECT FileObject
,
2294 _Out_writes_bytes_to_(Length
,*LengthReturned
) PVOID ReturnedEaData
,
2296 _In_ BOOLEAN ReturnSingleEntry
,
2297 _In_reads_bytes_opt_(EaListLength
) PVOID EaList
,
2298 _In_ ULONG EaListLength
,
2299 _In_opt_ PULONG EaIndex
,
2300 _In_ BOOLEAN RestartScan
,
2301 _Out_opt_ PULONG LengthReturned
);
2303 _Must_inspect_result_
2304 _IRQL_requires_max_(PASSIVE_LEVEL
)
2308 _In_ PFLT_INSTANCE Instance
,
2309 _In_ PFILE_OBJECT FileObject
,
2310 _In_reads_bytes_(Length
) PVOID EaBuffer
,
2313 #endif /* FLT_MGR_AFTER_XPSP2 */
2315 #if FLT_MGR_LONGHORN
2317 _Must_inspect_result_
2318 _IRQL_requires_max_(PASSIVE_LEVEL
)
2322 _In_ PFLT_FILTER Filter
,
2323 _In_opt_ PFLT_INSTANCE Instance
,
2324 _Out_ PHANDLE FileHandle
,
2325 _Outptr_opt_ PFILE_OBJECT
*FileObject
,
2326 _In_ ACCESS_MASK DesiredAccess
,
2327 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
2328 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
2329 _In_opt_ PLARGE_INTEGER AllocationSize
,
2330 _In_ ULONG FileAttributes
,
2331 _In_ ULONG ShareAccess
,
2332 _In_ ULONG CreateDisposition
,
2333 _In_ ULONG CreateOptions
,
2334 _In_reads_bytes_opt_(EaLength
) PVOID EaBuffer
,
2335 _In_ ULONG EaLength
,
2337 _In_opt_ PIO_DRIVER_CREATE_CONTEXT DriverContext
);
2339 _Must_inspect_result_
2340 _IRQL_requires_max_(PASSIVE_LEVEL
)
2343 FltQueryDirectoryFile(
2344 _In_ PFLT_INSTANCE Instance
,
2345 _In_ PFILE_OBJECT FileObject
,
2346 _Out_writes_bytes_(Length
) PVOID FileInformation
,
2348 _In_ FILE_INFORMATION_CLASS FileInformationClass
,
2349 _In_ BOOLEAN ReturnSingleEntry
,
2350 _In_opt_ PUNICODE_STRING FileName
,
2351 _In_ BOOLEAN RestartScan
,
2352 _Out_opt_ PULONG LengthReturned
);
2354 _IRQL_requires_max_(APC_LEVEL
)
2357 FltSupportsFileContextsEx(
2358 _In_ PFILE_OBJECT FileObject
,
2359 _In_opt_ PFLT_INSTANCE Instance
);
2361 _IRQL_requires_max_(APC_LEVEL
)
2364 FltSetTransactionContext(
2365 _In_ PFLT_INSTANCE Instance
,
2366 _In_ PKTRANSACTION Transaction
,
2367 _In_ FLT_SET_CONTEXT_OPERATION Operation
,
2368 _In_ PFLT_CONTEXT NewContext
,
2369 _Outptr_opt_ PFLT_CONTEXT
*OldContext
);
2371 _IRQL_requires_max_(APC_LEVEL
)
2374 FltDeleteTransactionContext(
2375 _In_ PFLT_INSTANCE Instance
,
2376 _In_ PKTRANSACTION Transaction
,
2377 _Outptr_opt_ PFLT_CONTEXT
*OldContext
);
2379 _IRQL_requires_max_(APC_LEVEL
)
2382 FltGetTransactionContext(
2383 _In_ PFLT_INSTANCE Instance
,
2384 _In_ PKTRANSACTION Transaction
,
2385 _Outptr_ PFLT_CONTEXT
*Context
);
2387 _IRQL_requires_max_(APC_LEVEL
)
2390 FltIsFltMgrVolumeDeviceObject(
2391 _In_ PDEVICE_OBJECT DeviceObject
);
2393 _IRQL_requires_max_(APC_LEVEL
)
2396 FltGetVolumeInformation(
2397 _In_ PFLT_VOLUME Volume
,
2398 _In_ FILTER_VOLUME_INFORMATION_CLASS InformationClass
,
2399 _Out_writes_bytes_to_opt_(BufferSize
,*BytesReturned
) PVOID Buffer
,
2400 _In_ ULONG BufferSize
,
2401 _Out_ PULONG BytesReturned
);
2403 _IRQL_requires_max_(APC_LEVEL
)
2406 FltGetFileSystemType(
2407 _In_ PVOID FltObject
,
2408 _Out_ PFLT_FILESYSTEM_TYPE FileSystemType
);
2410 _Must_inspect_result_
2411 _IRQL_requires_max_(PASSIVE_LEVEL
)
2414 FltIsVolumeSnapshot(
2415 _In_ PVOID FltObject
,
2416 _Out_ PBOOLEAN IsSnapshotVolume
);
2418 _Must_inspect_result_
2419 _When_(((CallbackData
!=NULL
) && FLT_IS_IRP_OPERATION(CallbackData
)), _IRQL_requires_max_(PASSIVE_LEVEL
))
2420 _When_((!((CallbackData
!=NULL
) && FLT_IS_IRP_OPERATION(CallbackData
))), _IRQL_requires_max_(APC_LEVEL
))
2423 FltCancellableWaitForSingleObject(
2425 _In_opt_ PLARGE_INTEGER Timeout
,
2426 _In_opt_ PFLT_CALLBACK_DATA CallbackData
);
2428 _Must_inspect_result_
2429 _When_(((CallbackData
!=NULL
) && FLT_IS_IRP_OPERATION(CallbackData
)), _IRQL_requires_max_(PASSIVE_LEVEL
))
2430 _When_((!((CallbackData
!=NULL
) && FLT_IS_IRP_OPERATION(CallbackData
))), _IRQL_requires_max_(APC_LEVEL
))
2433 FltCancellableWaitForMultipleObjects(
2435 _In_reads_(Count
) PVOID ObjectArray
[],
2436 _In_ WAIT_TYPE WaitType
,
2437 _In_opt_ PLARGE_INTEGER Timeout
,
2438 _In_opt_ PKWAIT_BLOCK WaitBlockArray
,
2439 _In_ PFLT_CALLBACK_DATA CallbackData
);
2441 _IRQL_requires_max_(DISPATCH_LEVEL
)
2444 FltGetRequestorProcessIdEx(
2445 _In_ PFLT_CALLBACK_DATA CallbackData
);
2447 _Must_inspect_result_
2448 _IRQL_requires_max_(APC_LEVEL
)
2451 FltEnlistInTransaction(
2452 _In_ PFLT_INSTANCE Instance
,
2453 _In_ PKTRANSACTION Transaction
,
2454 _In_ PFLT_CONTEXT TransactionContext
,
2455 _In_ NOTIFICATION_MASK NotificationMask
);
2457 _IRQL_requires_max_(APC_LEVEL
)
2460 FltRollbackEnlistment(
2461 _In_ PFLT_INSTANCE Instance
,
2462 _In_ PKTRANSACTION Transaction
,
2463 _In_opt_ PFLT_CONTEXT TransactionContext
);
2465 _IRQL_requires_max_(APC_LEVEL
)
2468 FltPrePrepareComplete(
2469 _In_ PFLT_INSTANCE Instance
,
2470 _In_ PKTRANSACTION Transaction
,
2471 _In_opt_ PFLT_CONTEXT TransactionContext
);
2473 _IRQL_requires_max_(APC_LEVEL
)
2477 _In_ PFLT_INSTANCE Instance
,
2478 _In_ PKTRANSACTION Transaction
,
2479 _In_opt_ PFLT_CONTEXT TransactionContext
);
2481 _IRQL_requires_max_(PASSIVE_LEVEL
)
2485 _In_ PFLT_INSTANCE Instance
,
2486 _In_ PKTRANSACTION Transaction
,
2487 _In_opt_ PFLT_CONTEXT TransactionContext
);
2489 _IRQL_requires_max_(APC_LEVEL
)
2492 FltCommitFinalizeComplete(
2493 _In_ PFLT_INSTANCE Instance
,
2494 _In_ PKTRANSACTION Transaction
,
2495 _In_opt_ PFLT_CONTEXT TransactionContext
);
2497 _IRQL_requires_max_(PASSIVE_LEVEL
)
2500 FltRollbackComplete(
2501 _In_ PFLT_INSTANCE Instance
,
2502 _In_ PKTRANSACTION Transaction
,
2503 _In_opt_ PFLT_CONTEXT TransactionContext
);
2505 _Must_inspect_result_
2506 _IRQL_requires_max_(APC_LEVEL
)
2509 FltAllocateExtraCreateParameterList(
2510 _In_ PFLT_FILTER Filter
,
2511 _In_ FSRTL_ALLOCATE_ECPLIST_FLAGS Flags
,
2512 _Outptr_ PECP_LIST
*EcpList
);
2514 _Must_inspect_result_
2515 _IRQL_requires_max_(APC_LEVEL
)
2518 FltAllocateExtraCreateParameter(
2519 _In_ PFLT_FILTER Filter
,
2520 _In_ LPCGUID EcpType
,
2521 ULONG SizeOfContext
,
2522 _In_ FSRTL_ALLOCATE_ECP_FLAGS Flags
,
2523 _In_opt_ PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback
,
2525 _Outptr_ PVOID
*EcpContext
);
2527 _IRQL_requires_max_(APC_LEVEL
)
2530 FltInitExtraCreateParameterLookasideList(
2531 _In_ PFLT_FILTER Filter
,
2532 _Inout_ PVOID Lookaside
,
2533 _In_ FSRTL_ECP_LOOKASIDE_FLAGS Flags
,
2537 _IRQL_requires_max_(APC_LEVEL
)
2540 FltDeleteExtraCreateParameterLookasideList(
2541 _In_ PFLT_FILTER Filter
,
2542 _Inout_ PVOID Lookaside
,
2543 _In_ FSRTL_ECP_LOOKASIDE_FLAGS Flags
);
2545 _Must_inspect_result_
2546 _IRQL_requires_max_(APC_LEVEL
)
2549 FltAllocateExtraCreateParameterFromLookasideList(
2550 _In_ PFLT_FILTER Filter
,
2551 _In_ LPCGUID EcpType
,
2552 _In_ ULONG SizeOfContext
,
2553 _In_ FSRTL_ALLOCATE_ECP_FLAGS Flags
,
2554 _In_opt_ PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback
,
2555 _Inout_ PVOID LookasideList
,
2556 _Outptr_ PVOID
*EcpContext
);
2558 _IRQL_requires_max_(APC_LEVEL
)
2561 FltInsertExtraCreateParameter(
2562 _In_ PFLT_FILTER Filter
,
2563 _Inout_ PECP_LIST EcpList
,
2564 _Inout_ PVOID EcpContext
);
2566 _IRQL_requires_max_(APC_LEVEL
)
2569 FltFindExtraCreateParameter(
2570 _In_ PFLT_FILTER Filter
,
2571 _In_ PECP_LIST EcpList
,
2572 _In_ LPCGUID EcpType
,
2573 _Outptr_opt_ PVOID
*EcpContext
,
2574 _Out_opt_ ULONG
*EcpContextSize
);
2576 _IRQL_requires_max_(APC_LEVEL
)
2579 FltRemoveExtraCreateParameter(
2580 _In_ PFLT_FILTER Filter
,
2581 _Inout_ PECP_LIST EcpList
,
2582 _In_ LPCGUID EcpType
,
2583 _Outptr_ PVOID
*EcpContext
,
2584 _Out_opt_ ULONG
*EcpContextSize
);
2586 _IRQL_requires_max_(APC_LEVEL
)
2589 FltFreeExtraCreateParameterList(
2590 _In_ PFLT_FILTER Filter
,
2591 _In_ PECP_LIST EcpList
);
2593 _IRQL_requires_max_(APC_LEVEL
)
2596 FltFreeExtraCreateParameter(
2597 _In_ PFLT_FILTER Filter
,
2598 _In_ PVOID EcpContext
);
2600 _IRQL_requires_max_(APC_LEVEL
)
2603 FltGetEcpListFromCallbackData(
2604 _In_ PFLT_FILTER Filter
,
2605 _In_ PFLT_CALLBACK_DATA CallbackData
,
2606 _Outptr_result_maybenull_ PECP_LIST
*EcpList
);
2608 _IRQL_requires_max_(APC_LEVEL
)
2611 FltSetEcpListIntoCallbackData(
2612 _In_ PFLT_FILTER Filter
,
2613 _In_ PFLT_CALLBACK_DATA CallbackData
,
2614 _In_ PECP_LIST EcpList
);
2616 _IRQL_requires_max_(APC_LEVEL
)
2619 FltGetNextExtraCreateParameter(
2620 _In_ PFLT_FILTER Filter
,
2621 _In_ PECP_LIST EcpList
,
2622 _In_opt_ PVOID CurrentEcpContext
,
2623 _Out_opt_ LPGUID NextEcpType
,
2624 _Outptr_opt_ PVOID
*NextEcpContext
,
2625 _Out_opt_ ULONG
*NextEcpContextSize
);
2627 _IRQL_requires_max_(APC_LEVEL
)
2631 _In_ PFLT_FILTER Filter
,
2632 _In_ PVOID EcpContext
);
2634 _IRQL_requires_max_(APC_LEVEL
)
2637 FltIsEcpAcknowledged(
2638 _In_ PFLT_FILTER Filter
,
2639 _In_ PVOID EcpContext
);
2641 _IRQL_requires_max_(APC_LEVEL
)
2644 FltIsEcpFromUserMode(
2645 _In_ PFLT_FILTER Filter
,
2646 _In_ PVOID EcpContext
);
2648 _IRQL_requires_max_(DISPATCH_LEVEL
)
2651 FltRetrieveIoPriorityInfo(
2652 _In_opt_ PFLT_CALLBACK_DATA Data
,
2653 _In_opt_ PFILE_OBJECT FileObject
,
2654 _In_opt_ PETHREAD Thread
,
2655 _Inout_ PIO_PRIORITY_INFO PriorityInfo
);
2657 _IRQL_requires_max_(DISPATCH_LEVEL
)
2660 FltApplyPriorityInfoThread(
2661 _In_ PIO_PRIORITY_INFO InputPriorityInfo
,
2662 _Out_opt_ PIO_PRIORITY_INFO OutputPriorityInfo
,
2663 _In_ PETHREAD Thread
);
2665 _IRQL_requires_max_(DISPATCH_LEVEL
)
2668 FltGetIoPriorityHint(
2669 _In_ PFLT_CALLBACK_DATA Data
);
2671 _IRQL_requires_max_(DISPATCH_LEVEL
)
2674 FltGetIoPriorityHintFromCallbackData(
2675 _In_ PFLT_CALLBACK_DATA Data
);
2677 _IRQL_requires_max_(DISPATCH_LEVEL
)
2680 FltSetIoPriorityHintIntoCallbackData(
2681 _In_ PFLT_CALLBACK_DATA Data
,
2682 _In_ IO_PRIORITY_HINT PriorityHint
);
2684 _IRQL_requires_max_(DISPATCH_LEVEL
)
2687 FltGetIoPriorityHintFromFileObject(
2688 _In_ PFILE_OBJECT FileObject
);
2690 _Must_inspect_result_
2691 _IRQL_requires_max_(DISPATCH_LEVEL
)
2694 FltSetIoPriorityHintIntoFileObject(
2695 _In_ PFILE_OBJECT FileObject
,
2696 _In_ IO_PRIORITY_HINT PriorityHint
);
2698 _IRQL_requires_max_(DISPATCH_LEVEL
)
2701 FltGetIoPriorityHintFromThread(
2702 _In_ PETHREAD Thread
);
2704 _IRQL_requires_max_(DISPATCH_LEVEL
)
2707 FltSetIoPriorityHintIntoThread(
2708 _In_ PETHREAD Thread
,
2709 _In_ IO_PRIORITY_HINT PriorityHint
);
2711 #endif /* FLT_MGR_LONGHORN */
2715 _Must_inspect_result_
2716 _IRQL_requires_max_(APC_LEVEL
)
2719 FltAllocateCallbackDataEx(
2720 _In_ PFLT_INSTANCE Instance
,
2721 _In_opt_ PFILE_OBJECT FileObject
,
2722 _In_ FLT_ALLOCATE_CALLBACK_DATA_FLAGS Flags
,
2723 _Outptr_ PFLT_CALLBACK_DATA
*RetNewCallbackData
);
2725 _Must_inspect_result_
2726 _IRQL_requires_max_(DPC_LEVEL
)
2729 FltGetNewSystemBufferAddress(
2730 _In_ PFLT_CALLBACK_DATA CallbackData
);
2732 _Must_inspect_result_
2733 _IRQL_requires_max_(APC_LEVEL
)
2734 FLT_PREOP_CALLBACK_STATUS
2737 _In_ POPLOCK Oplock
,
2738 _In_ PFLT_CALLBACK_DATA CallbackData
,
2740 _In_opt_ PVOID Context
,
2741 _In_opt_ PFLTOPLOCK_WAIT_COMPLETE_ROUTINE WaitCompletionRoutine
,
2742 _In_opt_ PFLTOPLOCK_PREPOST_CALLBACKDATA_ROUTINE PrePostCallbackDataRoutine
);
2744 _IRQL_requires_max_(APC_LEVEL
)
2748 _In_ POPLOCK Oplock
);
2750 _IRQL_requires_max_(APC_LEVEL
)
2754 _In_ POPLOCK Oplock
);
2756 _IRQL_requires_max_(APC_LEVEL
)
2757 FLT_PREOP_CALLBACK_STATUS
2760 _In_ POPLOCK Oplock
,
2761 _In_ PFLT_CALLBACK_DATA CallbackData
,
2763 _In_opt_ PVOID Context
,
2764 _In_opt_ PFLTOPLOCK_WAIT_COMPLETE_ROUTINE WaitCompletionRoutine
,
2765 _In_opt_ PFLTOPLOCK_PREPOST_CALLBACKDATA_ROUTINE PrePostCallbackDataRoutine
);
2767 _IRQL_requires_max_(APC_LEVEL
)
2768 FLT_PREOP_CALLBACK_STATUS
2770 FltOplockBreakToNone(
2771 _In_ POPLOCK Oplock
,
2772 _In_ PFLT_CALLBACK_DATA CallbackData
,
2773 _In_opt_ PVOID Context
,
2774 _In_opt_ PFLTOPLOCK_WAIT_COMPLETE_ROUTINE WaitCompletionRoutine
,
2775 _In_opt_ PFLTOPLOCK_PREPOST_CALLBACKDATA_ROUTINE PrePostCallbackDataRoutine
);
2777 _IRQL_requires_max_(APC_LEVEL
)
2778 FLT_PREOP_CALLBACK_STATUS
2780 FltOplockBreakToNoneEx(
2781 _In_ POPLOCK Oplock
,
2782 _In_ PFLT_CALLBACK_DATA CallbackData
,
2784 _In_opt_ PVOID Context
,
2785 _In_opt_ PFLTOPLOCK_WAIT_COMPLETE_ROUTINE WaitCompletionRoutine
,
2786 _In_opt_ PFLTOPLOCK_PREPOST_CALLBACKDATA_ROUTINE PrePostCallbackDataRoutine
);
2788 _IRQL_requires_max_(APC_LEVEL
)
2791 FltOplockIsSharedRequest(
2792 _In_ PFLT_CALLBACK_DATA CallbackData
);
2794 _Must_inspect_result_
2795 _IRQL_requires_max_(APC_LEVEL
)
2796 FLT_PREOP_CALLBACK_STATUS
2799 _In_ POPLOCK Oplock
,
2800 _In_ PFLT_CALLBACK_DATA CallbackData
,
2801 _In_ ULONG OpenCount
,
2807 _In_opt_ PFILE_OBJECT Fo1
,
2808 _In_opt_ PFILE_OBJECT Fo2
);
2810 _Must_inspect_result_
2811 _IRQL_requires_max_(APC_LEVEL
)
2814 FltGetRequestorSessionId(
2815 _In_ PFLT_CALLBACK_DATA CallbackData
,
2816 _Out_ PULONG SessionId
);
2818 _IRQL_requires_max_(DISPATCH_LEVEL
)
2821 FltAdjustDeviceStackSizeForIoRedirection(
2822 _In_ PFLT_INSTANCE SourceInstance
,
2823 _In_ PFLT_INSTANCE TargetInstance
,
2824 _Out_opt_ PBOOLEAN SourceDeviceStackSizeModified
);
2826 _IRQL_requires_max_(DISPATCH_LEVEL
)
2829 FltIsIoRedirectionAllowed(
2830 _In_ PFLT_INSTANCE SourceInstance
,
2831 _In_ PFLT_INSTANCE TargetInstance
,
2832 _Out_ PBOOLEAN RedirectionAllowed
);
2834 _IRQL_requires_max_(DISPATCH_LEVEL
)
2837 FltIsIoRedirectionAllowedForOperation(
2838 _In_ PFLT_CALLBACK_DATA Data
,
2839 _In_ PFLT_INSTANCE TargetInstance
,
2840 _Out_ PBOOLEAN RedirectionAllowedThisIo
,
2841 _Out_opt_ PBOOLEAN RedirectionAllowedAllIo
);
2843 #endif /* FLT_MGR_WIN7 */
2845 #endif /* FLT_MGR_BASELINE */
2851 #endif /* __FLTKERNEL__ */