mirror of
https://github.com/reactos/reactos.git
synced 2024-11-01 12:26:32 +00:00
2851 lines
75 KiB
C
2851 lines
75 KiB
C
/*
|
|
* fltkernel.h
|
|
*
|
|
* This file is part of the ReactOS DDK package.
|
|
*
|
|
* Contributors:
|
|
* Amine Khaldi (amine.khaldi@reactos.org)
|
|
*
|
|
* THIS SOFTWARE IS NOT COPYRIGHTED
|
|
*
|
|
* This source code is offered for use in the public domain. You may
|
|
* use, modify or distribute it freely.
|
|
*
|
|
* This code is distributed in the hope that it will be useful but
|
|
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
|
* DISCLAIMED. This includes but is not limited to warranties of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
*
|
|
*/
|
|
#pragma once
|
|
|
|
#ifndef __FLTKERNEL__
|
|
#define __FLTKERNEL__
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#define FLT_MGR_BASELINE (((OSVER(NTDDI_VERSION) == NTDDI_WIN2K) && (SPVER(NTDDI_VERSION) >= SPVER(NTDDI_WIN2KSP4))) || \
|
|
((OSVER(NTDDI_VERSION) == NTDDI_WINXP) && (SPVER(NTDDI_VERSION) >= SPVER(NTDDI_WINXPSP2))) || \
|
|
((OSVER(NTDDI_VERSION) == NTDDI_WS03) && (SPVER(NTDDI_VERSION) >= SPVER(NTDDI_WS03SP1))) || \
|
|
(NTDDI_VERSION >= NTDDI_VISTA))
|
|
|
|
#define FLT_MGR_AFTER_XPSP2 (((OSVER(NTDDI_VERSION) == NTDDI_WIN2K) && (SPVER(NTDDI_VERSION) >= SPVER(NTDDI_WIN2KSP4))) || \
|
|
((OSVER(NTDDI_VERSION) == NTDDI_WINXP) && (SPVER(NTDDI_VERSION) > SPVER(NTDDI_WINXPSP2))) || \
|
|
((OSVER(NTDDI_VERSION) == NTDDI_WS03) && (SPVER(NTDDI_VERSION) >= SPVER(NTDDI_WS03SP1))) || \
|
|
(NTDDI_VERSION >= NTDDI_VISTA))
|
|
|
|
#define FLT_MGR_LONGHORN (NTDDI_VERSION >= NTDDI_VISTA)
|
|
#define FLT_MGR_WIN7 (NTDDI_VERSION >= NTDDI_WIN7)
|
|
|
|
#include <ntifs.h>
|
|
#include <fltuserstructures.h>
|
|
#include <initguid.h>
|
|
|
|
#if FLT_MGR_BASELINE
|
|
|
|
#if FLT_MGR_LONGHORN
|
|
#define FLT_ASSERT(_e) NT_ASSERT(_e)
|
|
#define FLT_ASSERTMSG(_m, _e) NT_ASSERTMSG(_m, _e)
|
|
#else
|
|
#define FLT_ASSERT(_e) ASSERT(_e)
|
|
#define FLT_ASSERTMSG(_m, _e) ASSERTMSG(_m, _e)
|
|
#endif /* FLT_MGR_LONGHORN */
|
|
|
|
#define Add2Ptr(P,I) ((PVOID)((PUCHAR)(P) + (I)))
|
|
#define PtrOffset(B,O) ((ULONG)((ULONG_PTR)(O) - (ULONG_PTR)(B)))
|
|
|
|
#define ROUND_TO_SIZE(_length, _alignment) \
|
|
((((ULONG_PTR)(_length)) + ((_alignment)-1)) & ~(ULONG_PTR) ((_alignment) - 1))
|
|
|
|
#define IS_ALIGNED(_pointer, _alignment) \
|
|
((((ULONG_PTR) (_pointer)) & ((_alignment) - 1)) == 0)
|
|
|
|
#define IRP_MJ_ACQUIRE_FOR_SECTION_SYNCHRONIZATION ((UCHAR)-1)
|
|
#define IRP_MJ_RELEASE_FOR_SECTION_SYNCHRONIZATION ((UCHAR)-2)
|
|
#define IRP_MJ_ACQUIRE_FOR_MOD_WRITE ((UCHAR)-3)
|
|
#define IRP_MJ_RELEASE_FOR_MOD_WRITE ((UCHAR)-4)
|
|
#define IRP_MJ_ACQUIRE_FOR_CC_FLUSH ((UCHAR)-5)
|
|
#define IRP_MJ_RELEASE_FOR_CC_FLUSH ((UCHAR)-6)
|
|
#define IRP_MJ_FAST_IO_CHECK_IF_POSSIBLE ((UCHAR)-13)
|
|
#define IRP_MJ_NETWORK_QUERY_OPEN ((UCHAR)-14)
|
|
#define IRP_MJ_MDL_READ ((UCHAR)-15)
|
|
#define IRP_MJ_MDL_READ_COMPLETE ((UCHAR)-16)
|
|
#define IRP_MJ_PREPARE_MDL_WRITE ((UCHAR)-17)
|
|
#define IRP_MJ_MDL_WRITE_COMPLETE ((UCHAR)-18)
|
|
#define IRP_MJ_VOLUME_MOUNT ((UCHAR)-19)
|
|
#define IRP_MJ_VOLUME_DISMOUNT ((UCHAR)-20)
|
|
#define IRP_MJ_OPERATION_END ((UCHAR)0x80)
|
|
#define FLT_INTERNAL_OPERATION_COUNT 22
|
|
|
|
#define NULL_CONTEXT ((PFLT_CONTEXT)NULL)
|
|
|
|
typedef struct _FLT_FILTER *PFLT_FILTER;
|
|
typedef struct _FLT_VOLUME *PFLT_VOLUME;
|
|
typedef struct _FLT_INSTANCE *PFLT_INSTANCE;
|
|
typedef struct _FLT_PORT *PFLT_PORT;
|
|
|
|
typedef PVOID PFLT_CONTEXT;
|
|
|
|
#if !FLT_MGR_LONGHORN
|
|
typedef struct _KTRANSACTION *PKTRANSACTION;
|
|
#endif
|
|
|
|
#if !defined(_AMD64_) && !defined(_IA64_) && !defined(_ARM_)
|
|
#include "pshpack4.h"
|
|
#endif
|
|
|
|
typedef union _FLT_PARAMETERS {
|
|
struct {
|
|
PIO_SECURITY_CONTEXT SecurityContext;
|
|
ULONG Options;
|
|
USHORT POINTER_ALIGNMENT FileAttributes;
|
|
USHORT ShareAccess;
|
|
ULONG POINTER_ALIGNMENT EaLength;
|
|
PVOID EaBuffer;
|
|
LARGE_INTEGER AllocationSize;
|
|
} Create;
|
|
struct {
|
|
PIO_SECURITY_CONTEXT SecurityContext;
|
|
ULONG Options;
|
|
USHORT POINTER_ALIGNMENT Reserved;
|
|
USHORT ShareAccess;
|
|
PVOID Parameters;
|
|
} CreatePipe;
|
|
struct {
|
|
PIO_SECURITY_CONTEXT SecurityContext;
|
|
ULONG Options;
|
|
USHORT POINTER_ALIGNMENT Reserved;
|
|
USHORT ShareAccess;
|
|
PVOID Parameters;
|
|
} CreateMailslot;
|
|
struct {
|
|
ULONG Length;
|
|
ULONG POINTER_ALIGNMENT Key;
|
|
LARGE_INTEGER ByteOffset;
|
|
PVOID ReadBuffer;
|
|
PMDL MdlAddress;
|
|
} Read;
|
|
struct {
|
|
ULONG Length;
|
|
ULONG POINTER_ALIGNMENT Key;
|
|
LARGE_INTEGER ByteOffset;
|
|
PVOID WriteBuffer;
|
|
PMDL MdlAddress;
|
|
} Write;
|
|
struct {
|
|
ULONG Length;
|
|
FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass;
|
|
PVOID InfoBuffer;
|
|
} QueryFileInformation;
|
|
struct {
|
|
ULONG Length;
|
|
FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass;
|
|
PFILE_OBJECT ParentOfTarget;
|
|
_ANONYMOUS_UNION union {
|
|
_ANONYMOUS_STRUCT struct {
|
|
BOOLEAN ReplaceIfExists;
|
|
BOOLEAN AdvanceOnly;
|
|
} DUMMYSTRUCTNAME;
|
|
ULONG ClusterCount;
|
|
HANDLE DeleteHandle;
|
|
} DUMMYUNIONNAME;
|
|
PVOID InfoBuffer;
|
|
} SetFileInformation;
|
|
struct {
|
|
ULONG Length;
|
|
PVOID EaList;
|
|
ULONG EaListLength;
|
|
ULONG POINTER_ALIGNMENT EaIndex;
|
|
PVOID EaBuffer;
|
|
PMDL MdlAddress;
|
|
} QueryEa;
|
|
struct {
|
|
ULONG Length;
|
|
PVOID EaBuffer;
|
|
PMDL MdlAddress;
|
|
} SetEa;
|
|
struct {
|
|
ULONG Length;
|
|
FS_INFORMATION_CLASS POINTER_ALIGNMENT FsInformationClass;
|
|
PVOID VolumeBuffer;
|
|
} QueryVolumeInformation;
|
|
struct {
|
|
ULONG Length;
|
|
FS_INFORMATION_CLASS POINTER_ALIGNMENT FsInformationClass;
|
|
PVOID VolumeBuffer;
|
|
} SetVolumeInformation;
|
|
union {
|
|
struct {
|
|
ULONG Length;
|
|
PUNICODE_STRING FileName;
|
|
FILE_INFORMATION_CLASS FileInformationClass;
|
|
ULONG POINTER_ALIGNMENT FileIndex;
|
|
PVOID DirectoryBuffer;
|
|
PMDL MdlAddress;
|
|
} QueryDirectory;
|
|
struct {
|
|
ULONG Length;
|
|
ULONG POINTER_ALIGNMENT CompletionFilter;
|
|
ULONG POINTER_ALIGNMENT Spare1;
|
|
ULONG POINTER_ALIGNMENT Spare2;
|
|
PVOID DirectoryBuffer;
|
|
PMDL MdlAddress;
|
|
} NotifyDirectory;
|
|
} DirectoryControl;
|
|
union {
|
|
struct {
|
|
PVPB Vpb;
|
|
PDEVICE_OBJECT DeviceObject;
|
|
} VerifyVolume;
|
|
struct {
|
|
ULONG OutputBufferLength;
|
|
ULONG POINTER_ALIGNMENT InputBufferLength;
|
|
ULONG POINTER_ALIGNMENT FsControlCode;
|
|
} Common;
|
|
struct {
|
|
ULONG OutputBufferLength;
|
|
ULONG POINTER_ALIGNMENT InputBufferLength;
|
|
ULONG POINTER_ALIGNMENT FsControlCode;
|
|
PVOID InputBuffer;
|
|
PVOID OutputBuffer;
|
|
PMDL OutputMdlAddress;
|
|
} Neither;
|
|
struct {
|
|
ULONG OutputBufferLength;
|
|
ULONG POINTER_ALIGNMENT InputBufferLength;
|
|
ULONG POINTER_ALIGNMENT FsControlCode;
|
|
PVOID SystemBuffer;
|
|
} Buffered;
|
|
struct {
|
|
ULONG OutputBufferLength;
|
|
ULONG POINTER_ALIGNMENT InputBufferLength;
|
|
ULONG POINTER_ALIGNMENT FsControlCode;
|
|
PVOID InputSystemBuffer;
|
|
PVOID OutputBuffer;
|
|
PMDL OutputMdlAddress;
|
|
} Direct;
|
|
} FileSystemControl;
|
|
union {
|
|
struct {
|
|
ULONG OutputBufferLength;
|
|
ULONG POINTER_ALIGNMENT InputBufferLength;
|
|
ULONG POINTER_ALIGNMENT IoControlCode;
|
|
} Common;
|
|
struct {
|
|
ULONG OutputBufferLength;
|
|
ULONG POINTER_ALIGNMENT InputBufferLength;
|
|
ULONG POINTER_ALIGNMENT IoControlCode;
|
|
PVOID InputBuffer;
|
|
PVOID OutputBuffer;
|
|
PMDL OutputMdlAddress;
|
|
} Neither;
|
|
struct {
|
|
ULONG OutputBufferLength;
|
|
ULONG POINTER_ALIGNMENT InputBufferLength;
|
|
ULONG POINTER_ALIGNMENT IoControlCode;
|
|
PVOID SystemBuffer;
|
|
} Buffered;
|
|
struct {
|
|
ULONG OutputBufferLength;
|
|
ULONG POINTER_ALIGNMENT InputBufferLength;
|
|
ULONG POINTER_ALIGNMENT IoControlCode;
|
|
PVOID InputSystemBuffer;
|
|
PVOID OutputBuffer;
|
|
PMDL OutputMdlAddress;
|
|
} Direct;
|
|
struct {
|
|
ULONG OutputBufferLength;
|
|
ULONG POINTER_ALIGNMENT InputBufferLength;
|
|
ULONG POINTER_ALIGNMENT IoControlCode;
|
|
PVOID InputBuffer;
|
|
PVOID OutputBuffer;
|
|
} FastIo;
|
|
} DeviceIoControl;
|
|
struct {
|
|
PLARGE_INTEGER Length;
|
|
ULONG POINTER_ALIGNMENT Key;
|
|
LARGE_INTEGER ByteOffset;
|
|
PEPROCESS ProcessId;
|
|
BOOLEAN FailImmediately;
|
|
BOOLEAN ExclusiveLock;
|
|
} LockControl;
|
|
struct {
|
|
SECURITY_INFORMATION SecurityInformation;
|
|
ULONG POINTER_ALIGNMENT Length;
|
|
PVOID SecurityBuffer;
|
|
PMDL MdlAddress;
|
|
} QuerySecurity;
|
|
struct {
|
|
SECURITY_INFORMATION SecurityInformation;
|
|
PSECURITY_DESCRIPTOR SecurityDescriptor;
|
|
} SetSecurity;
|
|
struct {
|
|
ULONG_PTR ProviderId;
|
|
PVOID DataPath;
|
|
ULONG BufferSize;
|
|
PVOID Buffer;
|
|
} WMI;
|
|
struct {
|
|
ULONG Length;
|
|
PSID StartSid;
|
|
PFILE_GET_QUOTA_INFORMATION SidList;
|
|
ULONG SidListLength;
|
|
PVOID QuotaBuffer;
|
|
PMDL MdlAddress;
|
|
} QueryQuota;
|
|
struct {
|
|
ULONG Length;
|
|
PVOID QuotaBuffer;
|
|
PMDL MdlAddress;
|
|
} SetQuota;
|
|
union {
|
|
struct {
|
|
PCM_RESOURCE_LIST AllocatedResources;
|
|
PCM_RESOURCE_LIST AllocatedResourcesTranslated;
|
|
} StartDevice;
|
|
struct {
|
|
DEVICE_RELATION_TYPE Type;
|
|
} QueryDeviceRelations;
|
|
struct {
|
|
CONST GUID *InterfaceType;
|
|
USHORT Size;
|
|
USHORT Version;
|
|
PINTERFACE Interface;
|
|
PVOID InterfaceSpecificData;
|
|
} QueryInterface;
|
|
struct {
|
|
PDEVICE_CAPABILITIES Capabilities;
|
|
} DeviceCapabilities;
|
|
struct {
|
|
PIO_RESOURCE_REQUIREMENTS_LIST IoResourceRequirementList;
|
|
} FilterResourceRequirements;
|
|
struct {
|
|
ULONG WhichSpace;
|
|
PVOID Buffer;
|
|
ULONG Offset;
|
|
ULONG POINTER_ALIGNMENT Length;
|
|
} ReadWriteConfig;
|
|
struct {
|
|
BOOLEAN Lock;
|
|
} SetLock;
|
|
struct {
|
|
BUS_QUERY_ID_TYPE IdType;
|
|
} QueryId;
|
|
struct {
|
|
DEVICE_TEXT_TYPE DeviceTextType;
|
|
LCID POINTER_ALIGNMENT LocaleId;
|
|
} QueryDeviceText;
|
|
struct {
|
|
BOOLEAN InPath;
|
|
BOOLEAN Reserved[3];
|
|
DEVICE_USAGE_NOTIFICATION_TYPE POINTER_ALIGNMENT Type;
|
|
} UsageNotification;
|
|
} Pnp;
|
|
struct {
|
|
FS_FILTER_SECTION_SYNC_TYPE SyncType;
|
|
ULONG PageProtection;
|
|
} AcquireForSectionSynchronization;
|
|
struct {
|
|
PLARGE_INTEGER EndingOffset;
|
|
PERESOURCE *ResourceToRelease;
|
|
} AcquireForModifiedPageWriter;
|
|
struct {
|
|
PERESOURCE ResourceToRelease;
|
|
} ReleaseForModifiedPageWriter;
|
|
struct {
|
|
LARGE_INTEGER FileOffset;
|
|
ULONG Length;
|
|
ULONG POINTER_ALIGNMENT LockKey;
|
|
BOOLEAN POINTER_ALIGNMENT CheckForReadOperation;
|
|
} FastIoCheckIfPossible;
|
|
struct {
|
|
PIRP Irp;
|
|
PFILE_NETWORK_OPEN_INFORMATION NetworkInformation;
|
|
} NetworkQueryOpen;
|
|
struct {
|
|
LARGE_INTEGER FileOffset;
|
|
ULONG POINTER_ALIGNMENT Length;
|
|
ULONG POINTER_ALIGNMENT Key;
|
|
PMDL *MdlChain;
|
|
} MdlRead;
|
|
struct {
|
|
PMDL MdlChain;
|
|
} MdlReadComplete;
|
|
struct {
|
|
LARGE_INTEGER FileOffset;
|
|
ULONG POINTER_ALIGNMENT Length;
|
|
ULONG POINTER_ALIGNMENT Key;
|
|
PMDL *MdlChain;
|
|
} PrepareMdlWrite;
|
|
struct {
|
|
LARGE_INTEGER FileOffset;
|
|
PMDL MdlChain;
|
|
} MdlWriteComplete;
|
|
struct {
|
|
ULONG DeviceType;
|
|
} MountVolume;
|
|
struct {
|
|
PVOID Argument1;
|
|
PVOID Argument2;
|
|
PVOID Argument3;
|
|
PVOID Argument4;
|
|
PVOID Argument5;
|
|
LARGE_INTEGER Argument6;
|
|
} Others;
|
|
} FLT_PARAMETERS, *PFLT_PARAMETERS;
|
|
|
|
#if !defined(_AMD64_) && !defined(_IA64_) && !defined(_ARM_)
|
|
#include "poppack.h"
|
|
#endif
|
|
|
|
typedef struct _FLT_IO_PARAMETER_BLOCK {
|
|
ULONG IrpFlags;
|
|
UCHAR MajorFunction;
|
|
UCHAR MinorFunction;
|
|
UCHAR OperationFlags;
|
|
UCHAR Reserved;
|
|
PFILE_OBJECT TargetFileObject;
|
|
PFLT_INSTANCE TargetInstance;
|
|
FLT_PARAMETERS Parameters;
|
|
} FLT_IO_PARAMETER_BLOCK, *PFLT_IO_PARAMETER_BLOCK;
|
|
|
|
#define FLTFL_CALLBACK_DATA_REISSUE_MASK 0x0000FFFF
|
|
#define FLTFL_CALLBACK_DATA_IRP_OPERATION 0x00000001
|
|
#define FLTFL_CALLBACK_DATA_FAST_IO_OPERATION 0x00000002
|
|
#define FLTFL_CALLBACK_DATA_FS_FILTER_OPERATION 0x00000004
|
|
#define FLTFL_CALLBACK_DATA_SYSTEM_BUFFER 0x00000008
|
|
#define FLTFL_CALLBACK_DATA_GENERATED_IO 0x00010000
|
|
#define FLTFL_CALLBACK_DATA_REISSUED_IO 0x00020000
|
|
#define FLTFL_CALLBACK_DATA_DRAINING_IO 0x00040000
|
|
#define FLTFL_CALLBACK_DATA_POST_OPERATION 0x00080000
|
|
#define FLTFL_CALLBACK_DATA_NEW_SYSTEM_BUFFER 0x00100000
|
|
#define FLTFL_CALLBACK_DATA_DIRTY 0x80000000
|
|
|
|
#define FLT_SET_CALLBACK_DATA_DIRTY(Data) FltSetCallbackDataDirty(Data)
|
|
#define FLT_CLEAR_CALLBACK_DATA_DIRTY(Data) FltClearCallbackDataDirty(Data)
|
|
#define FLT_IS_CALLBACK_DATA_DIRTY(Data) FltIsCallbackDataDirty(Data)
|
|
|
|
#define FLT_IS_IRP_OPERATION(Data) (FlagOn((Data)->Flags, FLTFL_CALLBACK_DATA_IRP_OPERATION))
|
|
#define FLT_IS_FASTIO_OPERATION(Data) (FlagOn((Data)->Flags, FLTFL_CALLBACK_DATA_FAST_IO_OPERATION))
|
|
#define FLT_IS_FS_FILTER_OPERATION(Data) (FlagOn((Data)->Flags, FLTFL_CALLBACK_DATA_FS_FILTER_OPERATION))
|
|
#define FLT_IS_REISSUED_IO(Data) (FlagOn((Data)->Flags, FLTFL_CALLBACK_DATA_REISSUED_IO))
|
|
#define FLT_IS_SYSTEM_BUFFER(Data) (FlagOn((Data)->Flags, FLTFL_CALLBACK_DATA_SYSTEM_BUFFER))
|
|
|
|
typedef USHORT FLT_CONTEXT_TYPE;
|
|
|
|
#define FLT_VOLUME_CONTEXT 0x0001
|
|
#define FLT_INSTANCE_CONTEXT 0x0002
|
|
#define FLT_FILE_CONTEXT 0x0004
|
|
#define FLT_STREAM_CONTEXT 0x0008
|
|
#define FLT_STREAMHANDLE_CONTEXT 0x0010
|
|
#define FLT_TRANSACTION_CONTEXT 0x0020
|
|
#define FLT_CONTEXT_END 0xffff
|
|
|
|
#define FLT_ALL_CONTEXTS (FLT_VOLUME_CONTEXT | FLT_INSTANCE_CONTEXT | \
|
|
FLT_FILE_CONTEXT | FLT_STREAM_CONTEXT | \
|
|
FLT_STREAMHANDLE_CONTEXT | FLT_TRANSACTION_CONTEXT)
|
|
|
|
typedef ULONG FLT_CALLBACK_DATA_FLAGS;
|
|
|
|
#if FLT_MGR_WIN7
|
|
typedef ULONG FLT_ALLOCATE_CALLBACK_DATA_FLAGS;
|
|
#define FLT_ALLOCATE_CALLBACK_DATA_PREALLOCATE_ALL_MEMORY 0x00000001
|
|
#endif /* FLT_MGR_WIN7 */
|
|
|
|
typedef struct _FLT_CALLBACK_DATA {
|
|
FLT_CALLBACK_DATA_FLAGS Flags;
|
|
PETHREAD CONST Thread;
|
|
PFLT_IO_PARAMETER_BLOCK CONST Iopb;
|
|
IO_STATUS_BLOCK IoStatus;
|
|
struct _FLT_TAG_DATA_BUFFER *TagData;
|
|
_ANONYMOUS_UNION union {
|
|
_ANONYMOUS_STRUCT struct {
|
|
LIST_ENTRY QueueLinks;
|
|
PVOID QueueContext[2];
|
|
} DUMMYSTRUCTNAME;
|
|
PVOID FilterContext[4];
|
|
} DUMMYUNIONNAME;
|
|
KPROCESSOR_MODE RequestorMode;
|
|
} FLT_CALLBACK_DATA, *PFLT_CALLBACK_DATA;
|
|
|
|
typedef struct _FLT_RELATED_OBJECTS {
|
|
USHORT CONST Size;
|
|
USHORT CONST TransactionContext;
|
|
PFLT_FILTER CONST Filter;
|
|
PFLT_VOLUME CONST Volume;
|
|
PFLT_INSTANCE CONST Instance;
|
|
PFILE_OBJECT CONST FileObject;
|
|
PKTRANSACTION CONST Transaction;
|
|
} FLT_RELATED_OBJECTS, *PFLT_RELATED_OBJECTS;
|
|
typedef const struct _FLT_RELATED_OBJECTS *PCFLT_RELATED_OBJECTS;
|
|
|
|
typedef struct _FLT_RELATED_CONTEXTS {
|
|
PFLT_CONTEXT VolumeContext;
|
|
PFLT_CONTEXT InstanceContext;
|
|
PFLT_CONTEXT FileContext;
|
|
PFLT_CONTEXT StreamContext;
|
|
PFLT_CONTEXT StreamHandleContext;
|
|
PFLT_CONTEXT TransactionContext;
|
|
} FLT_RELATED_CONTEXTS, *PFLT_RELATED_CONTEXTS;
|
|
|
|
typedef VOID
|
|
(FLTAPI *PFLT_CONTEXT_CLEANUP_CALLBACK)(
|
|
_In_ PFLT_CONTEXT Context,
|
|
_In_ FLT_CONTEXT_TYPE ContextType);
|
|
|
|
typedef PVOID
|
|
(FLTAPI *PFLT_CONTEXT_ALLOCATE_CALLBACK)(
|
|
_In_ POOL_TYPE PoolType,
|
|
_In_ SIZE_T Size,
|
|
_In_ FLT_CONTEXT_TYPE ContextType);
|
|
|
|
typedef VOID
|
|
(FLTAPI *PFLT_CONTEXT_FREE_CALLBACK)(
|
|
_In_ PVOID Pool,
|
|
_In_ FLT_CONTEXT_TYPE ContextType);
|
|
|
|
typedef USHORT FLT_CONTEXT_REGISTRATION_FLAGS;
|
|
|
|
#define FLTFL_CONTEXT_REGISTRATION_NO_EXACT_SIZE_MATCH 0x0001
|
|
|
|
#define FLT_VARIABLE_SIZED_CONTEXTS ((SIZE_T)-1)
|
|
|
|
typedef struct _FLT_CONTEXT_REGISTRATION {
|
|
FLT_CONTEXT_TYPE ContextType;
|
|
FLT_CONTEXT_REGISTRATION_FLAGS Flags;
|
|
PFLT_CONTEXT_CLEANUP_CALLBACK ContextCleanupCallback;
|
|
SIZE_T Size;
|
|
ULONG PoolTag;
|
|
PFLT_CONTEXT_ALLOCATE_CALLBACK ContextAllocateCallback;
|
|
PFLT_CONTEXT_FREE_CALLBACK ContextFreeCallback;
|
|
PVOID Reserved1;
|
|
} FLT_CONTEXT_REGISTRATION, *PFLT_CONTEXT_REGISTRATION;
|
|
typedef const struct _FLT_CONTEXT_REGISTRATION *PCFLT_CONTEXT_REGISTRATION;
|
|
|
|
typedef ULONG FLT_INSTANCE_SETUP_FLAGS;
|
|
|
|
#define FLTFL_INSTANCE_SETUP_AUTOMATIC_ATTACHMENT 0x00000001
|
|
#define FLTFL_INSTANCE_SETUP_MANUAL_ATTACHMENT 0x00000002
|
|
#define FLTFL_INSTANCE_SETUP_NEWLY_MOUNTED_VOLUME 0x00000004
|
|
|
|
#if FLT_MGR_LONGHORN
|
|
|
|
#define FLTFL_INSTANCE_SETUP_DETACHED_VOLUME 0x00000008
|
|
|
|
#define FLT_MAX_TRANSACTION_NOTIFICATIONS (TRANSACTION_NOTIFY_PREPREPARE | \
|
|
TRANSACTION_NOTIFY_PREPARE | \
|
|
TRANSACTION_NOTIFY_COMMIT | \
|
|
TRANSACTION_NOTIFY_ROLLBACK | \
|
|
TRANSACTION_NOTIFY_COMMIT_FINALIZE)
|
|
|
|
#endif /* FLT_MGR_LONGHORN */
|
|
|
|
typedef NTSTATUS
|
|
(FLTAPI *PFLT_INSTANCE_SETUP_CALLBACK)(
|
|
_In_ PCFLT_RELATED_OBJECTS FltObjects,
|
|
_In_ FLT_INSTANCE_SETUP_FLAGS Flags,
|
|
_In_ DEVICE_TYPE VolumeDeviceType,
|
|
_In_ FLT_FILESYSTEM_TYPE VolumeFilesystemType);
|
|
|
|
typedef ULONG FLT_INSTANCE_QUERY_TEARDOWN_FLAGS;
|
|
|
|
typedef NTSTATUS
|
|
(FLTAPI *PFLT_INSTANCE_QUERY_TEARDOWN_CALLBACK)(
|
|
_In_ PCFLT_RELATED_OBJECTS FltObjects,
|
|
_In_ FLT_INSTANCE_QUERY_TEARDOWN_FLAGS Flags);
|
|
|
|
typedef ULONG FLT_INSTANCE_TEARDOWN_FLAGS;
|
|
|
|
#define FLTFL_INSTANCE_TEARDOWN_MANUAL 0x00000001
|
|
#define FLTFL_INSTANCE_TEARDOWN_FILTER_UNLOAD 0x00000002
|
|
#define FLTFL_INSTANCE_TEARDOWN_MANDATORY_FILTER_UNLOAD 0x00000004
|
|
#define FLTFL_INSTANCE_TEARDOWN_VOLUME_DISMOUNT 0x00000008
|
|
#define FLTFL_INSTANCE_TEARDOWN_INTERNAL_ERROR 0x00000010
|
|
|
|
typedef VOID
|
|
(FLTAPI *PFLT_INSTANCE_TEARDOWN_CALLBACK)(
|
|
_In_ PCFLT_RELATED_OBJECTS FltObjects,
|
|
_In_ FLT_INSTANCE_TEARDOWN_FLAGS Reason);
|
|
|
|
typedef enum _FLT_PREOP_CALLBACK_STATUS {
|
|
FLT_PREOP_SUCCESS_WITH_CALLBACK,
|
|
FLT_PREOP_SUCCESS_NO_CALLBACK,
|
|
FLT_PREOP_PENDING,
|
|
FLT_PREOP_DISALLOW_FASTIO,
|
|
FLT_PREOP_COMPLETE,
|
|
FLT_PREOP_SYNCHRONIZE
|
|
} FLT_PREOP_CALLBACK_STATUS, *PFLT_PREOP_CALLBACK_STATUS;
|
|
|
|
typedef FLT_PREOP_CALLBACK_STATUS
|
|
(FLTAPI *PFLT_PRE_OPERATION_CALLBACK)(
|
|
_Inout_ PFLT_CALLBACK_DATA Data,
|
|
_In_ PCFLT_RELATED_OBJECTS FltObjects,
|
|
_Outptr_result_maybenull_ PVOID *CompletionContext);
|
|
|
|
typedef enum _FLT_POSTOP_CALLBACK_STATUS {
|
|
FLT_POSTOP_FINISHED_PROCESSING,
|
|
FLT_POSTOP_MORE_PROCESSING_REQUIRED
|
|
} FLT_POSTOP_CALLBACK_STATUS, *PFLT_POSTOP_CALLBACK_STATUS;
|
|
|
|
typedef ULONG FLT_POST_OPERATION_FLAGS;
|
|
|
|
#define FLTFL_POST_OPERATION_DRAINING 0x00000001
|
|
|
|
typedef FLT_POSTOP_CALLBACK_STATUS
|
|
(FLTAPI *PFLT_POST_OPERATION_CALLBACK)(
|
|
_Inout_ PFLT_CALLBACK_DATA Data,
|
|
_In_ PCFLT_RELATED_OBJECTS FltObjects,
|
|
_In_opt_ PVOID CompletionContext,
|
|
_In_ FLT_POST_OPERATION_FLAGS Flags);
|
|
|
|
typedef ULONG FLT_OPERATION_REGISTRATION_FLAGS;
|
|
|
|
#define FLTFL_OPERATION_REGISTRATION_SKIP_PAGING_IO 0x00000001
|
|
#define FLTFL_OPERATION_REGISTRATION_SKIP_CACHED_IO 0x00000002
|
|
#define FLTFL_OPERATION_REGISTRATION_SKIP_NON_DASD_IO 0x00000004
|
|
|
|
typedef struct _FLT_OPERATION_REGISTRATION {
|
|
UCHAR MajorFunction;
|
|
FLT_OPERATION_REGISTRATION_FLAGS Flags;
|
|
PFLT_PRE_OPERATION_CALLBACK PreOperation;
|
|
PFLT_POST_OPERATION_CALLBACK PostOperation;
|
|
PVOID Reserved1;
|
|
} FLT_OPERATION_REGISTRATION, *PFLT_OPERATION_REGISTRATION;
|
|
|
|
typedef struct _FLT_TAG_DATA_BUFFER {
|
|
ULONG FileTag;
|
|
USHORT TagDataLength;
|
|
USHORT UnparsedNameLength;
|
|
_ANONYMOUS_UNION union {
|
|
struct {
|
|
USHORT SubstituteNameOffset;
|
|
USHORT SubstituteNameLength;
|
|
USHORT PrintNameOffset;
|
|
USHORT PrintNameLength;
|
|
ULONG Flags;
|
|
WCHAR PathBuffer[1];
|
|
} SymbolicLinkReparseBuffer;
|
|
struct {
|
|
USHORT SubstituteNameOffset;
|
|
USHORT SubstituteNameLength;
|
|
USHORT PrintNameOffset;
|
|
USHORT PrintNameLength;
|
|
WCHAR PathBuffer[1];
|
|
} MountPointReparseBuffer;
|
|
struct {
|
|
UCHAR DataBuffer[1];
|
|
} GenericReparseBuffer;
|
|
struct {
|
|
GUID TagGuid;
|
|
UCHAR DataBuffer[1];
|
|
} GenericGUIDReparseBuffer;
|
|
} DUMMYUNIONNAME;
|
|
} FLT_TAG_DATA_BUFFER, *PFLT_TAG_DATA_BUFFER;
|
|
|
|
#define FLT_TAG_DATA_BUFFER_HEADER_SIZE FIELD_OFFSET(FLT_TAG_DATA_BUFFER, GenericReparseBuffer)
|
|
|
|
typedef ULONG FLT_FILTER_UNLOAD_FLAGS;
|
|
|
|
#define FLTFL_FILTER_UNLOAD_MANDATORY 0x00000001
|
|
|
|
typedef NTSTATUS
|
|
(FLTAPI *PFLT_FILTER_UNLOAD_CALLBACK)(
|
|
FLT_FILTER_UNLOAD_FLAGS Flags);
|
|
|
|
typedef struct _FLT_NAME_CONTROL {
|
|
UNICODE_STRING Name;
|
|
} FLT_NAME_CONTROL, *PFLT_NAME_CONTROL;
|
|
|
|
typedef ULONG FLT_FILE_NAME_OPTIONS;
|
|
|
|
typedef NTSTATUS
|
|
(FLTAPI *PFLT_GENERATE_FILE_NAME)(
|
|
_In_ PFLT_INSTANCE Instance,
|
|
_In_ PFILE_OBJECT FileObject,
|
|
_In_opt_ PFLT_CALLBACK_DATA CallbackData,
|
|
_In_ FLT_FILE_NAME_OPTIONS NameOptions,
|
|
_Out_ PBOOLEAN CacheFileNameInformation,
|
|
_Out_ PFLT_NAME_CONTROL FileName);
|
|
|
|
typedef ULONG FLT_NORMALIZE_NAME_FLAGS;
|
|
|
|
#define FLTFL_NORMALIZE_NAME_CASE_SENSITIVE 0x01
|
|
#define FLTFL_NORMALIZE_NAME_DESTINATION_FILE_NAME 0x02
|
|
|
|
typedef NTSTATUS
|
|
(FLTAPI *PFLT_NORMALIZE_NAME_COMPONENT)(
|
|
_In_ PFLT_INSTANCE Instance,
|
|
_In_ PCUNICODE_STRING ParentDirectory,
|
|
_In_ USHORT VolumeNameLength,
|
|
_In_ PCUNICODE_STRING Component,
|
|
_Out_writes_bytes_(ExpandComponentNameLength) PFILE_NAMES_INFORMATION ExpandComponentName,
|
|
_In_ ULONG ExpandComponentNameLength,
|
|
_In_ FLT_NORMALIZE_NAME_FLAGS Flags,
|
|
_Inout_ PVOID *NormalizationContext);
|
|
|
|
typedef NTSTATUS
|
|
(FLTAPI *PFLT_NORMALIZE_NAME_COMPONENT_EX)(
|
|
_In_ PFLT_INSTANCE Instance,
|
|
_In_ PFILE_OBJECT FileObject,
|
|
_In_ PCUNICODE_STRING ParentDirectory,
|
|
_In_ USHORT VolumeNameLength,
|
|
_In_ PCUNICODE_STRING Component,
|
|
_Out_writes_bytes_(ExpandComponentNameLength) PFILE_NAMES_INFORMATION ExpandComponentName,
|
|
_In_ ULONG ExpandComponentNameLength,
|
|
_In_ FLT_NORMALIZE_NAME_FLAGS Flags,
|
|
_Inout_ PVOID *NormalizationContext);
|
|
|
|
typedef VOID
|
|
(FLTAPI *PFLT_NORMALIZE_CONTEXT_CLEANUP)(
|
|
_In_opt_ PVOID *NormalizationContext);
|
|
|
|
#if FLT_MGR_LONGHORN
|
|
typedef NTSTATUS
|
|
(FLTAPI *PFLT_TRANSACTION_NOTIFICATION_CALLBACK)(
|
|
_In_ PCFLT_RELATED_OBJECTS FltObjects,
|
|
_In_ PFLT_CONTEXT TransactionContext,
|
|
_In_ ULONG NotificationMask);
|
|
#endif /* FLT_MGR_LONGHORN */
|
|
|
|
#define FLT_REGISTRATION_VERSION_0200 0x0200
|
|
#define FLT_REGISTRATION_VERSION_0201 0x0201
|
|
#define FLT_REGISTRATION_VERSION_0202 0x0202
|
|
#define FLT_REGISTRATION_VERSION_0203 0x0203
|
|
|
|
#if FLT_MGR_LONGHORN
|
|
#define FLT_REGISTRATION_VERSION FLT_REGISTRATION_VERSION_0202
|
|
#else
|
|
#define FLT_REGISTRATION_VERSION FLT_REGISTRATION_VERSION_0200
|
|
#endif
|
|
|
|
typedef ULONG FLT_REGISTRATION_FLAGS;
|
|
|
|
#define FLTFL_REGISTRATION_DO_NOT_SUPPORT_SERVICE_STOP 0x00000001
|
|
#define FLTFL_REGISTRATION_SUPPORT_NPFS_MSFS 0x00000002
|
|
|
|
typedef struct _FLT_REGISTRATION {
|
|
USHORT Size;
|
|
USHORT Version;
|
|
FLT_REGISTRATION_FLAGS Flags;
|
|
CONST FLT_CONTEXT_REGISTRATION *ContextRegistration;
|
|
CONST FLT_OPERATION_REGISTRATION *OperationRegistration;
|
|
PFLT_FILTER_UNLOAD_CALLBACK FilterUnloadCallback;
|
|
PFLT_INSTANCE_SETUP_CALLBACK InstanceSetupCallback;
|
|
PFLT_INSTANCE_QUERY_TEARDOWN_CALLBACK InstanceQueryTeardownCallback;
|
|
PFLT_INSTANCE_TEARDOWN_CALLBACK InstanceTeardownStartCallback;
|
|
PFLT_INSTANCE_TEARDOWN_CALLBACK InstanceTeardownCompleteCallback;
|
|
PFLT_GENERATE_FILE_NAME GenerateFileNameCallback;
|
|
PFLT_NORMALIZE_NAME_COMPONENT NormalizeNameComponentCallback;
|
|
PFLT_NORMALIZE_CONTEXT_CLEANUP NormalizeContextCleanupCallback;
|
|
#if FLT_MGR_LONGHORN
|
|
PFLT_TRANSACTION_NOTIFICATION_CALLBACK TransactionNotificationCallback;
|
|
PFLT_NORMALIZE_NAME_COMPONENT_EX NormalizeNameComponentExCallback;
|
|
#endif /* FLT_MGR_LONGHORN */
|
|
} FLT_REGISTRATION, *PFLT_REGISTRATION;
|
|
|
|
typedef VOID
|
|
(FLTAPI *PFLT_COMPLETED_ASYNC_IO_CALLBACK)(
|
|
_In_ PFLT_CALLBACK_DATA CallbackData,
|
|
_In_ PFLT_CONTEXT Context);
|
|
|
|
typedef ULONG FLT_IO_OPERATION_FLAGS;
|
|
|
|
#define FLTFL_IO_OPERATION_NON_CACHED 0x00000001
|
|
#define FLTFL_IO_OPERATION_PAGING 0x00000002
|
|
#define FLTFL_IO_OPERATION_DO_NOT_UPDATE_BYTE_OFFSET 0x00000004
|
|
|
|
#if FLT_MGR_LONGHORN
|
|
#define FLTFL_IO_OPERATION_SYNCHRONOUS_PAGING 0x00000008
|
|
#endif
|
|
|
|
typedef VOID
|
|
(FLTAPI *PFLT_GET_OPERATION_STATUS_CALLBACK)(
|
|
_In_ PCFLT_RELATED_OBJECTS FltObjects,
|
|
_In_ PFLT_IO_PARAMETER_BLOCK IopbSnapshot,
|
|
_In_ NTSTATUS OperationStatus,
|
|
_In_opt_ PVOID RequesterContext);
|
|
|
|
typedef ULONG FLT_FILE_NAME_OPTIONS;
|
|
|
|
#define FLT_VALID_FILE_NAME_FORMATS 0x000000ff
|
|
|
|
#define FLT_FILE_NAME_NORMALIZED 0x01
|
|
#define FLT_FILE_NAME_OPENED 0x02
|
|
#define FLT_FILE_NAME_SHORT 0x03
|
|
|
|
#define FltGetFileNameFormat( _NameOptions ) ((_NameOptions) & FLT_VALID_FILE_NAME_FORMATS)
|
|
|
|
#define FLT_VALID_FILE_NAME_QUERY_METHODS 0x0000ff00
|
|
|
|
#define FLT_FILE_NAME_QUERY_DEFAULT 0x0100
|
|
#define FLT_FILE_NAME_QUERY_CACHE_ONLY 0x0200
|
|
#define FLT_FILE_NAME_QUERY_FILESYSTEM_ONLY 0x0300
|
|
#define FLT_FILE_NAME_QUERY_ALWAYS_ALLOW_CACHE_LOOKUP 0x0400
|
|
|
|
#define FltGetFileNameQueryMethod( _NameOptions ) ((_NameOptions) & FLT_VALID_FILE_NAME_QUERY_METHODS)
|
|
|
|
#define FLT_VALID_FILE_NAME_FLAGS 0xff000000
|
|
|
|
#define FLT_FILE_NAME_REQUEST_FROM_CURRENT_PROVIDER 0x01000000
|
|
#define FLT_FILE_NAME_DO_NOT_CACHE 0x02000000
|
|
|
|
#if FLT_MGR_AFTER_XPSP2
|
|
#define FLT_FILE_NAME_ALLOW_QUERY_ON_REPARSE 0x04000000
|
|
#endif
|
|
|
|
typedef USHORT FLT_FILE_NAME_PARSED_FLAGS;
|
|
|
|
#define FLTFL_FILE_NAME_PARSED_FINAL_COMPONENT 0x0001
|
|
#define FLTFL_FILE_NAME_PARSED_EXTENSION 0x0002
|
|
#define FLTFL_FILE_NAME_PARSED_STREAM 0x0004
|
|
#define FLTFL_FILE_NAME_PARSED_PARENT_DIR 0x0008
|
|
|
|
typedef struct _FLT_FILE_NAME_INFORMATION {
|
|
USHORT Size;
|
|
FLT_FILE_NAME_PARSED_FLAGS NamesParsed;
|
|
FLT_FILE_NAME_OPTIONS Format;
|
|
UNICODE_STRING Name;
|
|
UNICODE_STRING Volume;
|
|
UNICODE_STRING Share;
|
|
UNICODE_STRING Extension;
|
|
UNICODE_STRING Stream;
|
|
UNICODE_STRING FinalComponent;
|
|
UNICODE_STRING ParentDir;
|
|
} FLT_FILE_NAME_INFORMATION, *PFLT_FILE_NAME_INFORMATION;
|
|
|
|
typedef enum _FLT_SET_CONTEXT_OPERATION {
|
|
FLT_SET_CONTEXT_REPLACE_IF_EXISTS,
|
|
FLT_SET_CONTEXT_KEEP_IF_EXISTS
|
|
} FLT_SET_CONTEXT_OPERATION, *PFLT_SET_CONTEXT_OPERATION;
|
|
|
|
typedef struct _FLT_VOLUME_PROPERTIES {
|
|
DEVICE_TYPE DeviceType;
|
|
ULONG DeviceCharacteristics;
|
|
ULONG DeviceObjectFlags;
|
|
ULONG AlignmentRequirement;
|
|
USHORT SectorSize;
|
|
USHORT Reserved0;
|
|
UNICODE_STRING FileSystemDriverName;
|
|
UNICODE_STRING FileSystemDeviceName;
|
|
UNICODE_STRING RealDeviceName;
|
|
} FLT_VOLUME_PROPERTIES, *PFLT_VOLUME_PROPERTIES;
|
|
|
|
#define FLT_PORT_CONNECT 0x0001
|
|
#define FLT_PORT_ALL_ACCESS (FLT_PORT_CONNECT | STANDARD_RIGHTS_ALL)
|
|
|
|
typedef NTSTATUS
|
|
(FLTAPI *PFLT_MESSAGE_NOTIFY)(
|
|
_In_opt_ PVOID PortCookie,
|
|
_In_reads_bytes_opt_(InputBufferLength) PVOID InputBuffer,
|
|
_In_ ULONG InputBufferLength,
|
|
_Out_writes_bytes_to_opt_(OutputBufferLength,*ReturnOutputBufferLength) PVOID OutputBuffer,
|
|
_In_ ULONG OutputBufferLength,
|
|
_Out_ PULONG ReturnOutputBufferLength);
|
|
|
|
typedef NTSTATUS
|
|
(FLTAPI *PFLT_CONNECT_NOTIFY)(
|
|
_In_ PFLT_PORT ClientPort,
|
|
_In_opt_ PVOID ServerPortCookie,
|
|
_In_reads_bytes_opt_(SizeOfContext) PVOID ConnectionContext,
|
|
_In_ ULONG SizeOfContext,
|
|
_Outptr_result_maybenull_ PVOID *ConnectionPortCookie);
|
|
|
|
typedef VOID
|
|
(FLTAPI *PFLT_DISCONNECT_NOTIFY)(
|
|
_In_opt_ PVOID ConnectionCookie);
|
|
|
|
typedef VOID
|
|
(FLTAPI *PFLT_COMPLETE_CANCELED_CALLBACK)(
|
|
_In_ PFLT_CALLBACK_DATA CallbackData);
|
|
|
|
typedef struct _FLT_DEFERRED_IO_WORKITEM *PFLT_DEFERRED_IO_WORKITEM;
|
|
typedef struct _FLT_GENERIC_WORKITEM *PFLT_GENERIC_WORKITEM;
|
|
|
|
typedef VOID
|
|
(FLTAPI *PFLT_DEFERRED_IO_WORKITEM_ROUTINE)(
|
|
_In_ PFLT_DEFERRED_IO_WORKITEM FltWorkItem,
|
|
_In_ PFLT_CALLBACK_DATA CallbackData,
|
|
_In_opt_ PVOID Context);
|
|
|
|
typedef VOID
|
|
(FLTAPI *PFLT_GENERIC_WORKITEM_ROUTINE)(
|
|
_In_ PFLT_GENERIC_WORKITEM FltWorkItem,
|
|
_In_ PVOID FltObject,
|
|
_In_opt_ PVOID Context);
|
|
|
|
typedef IO_CSQ_IRP_CONTEXT FLT_CALLBACK_DATA_QUEUE_IO_CONTEXT, *PFLT_CALLBACK_DATA_QUEUE_IO_CONTEXT;
|
|
|
|
typedef struct _FLT_CALLBACK_DATA_QUEUE FLT_CALLBACK_DATA_QUEUE, *PFLT_CALLBACK_DATA_QUEUE;
|
|
|
|
typedef NTSTATUS
|
|
(FLTAPI *PFLT_CALLBACK_DATA_QUEUE_INSERT_IO)(
|
|
_Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq,
|
|
_In_ PFLT_CALLBACK_DATA Cbd,
|
|
_In_opt_ PVOID InsertContext);
|
|
|
|
typedef VOID
|
|
(FLTAPI *PFLT_CALLBACK_DATA_QUEUE_REMOVE_IO)(
|
|
_Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq,
|
|
_In_ PFLT_CALLBACK_DATA Cbd);
|
|
|
|
typedef PFLT_CALLBACK_DATA
|
|
(FLTAPI *PFLT_CALLBACK_DATA_QUEUE_PEEK_NEXT_IO)(
|
|
_In_ PFLT_CALLBACK_DATA_QUEUE Cbdq,
|
|
_In_opt_ PFLT_CALLBACK_DATA Cbd,
|
|
_In_opt_ PVOID PeekContext);
|
|
|
|
typedef VOID
|
|
(FLTAPI *PFLT_CALLBACK_DATA_QUEUE_ACQUIRE)(
|
|
_Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq,
|
|
_Out_opt_ PKIRQL Irql);
|
|
|
|
typedef VOID
|
|
(FLTAPI *PFLT_CALLBACK_DATA_QUEUE_RELEASE)(
|
|
_Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq,
|
|
_In_opt_ KIRQL Irql);
|
|
|
|
typedef VOID
|
|
(FLTAPI *PFLT_CALLBACK_DATA_QUEUE_COMPLETE_CANCELED_IO)(
|
|
_Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq,
|
|
_Inout_ PFLT_CALLBACK_DATA Cbd);
|
|
|
|
typedef ULONG FLT_CALLBACK_DATA_QUEUE_FLAGS;
|
|
|
|
typedef struct _FLT_CALLBACK_DATA_QUEUE {
|
|
IO_CSQ Csq;
|
|
FLT_CALLBACK_DATA_QUEUE_FLAGS Flags;
|
|
PFLT_INSTANCE Instance;
|
|
PFLT_CALLBACK_DATA_QUEUE_INSERT_IO InsertIo;
|
|
PFLT_CALLBACK_DATA_QUEUE_REMOVE_IO RemoveIo;
|
|
PFLT_CALLBACK_DATA_QUEUE_PEEK_NEXT_IO PeekNextIo;
|
|
PFLT_CALLBACK_DATA_QUEUE_ACQUIRE Acquire;
|
|
PFLT_CALLBACK_DATA_QUEUE_RELEASE Release;
|
|
PFLT_CALLBACK_DATA_QUEUE_COMPLETE_CANCELED_IO CompleteCanceledIo;
|
|
} FLT_CALLBACK_DATA_QUEUE, *PFLT_CALLBACK_DATA_QUEUE;
|
|
|
|
typedef NTSTATUS
|
|
(*PFLT_COMPLETE_LOCK_CALLBACK_DATA_ROUTINE)(
|
|
_In_opt_ PVOID Context,
|
|
_In_ PFLT_CALLBACK_DATA CallbackData);
|
|
|
|
typedef VOID
|
|
(FLTAPI *PFLTOPLOCK_WAIT_COMPLETE_ROUTINE)(
|
|
_In_ PFLT_CALLBACK_DATA CallbackData,
|
|
_In_opt_ PVOID Context);
|
|
|
|
typedef VOID
|
|
(FLTAPI *PFLTOPLOCK_PREPOST_CALLBACKDATA_ROUTINE)(
|
|
_In_ PFLT_CALLBACK_DATA CallbackData,
|
|
_In_opt_ PVOID Context);
|
|
|
|
VOID
|
|
FLTAPI
|
|
FltSetCallbackDataDirty(
|
|
_Inout_ PFLT_CALLBACK_DATA Data);
|
|
|
|
VOID
|
|
FLTAPI
|
|
FltClearCallbackDataDirty(
|
|
_Inout_ PFLT_CALLBACK_DATA Data);
|
|
|
|
BOOLEAN
|
|
FLTAPI
|
|
FltIsCallbackDataDirty(
|
|
_In_ PFLT_CALLBACK_DATA Data);
|
|
|
|
_Must_inspect_result_
|
|
BOOLEAN
|
|
FLTAPI
|
|
FltDoCompletionProcessingWhenSafe(
|
|
_In_ PFLT_CALLBACK_DATA Data,
|
|
_In_ PCFLT_RELATED_OBJECTS FltObjects,
|
|
_In_opt_ PVOID CompletionContext,
|
|
_In_ FLT_POST_OPERATION_FLAGS Flags,
|
|
_In_ PFLT_POST_OPERATION_CALLBACK SafePostCallback,
|
|
_Out_ PFLT_POSTOP_CALLBACK_STATUS RetPostOperationStatus);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltCheckAndGrowNameControl(
|
|
_Inout_ PFLT_NAME_CONTROL NameCtrl,
|
|
_In_ USHORT NewSize);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltPurgeFileNameInformationCache(
|
|
_In_ PFLT_INSTANCE Instance,
|
|
_In_opt_ PFILE_OBJECT FileObject);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltRegisterFilter(
|
|
_In_ PDRIVER_OBJECT Driver,
|
|
_In_ CONST FLT_REGISTRATION *Registration,
|
|
_Outptr_ PFLT_FILTER *RetFilter);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
VOID
|
|
FLTAPI
|
|
FltUnregisterFilter(
|
|
_In_ PFLT_FILTER Filter);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltStartFiltering(
|
|
_In_ PFLT_FILTER Filter);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
PVOID
|
|
FLTAPI
|
|
FltGetRoutineAddress(
|
|
_In_ PCSTR FltMgrRoutineName);
|
|
|
|
_When_(CallbackStatus==FLT_PREOP_COMPLETE, _IRQL_requires_max_(DISPATCH_LEVEL))
|
|
_When_(CallbackStatus!=FLT_PREOP_COMPLETE, _IRQL_requires_max_(APC_LEVEL))
|
|
VOID
|
|
FLTAPI
|
|
FltCompletePendedPreOperation(
|
|
_In_ PFLT_CALLBACK_DATA CallbackData,
|
|
_In_ FLT_PREOP_CALLBACK_STATUS CallbackStatus,
|
|
_In_opt_ PVOID Context);
|
|
|
|
_IRQL_requires_max_(DISPATCH_LEVEL)
|
|
VOID
|
|
FLTAPI
|
|
FltCompletePendedPostOperation(
|
|
_In_ PFLT_CALLBACK_DATA CallbackData);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(DISPATCH_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltRequestOperationStatusCallback(
|
|
_In_ PFLT_CALLBACK_DATA Data,
|
|
_In_ PFLT_GET_OPERATION_STATUS_CALLBACK CallbackRoutine,
|
|
_In_opt_ PVOID RequesterContext);
|
|
|
|
_When_((PoolType==NonPagedPoolNx), _IRQL_requires_max_(DISPATCH_LEVEL))
|
|
_When_((PoolType!=NonPagedPoolNx), _IRQL_requires_max_(APC_LEVEL))
|
|
PVOID
|
|
FLTAPI
|
|
FltAllocatePoolAlignedWithTag(
|
|
_In_ PFLT_INSTANCE Instance,
|
|
_In_ POOL_TYPE PoolType,
|
|
_In_ SIZE_T NumberOfBytes,
|
|
_In_ ULONG Tag);
|
|
|
|
_IRQL_requires_max_(DISPATCH_LEVEL)
|
|
VOID
|
|
FLTAPI
|
|
FltFreePoolAlignedWithTag(
|
|
_In_ PFLT_INSTANCE Instance,
|
|
_In_ PVOID Buffer,
|
|
_In_ ULONG Tag);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltGetFileNameInformation(
|
|
_In_ PFLT_CALLBACK_DATA CallbackData,
|
|
_In_ FLT_FILE_NAME_OPTIONS NameOptions,
|
|
_Outptr_ PFLT_FILE_NAME_INFORMATION *FileNameInformation);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltGetFileNameInformationUnsafe(
|
|
_In_ PFILE_OBJECT FileObject,
|
|
_In_opt_ PFLT_INSTANCE Instance,
|
|
_In_ FLT_FILE_NAME_OPTIONS NameOptions,
|
|
_Outptr_ PFLT_FILE_NAME_INFORMATION *FileNameInformation);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
VOID
|
|
FLTAPI
|
|
FltReleaseFileNameInformation(
|
|
_In_ PFLT_FILE_NAME_INFORMATION FileNameInformation);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
VOID
|
|
FLTAPI
|
|
FltReferenceFileNameInformation(
|
|
_In_ PFLT_FILE_NAME_INFORMATION FileNameInformation);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltParseFileName(
|
|
_In_ PCUNICODE_STRING FileName,
|
|
_Inout_opt_ PUNICODE_STRING Extension,
|
|
_Inout_opt_ PUNICODE_STRING Stream,
|
|
_Inout_opt_ PUNICODE_STRING FinalComponent);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltParseFileNameInformation(
|
|
_Inout_ PFLT_FILE_NAME_INFORMATION FileNameInformation);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltGetTunneledName(
|
|
_In_ PFLT_CALLBACK_DATA CallbackData,
|
|
_In_ PFLT_FILE_NAME_INFORMATION FileNameInformation,
|
|
_Outptr_result_maybenull_ PFLT_FILE_NAME_INFORMATION *RetTunneledFileNameInformation);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltGetVolumeName(
|
|
_In_ PFLT_VOLUME Volume,
|
|
_Inout_opt_ PUNICODE_STRING VolumeName,
|
|
_Out_opt_ PULONG BufferSizeNeeded);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltGetDestinationFileNameInformation(
|
|
_In_ PFLT_INSTANCE Instance,
|
|
_In_ PFILE_OBJECT FileObject,
|
|
_In_opt_ HANDLE RootDirectory,
|
|
_In_reads_bytes_(FileNameLength) PWSTR FileName,
|
|
_In_ ULONG FileNameLength,
|
|
_In_ FLT_FILE_NAME_OPTIONS NameOptions,
|
|
_Outptr_ PFLT_FILE_NAME_INFORMATION *RetFileNameInformation);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltIsDirectory(
|
|
_In_ PFILE_OBJECT FileObject,
|
|
_In_ PFLT_INSTANCE Instance,
|
|
_Out_ PBOOLEAN IsDirectory);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(PASSIVE_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltLoadFilter(
|
|
_In_ PCUNICODE_STRING FilterName);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(PASSIVE_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltUnloadFilter(
|
|
_In_ PCUNICODE_STRING FilterName);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltAttachVolume(
|
|
_Inout_ PFLT_FILTER Filter,
|
|
_Inout_ PFLT_VOLUME Volume,
|
|
_In_opt_ PCUNICODE_STRING InstanceName,
|
|
_Outptr_opt_result_maybenull_ PFLT_INSTANCE *RetInstance);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltAttachVolumeAtAltitude(
|
|
_Inout_ PFLT_FILTER Filter,
|
|
_Inout_ PFLT_VOLUME Volume,
|
|
_In_ PCUNICODE_STRING Altitude,
|
|
_In_opt_ PCUNICODE_STRING InstanceName,
|
|
_Outptr_opt_result_maybenull_ PFLT_INSTANCE *RetInstance);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltDetachVolume(
|
|
_Inout_ PFLT_FILTER Filter,
|
|
_Inout_ PFLT_VOLUME Volume,
|
|
_In_opt_ PCUNICODE_STRING InstanceName);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltAllocateCallbackData(
|
|
_In_ PFLT_INSTANCE Instance,
|
|
_In_opt_ PFILE_OBJECT FileObject,
|
|
_Outptr_ PFLT_CALLBACK_DATA *RetNewCallbackData);
|
|
|
|
_IRQL_requires_max_(DISPATCH_LEVEL)
|
|
VOID
|
|
FLTAPI
|
|
FltFreeCallbackData(
|
|
_In_ PFLT_CALLBACK_DATA CallbackData);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
VOID
|
|
FLTAPI
|
|
FltReuseCallbackData(
|
|
_Inout_ PFLT_CALLBACK_DATA CallbackData);
|
|
|
|
_When_(FlagOn(CallbackData->Iopb->IrpFlags, IRP_PAGING_IO), _IRQL_requires_max_(APC_LEVEL))
|
|
_When_(!FlagOn(CallbackData->Iopb->IrpFlags, IRP_PAGING_IO), _IRQL_requires_max_(PASSIVE_LEVEL))
|
|
VOID
|
|
FLTAPI
|
|
FltPerformSynchronousIo(
|
|
_Inout_ PFLT_CALLBACK_DATA CallbackData);
|
|
|
|
_Must_inspect_result_
|
|
_When_( FlagOn(CallbackData->Iopb->IrpFlags, IRP_PAGING_IO), _IRQL_requires_max_(APC_LEVEL))
|
|
_When_( !FlagOn(CallbackData->Iopb->IrpFlags, IRP_PAGING_IO), _IRQL_requires_max_(PASSIVE_LEVEL))
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltPerformAsynchronousIo(
|
|
_Inout_ PFLT_CALLBACK_DATA CallbackData,
|
|
_In_ PFLT_COMPLETED_ASYNC_IO_CALLBACK CallbackRoutine,
|
|
_In_ PVOID CallbackContext);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(PASSIVE_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltCreateFile(
|
|
_In_ PFLT_FILTER Filter,
|
|
_In_opt_ PFLT_INSTANCE Instance,
|
|
_Out_ PHANDLE FileHandle,
|
|
_In_ ACCESS_MASK DesiredAccess,
|
|
_In_ POBJECT_ATTRIBUTES ObjectAttributes,
|
|
_Out_ PIO_STATUS_BLOCK IoStatusBlock,
|
|
_In_opt_ PLARGE_INTEGER AllocationSize,
|
|
_In_ ULONG FileAttributes,
|
|
_In_ ULONG ShareAccess,
|
|
_In_ ULONG CreateDisposition,
|
|
_In_ ULONG CreateOptions,
|
|
_In_reads_bytes_opt_(EaLength)PVOID EaBuffer,
|
|
_In_ ULONG EaLength,
|
|
_In_ ULONG Flags);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(PASSIVE_LEVEL)
|
|
_When_((Flags|FLTFL_IO_OPERATION_PAGING|FLTFL_IO_OPERATION_SYNCHRONOUS_PAGING),_IRQL_requires_max_(APC_LEVEL))
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltReadFile(
|
|
_In_ PFLT_INSTANCE InitiatingInstance,
|
|
_In_ PFILE_OBJECT FileObject,
|
|
_In_opt_ PLARGE_INTEGER ByteOffset,
|
|
_In_ ULONG Length,
|
|
_Out_writes_bytes_to_(Length,*BytesRead) PVOID Buffer,
|
|
_In_ FLT_IO_OPERATION_FLAGS Flags,
|
|
_Out_opt_ PULONG BytesRead,
|
|
_In_opt_ PFLT_COMPLETED_ASYNC_IO_CALLBACK CallbackRoutine,
|
|
_In_opt_ PVOID CallbackContext);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(PASSIVE_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltTagFile(
|
|
_In_ PFLT_INSTANCE InitiatingInstance,
|
|
_In_ PFILE_OBJECT FileObject,
|
|
_In_ ULONG FileTag,
|
|
_In_opt_ GUID *Guid,
|
|
_In_reads_bytes_(DataBufferLength) PVOID DataBuffer,
|
|
_In_ USHORT DataBufferLength);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(PASSIVE_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltUntagFile(
|
|
_In_ PFLT_INSTANCE InitiatingInstance,
|
|
_In_ PFILE_OBJECT FileObject,
|
|
_In_ ULONG FileTag,
|
|
_In_opt_ GUID *Guid);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(PASSIVE_LEVEL)
|
|
_When_((Flags|FLTFL_IO_OPERATION_PAGING|FLTFL_IO_OPERATION_SYNCHRONOUS_PAGING),_IRQL_requires_max_(APC_LEVEL))
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltWriteFile(
|
|
_In_ PFLT_INSTANCE InitiatingInstance,
|
|
_In_ PFILE_OBJECT FileObject,
|
|
_In_opt_ PLARGE_INTEGER ByteOffset,
|
|
_In_ ULONG Length,
|
|
_In_reads_bytes_(Length) PVOID Buffer,
|
|
_In_ FLT_IO_OPERATION_FLAGS Flags,
|
|
_Out_opt_ PULONG BytesWritten,
|
|
_In_opt_ PFLT_COMPLETED_ASYNC_IO_CALLBACK CallbackRoutine,
|
|
_In_opt_ PVOID CallbackContext);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(PASSIVE_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltQueryInformationFile(
|
|
_In_ PFLT_INSTANCE Instance,
|
|
_In_ PFILE_OBJECT FileObject,
|
|
_Out_writes_bytes_to_(Length,*LengthReturned) PVOID FileInformation,
|
|
_In_ ULONG Length,
|
|
_In_ FILE_INFORMATION_CLASS FileInformationClass,
|
|
_Out_opt_ PULONG LengthReturned);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(PASSIVE_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltSetInformationFile(
|
|
_In_ PFLT_INSTANCE Instance,
|
|
_In_ PFILE_OBJECT FileObject,
|
|
_In_reads_bytes_(Length) PVOID FileInformation,
|
|
_In_ ULONG Length,
|
|
_In_ FILE_INFORMATION_CLASS FileInformationClass);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(PASSIVE_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltQueryVolumeInformationFile(
|
|
_In_ PFLT_INSTANCE Instance,
|
|
_In_ PFILE_OBJECT FileObject,
|
|
_Out_writes_bytes_to_(Length,*LengthReturned) PVOID FsInformation,
|
|
_In_ ULONG Length,
|
|
_In_ FS_INFORMATION_CLASS FsInformationClass,
|
|
_Out_opt_ PULONG LengthReturned);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(PASSIVE_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltQuerySecurityObject(
|
|
_In_ PFLT_INSTANCE Instance,
|
|
_In_ PFILE_OBJECT FileObject,
|
|
_In_ SECURITY_INFORMATION SecurityInformation,
|
|
_Inout_updates_bytes_opt_(Length) PSECURITY_DESCRIPTOR SecurityDescriptor,
|
|
_In_ ULONG Length,
|
|
_Out_opt_ PULONG LengthNeeded);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(PASSIVE_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltSetSecurityObject(
|
|
_In_ PFLT_INSTANCE Instance,
|
|
_In_ PFILE_OBJECT FileObject,
|
|
_In_ SECURITY_INFORMATION SecurityInformation,
|
|
_In_ PSECURITY_DESCRIPTOR SecurityDescriptor);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(PASSIVE_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltFlushBuffers(
|
|
_In_ PFLT_INSTANCE Instance,
|
|
_In_ PFILE_OBJECT FileObject);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(PASSIVE_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltFsControlFile(
|
|
_In_ PFLT_INSTANCE Instance,
|
|
_In_ PFILE_OBJECT FileObject,
|
|
_In_ ULONG FsControlCode,
|
|
_In_reads_bytes_opt_(InputBufferLength) PVOID InputBuffer,
|
|
_In_ ULONG InputBufferLength,
|
|
_Out_writes_bytes_to_opt_(OutputBufferLength,*LengthReturned) PVOID OutputBuffer,
|
|
_In_ ULONG OutputBufferLength,
|
|
_Out_opt_ PULONG LengthReturned);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(PASSIVE_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltDeviceIoControlFile(
|
|
_In_ PFLT_INSTANCE Instance,
|
|
_In_ PFILE_OBJECT FileObject,
|
|
_In_ ULONG IoControlCode,
|
|
_In_reads_bytes_opt_(InputBufferLength) PVOID InputBuffer,
|
|
_In_ ULONG InputBufferLength,
|
|
_Out_writes_bytes_to_opt_(OutputBufferLength,*LengthReturned) PVOID OutputBuffer,
|
|
_In_ ULONG OutputBufferLength,
|
|
_Out_opt_ PULONG LengthReturned);
|
|
|
|
_When_(FlagOn(CallbackData->Iopb->IrpFlags, IRP_PAGING_IO), _IRQL_requires_max_(APC_LEVEL))
|
|
_When_(!FlagOn(CallbackData->Iopb->IrpFlags, IRP_PAGING_IO), _IRQL_requires_max_(PASSIVE_LEVEL))
|
|
VOID
|
|
FLTAPI
|
|
FltReissueSynchronousIo(
|
|
_In_ PFLT_INSTANCE InitiatingInstance,
|
|
_In_ PFLT_CALLBACK_DATA CallbackData);
|
|
|
|
_IRQL_requires_max_(PASSIVE_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltClose(
|
|
_In_ HANDLE FileHandle);
|
|
|
|
_IRQL_requires_max_(PASSIVE_LEVEL)
|
|
VOID
|
|
FLTAPI
|
|
FltCancelFileOpen(
|
|
_In_ PFLT_INSTANCE Instance,
|
|
_In_ PFILE_OBJECT FileObject);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(PASSIVE_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltCreateSystemVolumeInformationFolder(
|
|
_In_ PFLT_INSTANCE Instance);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
BOOLEAN
|
|
FLTAPI
|
|
FltSupportsFileContexts(
|
|
_In_ PFILE_OBJECT FileObject);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
BOOLEAN
|
|
FLTAPI
|
|
FltSupportsStreamContexts(
|
|
_In_ PFILE_OBJECT FileObject);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
BOOLEAN
|
|
FLTAPI
|
|
FltSupportsStreamHandleContexts(
|
|
_In_ PFILE_OBJECT FileObject);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltAllocateContext(
|
|
_In_ PFLT_FILTER Filter,
|
|
_In_ FLT_CONTEXT_TYPE ContextType,
|
|
_In_ SIZE_T ContextSize,
|
|
_In_ POOL_TYPE PoolType,
|
|
_Outptr_result_bytebuffer_(ContextSize) PFLT_CONTEXT *ReturnedContext);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
VOID
|
|
FLTAPI
|
|
FltGetContexts(
|
|
_In_ PCFLT_RELATED_OBJECTS FltObjects,
|
|
_In_ FLT_CONTEXT_TYPE DesiredContexts,
|
|
_Out_ PFLT_RELATED_CONTEXTS Contexts);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
VOID
|
|
FLTAPI
|
|
FltReleaseContexts(
|
|
_In_ PFLT_RELATED_CONTEXTS Contexts);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltSetVolumeContext(
|
|
_In_ PFLT_VOLUME Volume,
|
|
_In_ FLT_SET_CONTEXT_OPERATION Operation,
|
|
_In_ PFLT_CONTEXT NewContext,
|
|
_Outptr_opt_result_maybenull_ PFLT_CONTEXT *OldContext);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltSetInstanceContext(
|
|
_In_ PFLT_INSTANCE Instance,
|
|
_In_ FLT_SET_CONTEXT_OPERATION Operation,
|
|
_In_ PFLT_CONTEXT NewContext,
|
|
_Outptr_opt_result_maybenull_ PFLT_CONTEXT *OldContext);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltSetFileContext(
|
|
_In_ PFLT_INSTANCE Instance,
|
|
_In_ PFILE_OBJECT FileObject,
|
|
_In_ FLT_SET_CONTEXT_OPERATION Operation,
|
|
_In_ PFLT_CONTEXT NewContext,
|
|
_Outptr_opt_result_maybenull_ PFLT_CONTEXT *OldContext);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltSetStreamContext(
|
|
_In_ PFLT_INSTANCE Instance,
|
|
_In_ PFILE_OBJECT FileObject,
|
|
_In_ FLT_SET_CONTEXT_OPERATION Operation,
|
|
_In_ PFLT_CONTEXT NewContext,
|
|
_Outptr_opt_result_maybenull_ PFLT_CONTEXT *OldContext);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltSetStreamHandleContext(
|
|
_In_ PFLT_INSTANCE Instance,
|
|
_In_ PFILE_OBJECT FileObject,
|
|
_In_ FLT_SET_CONTEXT_OPERATION Operation,
|
|
_In_ PFLT_CONTEXT NewContext,
|
|
_Outptr_opt_result_maybenull_ PFLT_CONTEXT *OldContext);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
VOID
|
|
FLTAPI
|
|
FltDeleteContext(
|
|
_In_ PFLT_CONTEXT Context);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltDeleteVolumeContext(
|
|
_In_ PFLT_FILTER Filter,
|
|
_In_ PFLT_VOLUME Volume,
|
|
_Outptr_opt_result_maybenull_ PFLT_CONTEXT *OldContext);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltDeleteInstanceContext(
|
|
_In_ PFLT_INSTANCE Instance,
|
|
_Outptr_opt_result_maybenull_ PFLT_CONTEXT *OldContext);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltDeleteFileContext(
|
|
_In_ PFLT_INSTANCE Instance,
|
|
_In_ PFILE_OBJECT FileObject,
|
|
_Outptr_opt_result_maybenull_ PFLT_CONTEXT *OldContext);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltDeleteStreamContext(
|
|
_In_ PFLT_INSTANCE Instance,
|
|
_In_ PFILE_OBJECT FileObject,
|
|
_Outptr_opt_result_maybenull_ PFLT_CONTEXT *OldContext);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltDeleteStreamHandleContext(
|
|
_In_ PFLT_INSTANCE Instance,
|
|
_In_ PFILE_OBJECT FileObject,
|
|
_Outptr_opt_result_maybenull_ PFLT_CONTEXT *OldContext);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltGetVolumeContext(
|
|
_In_ PFLT_FILTER Filter,
|
|
_In_ PFLT_VOLUME Volume,
|
|
_Outptr_ PFLT_CONTEXT *Context);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltGetInstanceContext(
|
|
_In_ PFLT_INSTANCE Instance,
|
|
_Outptr_ PFLT_CONTEXT *Context);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltGetFileContext(
|
|
_In_ PFLT_INSTANCE Instance,
|
|
_In_ PFILE_OBJECT FileObject,
|
|
_Outptr_ PFLT_CONTEXT *Context);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltGetStreamContext(
|
|
_In_ PFLT_INSTANCE Instance,
|
|
_In_ PFILE_OBJECT FileObject,
|
|
_Outptr_ PFLT_CONTEXT *Context);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltGetStreamHandleContext(
|
|
_In_ PFLT_INSTANCE Instance,
|
|
_In_ PFILE_OBJECT FileObject,
|
|
_Outptr_ PFLT_CONTEXT *Context);
|
|
|
|
_IRQL_requires_max_(DISPATCH_LEVEL)
|
|
VOID
|
|
FLTAPI
|
|
FltReferenceContext(
|
|
_In_ PFLT_CONTEXT Context);
|
|
|
|
_IRQL_requires_max_(DISPATCH_LEVEL)
|
|
VOID
|
|
FLTAPI
|
|
FltReleaseContext(
|
|
_In_ PFLT_CONTEXT Context);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltGetFilterFromName(
|
|
_In_ PCUNICODE_STRING FilterName,
|
|
_Outptr_ PFLT_FILTER *RetFilter);
|
|
|
|
_IRQL_requires_max_(PASSIVE_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltGetVolumeFromName(
|
|
_In_ PFLT_FILTER Filter,
|
|
_In_ PCUNICODE_STRING VolumeName,
|
|
_Outptr_ PFLT_VOLUME *RetVolume);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltGetVolumeInstanceFromName(
|
|
_In_opt_ PFLT_FILTER Filter,
|
|
_In_ PFLT_VOLUME Volume,
|
|
_In_opt_ PCUNICODE_STRING InstanceName,
|
|
_Outptr_ PFLT_INSTANCE *RetInstance);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltGetVolumeFromInstance(
|
|
_In_ PFLT_INSTANCE Instance,
|
|
_Outptr_ PFLT_VOLUME *RetVolume);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltGetFilterFromInstance(
|
|
_In_ PFLT_INSTANCE Instance,
|
|
_Outptr_ PFLT_FILTER *RetFilter);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltGetVolumeFromFileObject(
|
|
_In_ PFLT_FILTER Filter,
|
|
_In_ PFILE_OBJECT FileObject,
|
|
_Outptr_ PFLT_VOLUME *RetVolume);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltGetVolumeFromDeviceObject(
|
|
_In_ PFLT_FILTER Filter,
|
|
_In_ PDEVICE_OBJECT DeviceObject,
|
|
_Outptr_ PFLT_VOLUME *RetVolume);
|
|
|
|
_IRQL_requires_max_(DISPATCH_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltGetDeviceObject(
|
|
_In_ PFLT_VOLUME Volume,
|
|
_Outptr_ PDEVICE_OBJECT *DeviceObject);
|
|
|
|
_IRQL_requires_max_(DISPATCH_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltGetDiskDeviceObject(
|
|
_In_ PFLT_VOLUME Volume,
|
|
_Outptr_ PDEVICE_OBJECT *DiskDeviceObject);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltGetLowerInstance(
|
|
_In_ PFLT_INSTANCE CurrentInstance,
|
|
_Outptr_ PFLT_INSTANCE *LowerInstance);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltGetUpperInstance(
|
|
_In_ PFLT_INSTANCE CurrentInstance,
|
|
_Outptr_ PFLT_INSTANCE *UpperInstance);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltGetTopInstance(
|
|
_In_ PFLT_VOLUME Volume,
|
|
_Outptr_ PFLT_INSTANCE *Instance);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltGetBottomInstance(
|
|
_In_ PFLT_VOLUME Volume,
|
|
_Outptr_ PFLT_INSTANCE *Instance);
|
|
|
|
LONG
|
|
FLTAPI
|
|
FltCompareInstanceAltitudes(
|
|
_In_ PFLT_INSTANCE Instance1,
|
|
_In_ PFLT_INSTANCE Instance2);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltGetFilterInformation(
|
|
_In_ PFLT_FILTER Filter,
|
|
_In_ FILTER_INFORMATION_CLASS InformationClass,
|
|
_Out_writes_bytes_to_opt_(BufferSize, *BytesReturned) PVOID Buffer,
|
|
_In_ ULONG BufferSize,
|
|
_Out_ PULONG BytesReturned);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltGetInstanceInformation(
|
|
_In_ PFLT_INSTANCE Instance,
|
|
_In_ INSTANCE_INFORMATION_CLASS InformationClass,
|
|
_Out_writes_bytes_to_opt_(BufferSize,*BytesReturned) PVOID Buffer,
|
|
_In_ ULONG BufferSize,
|
|
_Out_ PULONG BytesReturned);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltGetVolumeProperties(
|
|
_In_ PFLT_VOLUME Volume,
|
|
_Out_writes_bytes_to_opt_(VolumePropertiesLength,*LengthReturned) PFLT_VOLUME_PROPERTIES VolumeProperties,
|
|
_In_ ULONG VolumePropertiesLength,
|
|
_Out_ PULONG LengthReturned);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(PASSIVE_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltIsVolumeWritable(
|
|
_In_ PVOID FltObject,
|
|
_Out_ PBOOLEAN IsWritable);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(PASSIVE_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltGetVolumeGuidName(
|
|
_In_ PFLT_VOLUME Volume,
|
|
_Out_ PUNICODE_STRING VolumeGuidName,
|
|
_Out_opt_ PULONG BufferSizeNeeded);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(PASSIVE_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltQueryVolumeInformation(
|
|
_In_ PFLT_INSTANCE Instance,
|
|
_Out_ PIO_STATUS_BLOCK Iosb,
|
|
_Out_writes_bytes_(Length) PVOID FsInformation,
|
|
_In_ ULONG Length,
|
|
_In_ FS_INFORMATION_CLASS FsInformationClass);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(PASSIVE_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltSetVolumeInformation(
|
|
_In_ PFLT_INSTANCE Instance,
|
|
_Out_ PIO_STATUS_BLOCK Iosb,
|
|
_Out_writes_bytes_(Length) PVOID FsInformation,
|
|
_In_ ULONG Length,
|
|
_In_ FS_INFORMATION_CLASS FsInformationClass);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltEnumerateFilters(
|
|
_Out_writes_to_opt_(FilterListSize,*NumberFiltersReturned) PFLT_FILTER *FilterList,
|
|
_In_ ULONG FilterListSize,
|
|
_Out_ PULONG NumberFiltersReturned);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltEnumerateVolumes(
|
|
_In_ PFLT_FILTER Filter,
|
|
_Out_writes_to_opt_(VolumeListSize,*NumberVolumesReturned) PFLT_VOLUME *VolumeList,
|
|
_In_ ULONG VolumeListSize,
|
|
_Out_ PULONG NumberVolumesReturned);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltEnumerateInstances(
|
|
_In_opt_ PFLT_VOLUME Volume,
|
|
_In_opt_ PFLT_FILTER Filter,
|
|
_Out_writes_to_opt_(InstanceListSize,*NumberInstancesReturned) PFLT_INSTANCE *InstanceList,
|
|
_In_ ULONG InstanceListSize,
|
|
_Out_ PULONG NumberInstancesReturned);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltEnumerateFilterInformation(
|
|
_In_ ULONG Index,
|
|
_In_ FILTER_INFORMATION_CLASS InformationClass,
|
|
_Out_writes_bytes_to_opt_(BufferSize,*BytesReturned) PVOID Buffer,
|
|
_In_ ULONG BufferSize,
|
|
_Out_ PULONG BytesReturned);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltEnumerateInstanceInformationByFilter(
|
|
_In_ PFLT_FILTER Filter,
|
|
_In_ ULONG Index,
|
|
_In_ INSTANCE_INFORMATION_CLASS InformationClass,
|
|
_Out_writes_bytes_to_opt_(BufferSize,*BytesReturned) PVOID Buffer,
|
|
_In_ ULONG BufferSize,
|
|
_Out_ PULONG BytesReturned);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltEnumerateInstanceInformationByVolume(
|
|
_In_ PFLT_VOLUME Volume,
|
|
_In_ ULONG Index,
|
|
_In_ INSTANCE_INFORMATION_CLASS InformationClass,
|
|
_Out_writes_bytes_to_opt_(BufferSize,*BytesReturned) PVOID Buffer,
|
|
_In_ ULONG BufferSize,
|
|
_Out_ PULONG BytesReturned);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltEnumerateVolumeInformation(
|
|
_In_ PFLT_FILTER Filter,
|
|
_In_ ULONG Index,
|
|
_In_ FILTER_VOLUME_INFORMATION_CLASS InformationClass,
|
|
_Out_writes_bytes_to_opt_(BufferSize,*BytesReturned) PVOID Buffer,
|
|
_In_ ULONG BufferSize,
|
|
_Out_ PULONG BytesReturned);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(DISPATCH_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltObjectReference(
|
|
_Inout_ PVOID FltObject);
|
|
|
|
_IRQL_requires_max_(DISPATCH_LEVEL)
|
|
VOID
|
|
FLTAPI
|
|
FltObjectDereference(
|
|
_Inout_ PVOID FltObject);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(PASSIVE_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltCreateCommunicationPort(
|
|
_In_ PFLT_FILTER Filter,
|
|
_Outptr_ PFLT_PORT *ServerPort,
|
|
_In_ POBJECT_ATTRIBUTES ObjectAttributes,
|
|
_In_opt_ PVOID ServerPortCookie,
|
|
_In_ PFLT_CONNECT_NOTIFY ConnectNotifyCallback,
|
|
_In_ PFLT_DISCONNECT_NOTIFY DisconnectNotifyCallback,
|
|
_In_opt_ PFLT_MESSAGE_NOTIFY MessageNotifyCallback,
|
|
_In_ LONG MaxConnections);
|
|
|
|
_IRQL_requires_max_(PASSIVE_LEVEL)
|
|
VOID
|
|
FLTAPI
|
|
FltCloseCommunicationPort(
|
|
_In_ PFLT_PORT ServerPort);
|
|
|
|
_IRQL_requires_max_(PASSIVE_LEVEL)
|
|
VOID
|
|
FLTAPI
|
|
FltCloseClientPort(
|
|
_In_ PFLT_FILTER Filter,
|
|
_Outptr_ PFLT_PORT *ClientPort);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltSendMessage(
|
|
_In_ PFLT_FILTER Filter,
|
|
_In_ PFLT_PORT *ClientPort,
|
|
_In_reads_bytes_(SenderBufferLength) PVOID SenderBuffer,
|
|
_In_ ULONG SenderBufferLength,
|
|
_Out_writes_bytes_opt_(*ReplyLength) PVOID ReplyBuffer,
|
|
_Inout_opt_ PULONG ReplyLength,
|
|
_In_opt_ PLARGE_INTEGER Timeout);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltBuildDefaultSecurityDescriptor(
|
|
_Outptr_ PSECURITY_DESCRIPTOR *SecurityDescriptor,
|
|
_In_ ACCESS_MASK DesiredAccess);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
VOID
|
|
FLTAPI
|
|
FltFreeSecurityDescriptor(
|
|
_In_ PSECURITY_DESCRIPTOR SecurityDescriptor);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(DISPATCH_LEVEL)
|
|
BOOLEAN
|
|
FLTAPI
|
|
FltCancelIo(
|
|
_In_ PFLT_CALLBACK_DATA CallbackData);
|
|
|
|
_IRQL_requires_max_(DISPATCH_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltSetCancelCompletion(
|
|
_In_ PFLT_CALLBACK_DATA CallbackData,
|
|
_In_ PFLT_COMPLETE_CANCELED_CALLBACK CanceledCallback);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(DISPATCH_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltClearCancelCompletion(
|
|
_In_ PFLT_CALLBACK_DATA CallbackData);
|
|
|
|
BOOLEAN
|
|
FLTAPI
|
|
FltIsIoCanceled(
|
|
_In_ PFLT_CALLBACK_DATA CallbackData);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(DISPATCH_LEVEL)
|
|
PFLT_DEFERRED_IO_WORKITEM
|
|
FLTAPI
|
|
FltAllocateDeferredIoWorkItem(VOID);
|
|
|
|
_IRQL_requires_max_(DISPATCH_LEVEL)
|
|
VOID
|
|
FLTAPI
|
|
FltFreeDeferredIoWorkItem(
|
|
_In_ PFLT_DEFERRED_IO_WORKITEM FltWorkItem);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(DISPATCH_LEVEL)
|
|
PFLT_GENERIC_WORKITEM
|
|
FLTAPI
|
|
FltAllocateGenericWorkItem(VOID);
|
|
|
|
_IRQL_requires_max_(DISPATCH_LEVEL)
|
|
VOID
|
|
FLTAPI
|
|
FltFreeGenericWorkItem(
|
|
_In_ PFLT_GENERIC_WORKITEM FltWorkItem);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(DISPATCH_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltQueueDeferredIoWorkItem(
|
|
_In_ PFLT_DEFERRED_IO_WORKITEM FltWorkItem,
|
|
_In_ PFLT_CALLBACK_DATA Data,
|
|
_In_ PFLT_DEFERRED_IO_WORKITEM_ROUTINE WorkerRoutine,
|
|
_In_ WORK_QUEUE_TYPE QueueType,
|
|
_In_ PVOID Context);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(DISPATCH_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltQueueGenericWorkItem(
|
|
_In_ PFLT_GENERIC_WORKITEM FltWorkItem,
|
|
_In_ PVOID FltObject,
|
|
_In_ PFLT_GENERIC_WORKITEM_ROUTINE WorkerRoutine,
|
|
_In_ WORK_QUEUE_TYPE QueueType,
|
|
_In_opt_ PVOID Context);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltLockUserBuffer(
|
|
_In_ PFLT_CALLBACK_DATA CallbackData);
|
|
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltDecodeParameters(
|
|
_In_ PFLT_CALLBACK_DATA CallbackData,
|
|
_Outptr_opt_ PMDL **MdlAddressPointer,
|
|
_Outptr_opt_result_bytebuffer_(**Length) PVOID **Buffer,
|
|
_Outptr_opt_ PULONG *Length,
|
|
_Out_opt_ LOCK_OPERATION *DesiredAccess);
|
|
|
|
PMDL
|
|
FASTCALL
|
|
FltGetSwappedBufferMdlAddress(
|
|
_In_ PFLT_CALLBACK_DATA CallbackData);
|
|
|
|
VOID
|
|
FASTCALL
|
|
FltRetainSwappedBufferMdlAddress(
|
|
_In_ PFLT_CALLBACK_DATA CallbackData);
|
|
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltCbdqInitialize(
|
|
_In_ PFLT_INSTANCE Instance,
|
|
_Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq,
|
|
_In_ PFLT_CALLBACK_DATA_QUEUE_INSERT_IO CbdqInsertIo,
|
|
_In_ PFLT_CALLBACK_DATA_QUEUE_REMOVE_IO CbdqRemoveIo,
|
|
_In_ PFLT_CALLBACK_DATA_QUEUE_PEEK_NEXT_IO CbdqPeekNextIo,
|
|
_In_ PFLT_CALLBACK_DATA_QUEUE_ACQUIRE CbdqAcquire,
|
|
_In_ PFLT_CALLBACK_DATA_QUEUE_RELEASE CbdqRelease,
|
|
_In_ PFLT_CALLBACK_DATA_QUEUE_COMPLETE_CANCELED_IO CbdqCompleteCanceledIo);
|
|
|
|
VOID
|
|
FLTAPI
|
|
FltCbdqEnable(
|
|
_Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq);
|
|
|
|
VOID
|
|
FLTAPI
|
|
FltCbdqDisable(
|
|
_Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq);
|
|
|
|
_Must_inspect_result_
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltCbdqInsertIo(
|
|
_Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq,
|
|
_In_ PFLT_CALLBACK_DATA Cbd,
|
|
_In_opt_ PFLT_CALLBACK_DATA_QUEUE_IO_CONTEXT Context,
|
|
_In_opt_ PVOID InsertContext);
|
|
|
|
_Must_inspect_result_
|
|
PFLT_CALLBACK_DATA
|
|
FLTAPI
|
|
FltCbdqRemoveIo(
|
|
_Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq,
|
|
_In_ PFLT_CALLBACK_DATA_QUEUE_IO_CONTEXT Context);
|
|
|
|
_Must_inspect_result_
|
|
PFLT_CALLBACK_DATA
|
|
FLTAPI
|
|
FltCbdqRemoveNextIo(
|
|
_Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq,
|
|
_In_opt_ PVOID PeekContext);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
VOID
|
|
FLTAPI
|
|
FltInitializeOplock(
|
|
_Out_ POPLOCK Oplock);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
VOID
|
|
FLTAPI
|
|
FltUninitializeOplock(
|
|
_In_ POPLOCK Oplock);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
FLT_PREOP_CALLBACK_STATUS
|
|
FLTAPI
|
|
FltOplockFsctrl(
|
|
_In_ POPLOCK Oplock,
|
|
_In_ PFLT_CALLBACK_DATA CallbackData,
|
|
_In_ ULONG OpenCount);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
FLT_PREOP_CALLBACK_STATUS
|
|
FLTAPI
|
|
FltCheckOplock(
|
|
_In_ POPLOCK Oplock,
|
|
_In_ PFLT_CALLBACK_DATA CallbackData,
|
|
_In_opt_ PVOID Context,
|
|
_In_opt_ PFLTOPLOCK_WAIT_COMPLETE_ROUTINE WaitCompletionRoutine,
|
|
_In_opt_ PFLTOPLOCK_PREPOST_CALLBACKDATA_ROUTINE PrePostCallbackDataRoutine);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
BOOLEAN
|
|
FLTAPI
|
|
FltOplockIsFastIoPossible(
|
|
_In_ POPLOCK Oplock);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
BOOLEAN
|
|
FLTAPI
|
|
FltCurrentBatchOplock(
|
|
_In_ POPLOCK Oplock);
|
|
|
|
VOID
|
|
FLTAPI
|
|
FltInitializeFileLock(
|
|
_Out_ PFILE_LOCK FileLock);
|
|
|
|
VOID
|
|
FLTAPI
|
|
FltUninitializeFileLock(
|
|
_In_ PFILE_LOCK FileLock);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
PFILE_LOCK
|
|
FLTAPI
|
|
FltAllocateFileLock(
|
|
_In_opt_ PFLT_COMPLETE_LOCK_CALLBACK_DATA_ROUTINE CompleteLockCallbackDataRoutine,
|
|
_In_opt_ PUNLOCK_ROUTINE UnlockRoutine);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
VOID
|
|
FLTAPI
|
|
FltFreeFileLock(
|
|
_In_ PFILE_LOCK FileLock);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
FLT_PREOP_CALLBACK_STATUS
|
|
FLTAPI
|
|
FltProcessFileLock(
|
|
_In_ PFILE_LOCK FileLock,
|
|
_In_ PFLT_CALLBACK_DATA CallbackData,
|
|
_In_opt_ PVOID Context);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
BOOLEAN
|
|
FLTAPI
|
|
FltCheckLockForReadAccess(
|
|
_In_ PFILE_LOCK FileLock,
|
|
_In_ PFLT_CALLBACK_DATA CallbackData);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
BOOLEAN
|
|
FLTAPI
|
|
FltCheckLockForWriteAccess(
|
|
_In_ PFILE_LOCK FileLock,
|
|
_In_ PFLT_CALLBACK_DATA CallbackData);
|
|
|
|
_Acquires_lock_(_Global_critical_region_)
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
VOID
|
|
FLTAPI
|
|
FltAcquireResourceExclusive(
|
|
_Inout_ _Requires_lock_not_held_(*_Curr_) _Acquires_lock_(*_Curr_) PERESOURCE Resource);
|
|
|
|
_Acquires_lock_(_Global_critical_region_)
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
VOID
|
|
FLTAPI
|
|
FltAcquireResourceShared(
|
|
_Inout_ _Requires_lock_not_held_(*_Curr_) _Acquires_lock_(*_Curr_) PERESOURCE Resource);
|
|
|
|
_Releases_lock_(_Global_critical_region_)
|
|
_IRQL_requires_max_(DISPATCH_LEVEL)
|
|
VOID
|
|
FLTAPI
|
|
FltReleaseResource(
|
|
_Inout_ _Requires_lock_held_(*_Curr_) _Releases_lock_(*_Curr_) PERESOURCE Resource);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
VOID
|
|
FLTAPI
|
|
FltInitializePushLock(
|
|
_Out_ PEX_PUSH_LOCK PushLock);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
VOID
|
|
FLTAPI
|
|
FltDeletePushLock(
|
|
_In_ PEX_PUSH_LOCK PushLock);
|
|
|
|
_Acquires_lock_(_Global_critical_region_)
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
VOID
|
|
FLTAPI
|
|
FltAcquirePushLockExclusive(
|
|
_Inout_ _Requires_lock_not_held_(*_Curr_) _Acquires_lock_(*_Curr_) PEX_PUSH_LOCK PushLock);
|
|
|
|
_Acquires_lock_(_Global_critical_region_)
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
VOID
|
|
FLTAPI
|
|
FltAcquirePushLockShared(
|
|
_Inout_ _Requires_lock_not_held_(*_Curr_) _Acquires_lock_(*_Curr_) PEX_PUSH_LOCK PushLock);
|
|
|
|
_Releases_lock_(_Global_critical_region_)
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
VOID
|
|
FLTAPI
|
|
FltReleasePushLock(
|
|
_Inout_ _Requires_lock_held_(*_Curr_) _Releases_lock_(*_Curr_) PEX_PUSH_LOCK PushLock);
|
|
|
|
BOOLEAN
|
|
FLTAPI
|
|
FltIsOperationSynchronous(
|
|
_In_ PFLT_CALLBACK_DATA CallbackData);
|
|
|
|
_IRQL_requires_max_(DISPATCH_LEVEL)
|
|
BOOLEAN
|
|
FLTAPI
|
|
FltIs32bitProcess(
|
|
_In_opt_ PFLT_CALLBACK_DATA CallbackData);
|
|
|
|
_IRQL_requires_max_(DISPATCH_LEVEL)
|
|
PEPROCESS
|
|
FLTAPI
|
|
FltGetRequestorProcess(
|
|
_In_ PFLT_CALLBACK_DATA CallbackData);
|
|
|
|
_IRQL_requires_max_(DISPATCH_LEVEL)
|
|
ULONG
|
|
FLTAPI
|
|
FltGetRequestorProcessId(
|
|
_In_ PFLT_CALLBACK_DATA CallbackData);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
VOID
|
|
FLTAPI
|
|
FltNotifyFilterChangeDirectory(
|
|
_Inout_ PNOTIFY_SYNC NotifySync,
|
|
_Inout_ PLIST_ENTRY NotifyList,
|
|
_In_ PVOID FsContext,
|
|
_In_ PSTRING FullDirectoryName,
|
|
_In_ BOOLEAN WatchTree,
|
|
_In_ BOOLEAN IgnoreBuffer,
|
|
_In_ ULONG CompletionFilter,
|
|
_In_ PFLT_CALLBACK_DATA NotifyCallbackData,
|
|
_In_opt_ PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback,
|
|
_In_opt_ PSECURITY_SUBJECT_CONTEXT SubjectContext,
|
|
_In_opt_ PFILTER_REPORT_CHANGE FilterCallback);
|
|
|
|
PCHAR
|
|
FLTAPI
|
|
FltGetIrpName(
|
|
_In_ UCHAR IrpMajorCode);
|
|
|
|
#if FLT_MGR_AFTER_XPSP2
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(PASSIVE_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltCreateFileEx(
|
|
_In_ PFLT_FILTER Filter,
|
|
_In_opt_ PFLT_INSTANCE Instance,
|
|
_Out_ PHANDLE FileHandle,
|
|
_Outptr_opt_ PFILE_OBJECT *FileObject,
|
|
_In_ ACCESS_MASK DesiredAccess,
|
|
_In_ POBJECT_ATTRIBUTES ObjectAttributes,
|
|
_Out_ PIO_STATUS_BLOCK IoStatusBlock,
|
|
_In_opt_ PLARGE_INTEGER AllocationSize,
|
|
_In_ ULONG FileAttributes,
|
|
_In_ ULONG ShareAccess,
|
|
_In_ ULONG CreateDisposition,
|
|
_In_ ULONG CreateOptions,
|
|
_In_reads_bytes_opt_(EaLength) PVOID EaBuffer,
|
|
_In_ ULONG EaLength,
|
|
_In_ ULONG Flags);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(PASSIVE_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltOpenVolume(
|
|
_In_ PFLT_INSTANCE Instance,
|
|
_Out_ PHANDLE VolumeHandle,
|
|
_Outptr_opt_ PFILE_OBJECT *VolumeFileObject);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(PASSIVE_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltQueryEaFile(
|
|
_In_ PFLT_INSTANCE Instance,
|
|
_In_ PFILE_OBJECT FileObject,
|
|
_Out_writes_bytes_to_(Length,*LengthReturned) PVOID ReturnedEaData,
|
|
_In_ ULONG Length,
|
|
_In_ BOOLEAN ReturnSingleEntry,
|
|
_In_reads_bytes_opt_(EaListLength) PVOID EaList,
|
|
_In_ ULONG EaListLength,
|
|
_In_opt_ PULONG EaIndex,
|
|
_In_ BOOLEAN RestartScan,
|
|
_Out_opt_ PULONG LengthReturned);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(PASSIVE_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltSetEaFile(
|
|
_In_ PFLT_INSTANCE Instance,
|
|
_In_ PFILE_OBJECT FileObject,
|
|
_In_reads_bytes_(Length) PVOID EaBuffer,
|
|
_In_ ULONG Length);
|
|
|
|
#endif /* FLT_MGR_AFTER_XPSP2 */
|
|
|
|
#if FLT_MGR_LONGHORN
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(PASSIVE_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltCreateFileEx2(
|
|
_In_ PFLT_FILTER Filter,
|
|
_In_opt_ PFLT_INSTANCE Instance,
|
|
_Out_ PHANDLE FileHandle,
|
|
_Outptr_opt_ PFILE_OBJECT *FileObject,
|
|
_In_ ACCESS_MASK DesiredAccess,
|
|
_In_ POBJECT_ATTRIBUTES ObjectAttributes,
|
|
_Out_ PIO_STATUS_BLOCK IoStatusBlock,
|
|
_In_opt_ PLARGE_INTEGER AllocationSize,
|
|
_In_ ULONG FileAttributes,
|
|
_In_ ULONG ShareAccess,
|
|
_In_ ULONG CreateDisposition,
|
|
_In_ ULONG CreateOptions,
|
|
_In_reads_bytes_opt_(EaLength) PVOID EaBuffer,
|
|
_In_ ULONG EaLength,
|
|
_In_ ULONG Flags,
|
|
_In_opt_ PIO_DRIVER_CREATE_CONTEXT DriverContext);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(PASSIVE_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltQueryDirectoryFile(
|
|
_In_ PFLT_INSTANCE Instance,
|
|
_In_ PFILE_OBJECT FileObject,
|
|
_Out_writes_bytes_(Length) PVOID FileInformation,
|
|
_In_ ULONG Length,
|
|
_In_ FILE_INFORMATION_CLASS FileInformationClass,
|
|
_In_ BOOLEAN ReturnSingleEntry,
|
|
_In_opt_ PUNICODE_STRING FileName,
|
|
_In_ BOOLEAN RestartScan,
|
|
_Out_opt_ PULONG LengthReturned);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
BOOLEAN
|
|
FLTAPI
|
|
FltSupportsFileContextsEx(
|
|
_In_ PFILE_OBJECT FileObject,
|
|
_In_opt_ PFLT_INSTANCE Instance);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltSetTransactionContext(
|
|
_In_ PFLT_INSTANCE Instance,
|
|
_In_ PKTRANSACTION Transaction,
|
|
_In_ FLT_SET_CONTEXT_OPERATION Operation,
|
|
_In_ PFLT_CONTEXT NewContext,
|
|
_Outptr_opt_ PFLT_CONTEXT *OldContext);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltDeleteTransactionContext(
|
|
_In_ PFLT_INSTANCE Instance,
|
|
_In_ PKTRANSACTION Transaction,
|
|
_Outptr_opt_ PFLT_CONTEXT *OldContext);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltGetTransactionContext(
|
|
_In_ PFLT_INSTANCE Instance,
|
|
_In_ PKTRANSACTION Transaction,
|
|
_Outptr_ PFLT_CONTEXT *Context);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
BOOLEAN
|
|
FLTAPI
|
|
FltIsFltMgrVolumeDeviceObject(
|
|
_In_ PDEVICE_OBJECT DeviceObject);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltGetVolumeInformation(
|
|
_In_ PFLT_VOLUME Volume,
|
|
_In_ FILTER_VOLUME_INFORMATION_CLASS InformationClass,
|
|
_Out_writes_bytes_to_opt_(BufferSize,*BytesReturned) PVOID Buffer,
|
|
_In_ ULONG BufferSize,
|
|
_Out_ PULONG BytesReturned);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltGetFileSystemType(
|
|
_In_ PVOID FltObject,
|
|
_Out_ PFLT_FILESYSTEM_TYPE FileSystemType);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(PASSIVE_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltIsVolumeSnapshot(
|
|
_In_ PVOID FltObject,
|
|
_Out_ PBOOLEAN IsSnapshotVolume);
|
|
|
|
_Must_inspect_result_
|
|
_When_(((CallbackData!=NULL) && FLT_IS_IRP_OPERATION(CallbackData)), _IRQL_requires_max_(PASSIVE_LEVEL))
|
|
_When_((!((CallbackData!=NULL) && FLT_IS_IRP_OPERATION(CallbackData))), _IRQL_requires_max_(APC_LEVEL))
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltCancellableWaitForSingleObject(
|
|
_In_ PVOID Object,
|
|
_In_opt_ PLARGE_INTEGER Timeout,
|
|
_In_opt_ PFLT_CALLBACK_DATA CallbackData);
|
|
|
|
_Must_inspect_result_
|
|
_When_(((CallbackData!=NULL) && FLT_IS_IRP_OPERATION(CallbackData)), _IRQL_requires_max_(PASSIVE_LEVEL))
|
|
_When_((!((CallbackData!=NULL) && FLT_IS_IRP_OPERATION(CallbackData))), _IRQL_requires_max_(APC_LEVEL))
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltCancellableWaitForMultipleObjects(
|
|
_In_ ULONG Count,
|
|
_In_reads_(Count) PVOID ObjectArray[],
|
|
_In_ WAIT_TYPE WaitType,
|
|
_In_opt_ PLARGE_INTEGER Timeout,
|
|
_In_opt_ PKWAIT_BLOCK WaitBlockArray,
|
|
_In_ PFLT_CALLBACK_DATA CallbackData);
|
|
|
|
_IRQL_requires_max_(DISPATCH_LEVEL)
|
|
HANDLE
|
|
FLTAPI
|
|
FltGetRequestorProcessIdEx(
|
|
_In_ PFLT_CALLBACK_DATA CallbackData);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltEnlistInTransaction(
|
|
_In_ PFLT_INSTANCE Instance,
|
|
_In_ PKTRANSACTION Transaction,
|
|
_In_ PFLT_CONTEXT TransactionContext,
|
|
_In_ NOTIFICATION_MASK NotificationMask);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltRollbackEnlistment(
|
|
_In_ PFLT_INSTANCE Instance,
|
|
_In_ PKTRANSACTION Transaction,
|
|
_In_opt_ PFLT_CONTEXT TransactionContext);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltPrePrepareComplete(
|
|
_In_ PFLT_INSTANCE Instance,
|
|
_In_ PKTRANSACTION Transaction,
|
|
_In_opt_ PFLT_CONTEXT TransactionContext);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltPrepareComplete(
|
|
_In_ PFLT_INSTANCE Instance,
|
|
_In_ PKTRANSACTION Transaction,
|
|
_In_opt_ PFLT_CONTEXT TransactionContext);
|
|
|
|
_IRQL_requires_max_(PASSIVE_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltCommitComplete(
|
|
_In_ PFLT_INSTANCE Instance,
|
|
_In_ PKTRANSACTION Transaction,
|
|
_In_opt_ PFLT_CONTEXT TransactionContext);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltCommitFinalizeComplete(
|
|
_In_ PFLT_INSTANCE Instance,
|
|
_In_ PKTRANSACTION Transaction,
|
|
_In_opt_ PFLT_CONTEXT TransactionContext);
|
|
|
|
_IRQL_requires_max_(PASSIVE_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltRollbackComplete(
|
|
_In_ PFLT_INSTANCE Instance,
|
|
_In_ PKTRANSACTION Transaction,
|
|
_In_opt_ PFLT_CONTEXT TransactionContext);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltAllocateExtraCreateParameterList(
|
|
_In_ PFLT_FILTER Filter,
|
|
_In_ FSRTL_ALLOCATE_ECPLIST_FLAGS Flags,
|
|
_Outptr_ PECP_LIST *EcpList);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltAllocateExtraCreateParameter(
|
|
_In_ PFLT_FILTER Filter,
|
|
_In_ LPCGUID EcpType,
|
|
ULONG SizeOfContext,
|
|
_In_ FSRTL_ALLOCATE_ECP_FLAGS Flags,
|
|
_In_opt_ PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback,
|
|
_In_ ULONG PoolTag,
|
|
_Outptr_ PVOID *EcpContext);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
VOID
|
|
FLTAPI
|
|
FltInitExtraCreateParameterLookasideList(
|
|
_In_ PFLT_FILTER Filter,
|
|
_Inout_ PVOID Lookaside,
|
|
_In_ FSRTL_ECP_LOOKASIDE_FLAGS Flags,
|
|
_In_ SIZE_T Size,
|
|
_In_ ULONG Tag);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
VOID
|
|
FLTAPI
|
|
FltDeleteExtraCreateParameterLookasideList(
|
|
_In_ PFLT_FILTER Filter,
|
|
_Inout_ PVOID Lookaside,
|
|
_In_ FSRTL_ECP_LOOKASIDE_FLAGS Flags);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltAllocateExtraCreateParameterFromLookasideList(
|
|
_In_ PFLT_FILTER Filter,
|
|
_In_ LPCGUID EcpType,
|
|
_In_ ULONG SizeOfContext,
|
|
_In_ FSRTL_ALLOCATE_ECP_FLAGS Flags,
|
|
_In_opt_ PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback,
|
|
_Inout_ PVOID LookasideList,
|
|
_Outptr_ PVOID *EcpContext);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltInsertExtraCreateParameter(
|
|
_In_ PFLT_FILTER Filter,
|
|
_Inout_ PECP_LIST EcpList,
|
|
_Inout_ PVOID EcpContext);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltFindExtraCreateParameter(
|
|
_In_ PFLT_FILTER Filter,
|
|
_In_ PECP_LIST EcpList,
|
|
_In_ LPCGUID EcpType,
|
|
_Outptr_opt_ PVOID *EcpContext,
|
|
_Out_opt_ ULONG *EcpContextSize);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltRemoveExtraCreateParameter(
|
|
_In_ PFLT_FILTER Filter,
|
|
_Inout_ PECP_LIST EcpList,
|
|
_In_ LPCGUID EcpType,
|
|
_Outptr_ PVOID *EcpContext,
|
|
_Out_opt_ ULONG *EcpContextSize);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
VOID
|
|
FLTAPI
|
|
FltFreeExtraCreateParameterList(
|
|
_In_ PFLT_FILTER Filter,
|
|
_In_ PECP_LIST EcpList);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
VOID
|
|
FLTAPI
|
|
FltFreeExtraCreateParameter(
|
|
_In_ PFLT_FILTER Filter,
|
|
_In_ PVOID EcpContext);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltGetEcpListFromCallbackData(
|
|
_In_ PFLT_FILTER Filter,
|
|
_In_ PFLT_CALLBACK_DATA CallbackData,
|
|
_Outptr_result_maybenull_ PECP_LIST *EcpList);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltSetEcpListIntoCallbackData(
|
|
_In_ PFLT_FILTER Filter,
|
|
_In_ PFLT_CALLBACK_DATA CallbackData,
|
|
_In_ PECP_LIST EcpList);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltGetNextExtraCreateParameter(
|
|
_In_ PFLT_FILTER Filter,
|
|
_In_ PECP_LIST EcpList,
|
|
_In_opt_ PVOID CurrentEcpContext,
|
|
_Out_opt_ LPGUID NextEcpType,
|
|
_Outptr_opt_ PVOID *NextEcpContext,
|
|
_Out_opt_ ULONG *NextEcpContextSize);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
VOID
|
|
FLTAPI
|
|
FltAcknowledgeEcp(
|
|
_In_ PFLT_FILTER Filter,
|
|
_In_ PVOID EcpContext);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
BOOLEAN
|
|
FLTAPI
|
|
FltIsEcpAcknowledged(
|
|
_In_ PFLT_FILTER Filter,
|
|
_In_ PVOID EcpContext);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
BOOLEAN
|
|
FLTAPI
|
|
FltIsEcpFromUserMode(
|
|
_In_ PFLT_FILTER Filter,
|
|
_In_ PVOID EcpContext);
|
|
|
|
_IRQL_requires_max_(DISPATCH_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltRetrieveIoPriorityInfo(
|
|
_In_opt_ PFLT_CALLBACK_DATA Data,
|
|
_In_opt_ PFILE_OBJECT FileObject,
|
|
_In_opt_ PETHREAD Thread,
|
|
_Inout_ PIO_PRIORITY_INFO PriorityInfo);
|
|
|
|
_IRQL_requires_max_(DISPATCH_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltApplyPriorityInfoThread(
|
|
_In_ PIO_PRIORITY_INFO InputPriorityInfo,
|
|
_Out_opt_ PIO_PRIORITY_INFO OutputPriorityInfo,
|
|
_In_ PETHREAD Thread);
|
|
|
|
_IRQL_requires_max_(DISPATCH_LEVEL)
|
|
IO_PRIORITY_HINT
|
|
FLTAPI
|
|
FltGetIoPriorityHint(
|
|
_In_ PFLT_CALLBACK_DATA Data);
|
|
|
|
_IRQL_requires_max_(DISPATCH_LEVEL)
|
|
IO_PRIORITY_HINT
|
|
FLTAPI
|
|
FltGetIoPriorityHintFromCallbackData(
|
|
_In_ PFLT_CALLBACK_DATA Data);
|
|
|
|
_IRQL_requires_max_(DISPATCH_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltSetIoPriorityHintIntoCallbackData(
|
|
_In_ PFLT_CALLBACK_DATA Data,
|
|
_In_ IO_PRIORITY_HINT PriorityHint);
|
|
|
|
_IRQL_requires_max_(DISPATCH_LEVEL)
|
|
IO_PRIORITY_HINT
|
|
FLTAPI
|
|
FltGetIoPriorityHintFromFileObject(
|
|
_In_ PFILE_OBJECT FileObject);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(DISPATCH_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltSetIoPriorityHintIntoFileObject(
|
|
_In_ PFILE_OBJECT FileObject,
|
|
_In_ IO_PRIORITY_HINT PriorityHint);
|
|
|
|
_IRQL_requires_max_(DISPATCH_LEVEL)
|
|
IO_PRIORITY_HINT
|
|
FLTAPI
|
|
FltGetIoPriorityHintFromThread(
|
|
_In_ PETHREAD Thread);
|
|
|
|
_IRQL_requires_max_(DISPATCH_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltSetIoPriorityHintIntoThread(
|
|
_In_ PETHREAD Thread,
|
|
_In_ IO_PRIORITY_HINT PriorityHint);
|
|
|
|
#endif /* FLT_MGR_LONGHORN */
|
|
|
|
#if FLT_MGR_WIN7
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltAllocateCallbackDataEx(
|
|
_In_ PFLT_INSTANCE Instance,
|
|
_In_opt_ PFILE_OBJECT FileObject,
|
|
_In_ FLT_ALLOCATE_CALLBACK_DATA_FLAGS Flags,
|
|
_Outptr_ PFLT_CALLBACK_DATA *RetNewCallbackData);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(DPC_LEVEL)
|
|
PVOID
|
|
FLTAPI
|
|
FltGetNewSystemBufferAddress(
|
|
_In_ PFLT_CALLBACK_DATA CallbackData);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
FLT_PREOP_CALLBACK_STATUS
|
|
FLTAPI
|
|
FltCheckOplockEx(
|
|
_In_ POPLOCK Oplock,
|
|
_In_ PFLT_CALLBACK_DATA CallbackData,
|
|
_In_ ULONG Flags,
|
|
_In_opt_ PVOID Context,
|
|
_In_opt_ PFLTOPLOCK_WAIT_COMPLETE_ROUTINE WaitCompletionRoutine,
|
|
_In_opt_ PFLTOPLOCK_PREPOST_CALLBACKDATA_ROUTINE PrePostCallbackDataRoutine);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
BOOLEAN
|
|
FLTAPI
|
|
FltCurrentOplock(
|
|
_In_ POPLOCK Oplock);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
BOOLEAN
|
|
FLTAPI
|
|
FltCurrentOplockH(
|
|
_In_ POPLOCK Oplock);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
FLT_PREOP_CALLBACK_STATUS
|
|
FLTAPI
|
|
FltOplockBreakH(
|
|
_In_ POPLOCK Oplock,
|
|
_In_ PFLT_CALLBACK_DATA CallbackData,
|
|
_In_ ULONG Flags,
|
|
_In_opt_ PVOID Context,
|
|
_In_opt_ PFLTOPLOCK_WAIT_COMPLETE_ROUTINE WaitCompletionRoutine,
|
|
_In_opt_ PFLTOPLOCK_PREPOST_CALLBACKDATA_ROUTINE PrePostCallbackDataRoutine);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
FLT_PREOP_CALLBACK_STATUS
|
|
FLTAPI
|
|
FltOplockBreakToNone(
|
|
_In_ POPLOCK Oplock,
|
|
_In_ PFLT_CALLBACK_DATA CallbackData,
|
|
_In_opt_ PVOID Context,
|
|
_In_opt_ PFLTOPLOCK_WAIT_COMPLETE_ROUTINE WaitCompletionRoutine,
|
|
_In_opt_ PFLTOPLOCK_PREPOST_CALLBACKDATA_ROUTINE PrePostCallbackDataRoutine);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
FLT_PREOP_CALLBACK_STATUS
|
|
FLTAPI
|
|
FltOplockBreakToNoneEx(
|
|
_In_ POPLOCK Oplock,
|
|
_In_ PFLT_CALLBACK_DATA CallbackData,
|
|
_In_ ULONG Flags,
|
|
_In_opt_ PVOID Context,
|
|
_In_opt_ PFLTOPLOCK_WAIT_COMPLETE_ROUTINE WaitCompletionRoutine,
|
|
_In_opt_ PFLTOPLOCK_PREPOST_CALLBACKDATA_ROUTINE PrePostCallbackDataRoutine);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
BOOLEAN
|
|
FLTAPI
|
|
FltOplockIsSharedRequest(
|
|
_In_ PFLT_CALLBACK_DATA CallbackData);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
FLT_PREOP_CALLBACK_STATUS
|
|
FLTAPI
|
|
FltOplockFsctrlEx(
|
|
_In_ POPLOCK Oplock,
|
|
_In_ PFLT_CALLBACK_DATA CallbackData,
|
|
_In_ ULONG OpenCount,
|
|
_In_ ULONG Flags);
|
|
|
|
BOOLEAN
|
|
FLTAPI
|
|
FltOplockKeysEqual(
|
|
_In_opt_ PFILE_OBJECT Fo1,
|
|
_In_opt_ PFILE_OBJECT Fo2);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltGetRequestorSessionId(
|
|
_In_ PFLT_CALLBACK_DATA CallbackData,
|
|
_Out_ PULONG SessionId);
|
|
|
|
_IRQL_requires_max_(DISPATCH_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltAdjustDeviceStackSizeForIoRedirection(
|
|
_In_ PFLT_INSTANCE SourceInstance,
|
|
_In_ PFLT_INSTANCE TargetInstance,
|
|
_Out_opt_ PBOOLEAN SourceDeviceStackSizeModified);
|
|
|
|
_IRQL_requires_max_(DISPATCH_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltIsIoRedirectionAllowed(
|
|
_In_ PFLT_INSTANCE SourceInstance,
|
|
_In_ PFLT_INSTANCE TargetInstance,
|
|
_Out_ PBOOLEAN RedirectionAllowed);
|
|
|
|
_IRQL_requires_max_(DISPATCH_LEVEL)
|
|
NTSTATUS
|
|
FLTAPI
|
|
FltIsIoRedirectionAllowedForOperation(
|
|
_In_ PFLT_CALLBACK_DATA Data,
|
|
_In_ PFLT_INSTANCE TargetInstance,
|
|
_Out_ PBOOLEAN RedirectionAllowedThisIo,
|
|
_Out_opt_ PBOOLEAN RedirectionAllowedAllIo);
|
|
|
|
#endif /* FLT_MGR_WIN7 */
|
|
|
|
#endif /* FLT_MGR_BASELINE */
|
|
|
|
#ifdef __cplusplus
|
|
} /* extern "C" */
|
|
#endif
|
|
|
|
#endif /* __FLTKERNEL__ */
|