ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

fltkernel.h
Go to the documentation of this file.
00001 /*
00002  * fltkernel.h
00003  *
00004  * This file is part of the ReactOS DDK package.
00005  *
00006  * Contributors:
00007  *   Amine Khaldi (amine.khaldi@reactos.org)
00008  *
00009  * THIS SOFTWARE IS NOT COPYRIGHTED
00010  *
00011  * This source code is offered for use in the public domain. You may
00012  * use, modify or distribute it freely.
00013  *
00014  * This code is distributed in the hope that it will be useful but
00015  * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
00016  * DISCLAIMED. This includes but is not limited to warranties of
00017  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
00018  *
00019  */
00020 #pragma once
00021 
00022 #ifndef __FLTKERNEL__
00023 #define __FLTKERNEL__
00024 
00025 #ifdef __cplusplus
00026 extern "C" {
00027 #endif
00028 
00029 #define FLT_MGR_BASELINE (((OSVER(NTDDI_VERSION) == NTDDI_WIN2K) && (SPVER(NTDDI_VERSION) >= SPVER(NTDDI_WIN2KSP4))) || \
00030                           ((OSVER(NTDDI_VERSION) == NTDDI_WINXP) && (SPVER(NTDDI_VERSION) >= SPVER(NTDDI_WINXPSP2))) || \
00031                           ((OSVER(NTDDI_VERSION) == NTDDI_WS03)  && (SPVER(NTDDI_VERSION) >= SPVER(NTDDI_WS03SP1)))  || \
00032                           (NTDDI_VERSION >= NTDDI_VISTA))
00033 
00034 #define FLT_MGR_AFTER_XPSP2 (((OSVER(NTDDI_VERSION) == NTDDI_WIN2K) && (SPVER(NTDDI_VERSION) >= SPVER(NTDDI_WIN2KSP4))) || \
00035                              ((OSVER(NTDDI_VERSION) == NTDDI_WINXP) && (SPVER(NTDDI_VERSION) >  SPVER(NTDDI_WINXPSP2))) || \
00036                              ((OSVER(NTDDI_VERSION) == NTDDI_WS03)  && (SPVER(NTDDI_VERSION) >= SPVER(NTDDI_WS03SP1)))  || \
00037                              (NTDDI_VERSION >= NTDDI_VISTA))
00038 
00039 #define FLT_MGR_LONGHORN (NTDDI_VERSION >= NTDDI_VISTA)
00040 #define FLT_MGR_WIN7 (NTDDI_VERSION >= NTDDI_WIN7)
00041 
00042 #include <ntifs.h>
00043 #include <fltuserstructures.h>
00044 #include <initguid.h>
00045 
00046 #if FLT_MGR_BASELINE
00047 
00048 #if FLT_MGR_LONGHORN
00049 #define FLT_ASSERT(_e) NT_ASSERT(_e)
00050 #define FLT_ASSERTMSG(_m, _e) NT_ASSERTMSG(_m, _e)
00051 #else
00052 #define FLT_ASSERT(_e) ASSERT(_e)
00053 #define FLT_ASSERTMSG(_m, _e) ASSERTMSG(_m, _e)
00054 #endif /* FLT_MGR_LONGHORN */
00055 
00056 #define Add2Ptr(P,I) ((PVOID)((PUCHAR)(P) + (I)))
00057 #define PtrOffset(B,O) ((ULONG)((ULONG_PTR)(O) - (ULONG_PTR)(B)))
00058 
00059 #define ROUND_TO_SIZE(_length, _alignment) \
00060   ((((ULONG_PTR)(_length)) + ((_alignment)-1)) & ~(ULONG_PTR) ((_alignment) - 1))
00061 
00062 #define IS_ALIGNED(_pointer, _alignment) \
00063   ((((ULONG_PTR) (_pointer)) & ((_alignment) - 1)) == 0)
00064 
00065 #define IRP_MJ_ACQUIRE_FOR_SECTION_SYNCHRONIZATION ((UCHAR)-1)
00066 #define IRP_MJ_RELEASE_FOR_SECTION_SYNCHRONIZATION ((UCHAR)-2)
00067 #define IRP_MJ_ACQUIRE_FOR_MOD_WRITE               ((UCHAR)-3)
00068 #define IRP_MJ_RELEASE_FOR_MOD_WRITE               ((UCHAR)-4)
00069 #define IRP_MJ_ACQUIRE_FOR_CC_FLUSH                ((UCHAR)-5)
00070 #define IRP_MJ_RELEASE_FOR_CC_FLUSH                ((UCHAR)-6)
00071 #define IRP_MJ_FAST_IO_CHECK_IF_POSSIBLE           ((UCHAR)-13)
00072 #define IRP_MJ_NETWORK_QUERY_OPEN                  ((UCHAR)-14)
00073 #define IRP_MJ_MDL_READ                            ((UCHAR)-15)
00074 #define IRP_MJ_MDL_READ_COMPLETE                   ((UCHAR)-16)
00075 #define IRP_MJ_PREPARE_MDL_WRITE                   ((UCHAR)-17)
00076 #define IRP_MJ_MDL_WRITE_COMPLETE                  ((UCHAR)-18)
00077 #define IRP_MJ_VOLUME_MOUNT                        ((UCHAR)-19)
00078 #define IRP_MJ_VOLUME_DISMOUNT                     ((UCHAR)-20)
00079 #define IRP_MJ_OPERATION_END                       ((UCHAR)0x80)
00080 #define FLT_INTERNAL_OPERATION_COUNT               22
00081 
00082 #define NULL_CONTEXT ((PFLT_CONTEXT)NULL)
00083 
00084 typedef struct _FLT_FILTER *PFLT_FILTER;
00085 typedef struct _FLT_VOLUME *PFLT_VOLUME;
00086 typedef struct _FLT_INSTANCE *PFLT_INSTANCE;
00087 typedef struct _FLT_PORT *PFLT_PORT;
00088 
00089 typedef PVOID PFLT_CONTEXT;
00090 
00091 #if !FLT_MGR_LONGHORN
00092 typedef struct _KTRANSACTION *PKTRANSACTION;
00093 #endif
00094 
00095 #if !defined(_AMD64_) && !defined(_IA64_) && !defined(_ARM_)
00096 #include "pshpack4.h"
00097 #endif
00098 
00099 typedef union _FLT_PARAMETERS {
00100   struct {
00101     PIO_SECURITY_CONTEXT SecurityContext;
00102     ULONG Options;
00103     USHORT POINTER_ALIGNMENT FileAttributes;
00104     USHORT ShareAccess;
00105     ULONG POINTER_ALIGNMENT EaLength;
00106     PVOID EaBuffer;
00107     LARGE_INTEGER AllocationSize;
00108   } Create;
00109   struct {
00110     PIO_SECURITY_CONTEXT SecurityContext;
00111     ULONG Options;
00112     USHORT POINTER_ALIGNMENT Reserved;
00113     USHORT ShareAccess;
00114     PVOID Parameters;
00115   } CreatePipe;
00116   struct {
00117     PIO_SECURITY_CONTEXT SecurityContext;
00118     ULONG Options;
00119     USHORT POINTER_ALIGNMENT Reserved;
00120     USHORT ShareAccess;
00121     PVOID Parameters;
00122   } CreateMailslot;
00123   struct {
00124     ULONG Length;
00125     ULONG POINTER_ALIGNMENT Key;
00126     LARGE_INTEGER ByteOffset;
00127     PVOID ReadBuffer;
00128     PMDL MdlAddress;
00129   } Read;
00130   struct {
00131     ULONG Length;
00132     ULONG POINTER_ALIGNMENT Key;
00133     LARGE_INTEGER ByteOffset;
00134     PVOID WriteBuffer;
00135     PMDL MdlAddress;
00136   } Write;
00137   struct {
00138     ULONG Length;
00139     FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass;
00140     PVOID InfoBuffer;
00141   } QueryFileInformation;
00142   struct {
00143     ULONG Length;
00144     FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass;
00145     PFILE_OBJECT ParentOfTarget;
00146     _ANONYMOUS_UNION union {
00147       _ANONYMOUS_STRUCT struct {
00148         BOOLEAN ReplaceIfExists;
00149         BOOLEAN AdvanceOnly;
00150       } DUMMYSTRUCTNAME;
00151       ULONG ClusterCount;
00152       HANDLE DeleteHandle;
00153     } DUMMYUNIONNAME;
00154     PVOID InfoBuffer;
00155   } SetFileInformation;
00156   struct {
00157     ULONG Length;
00158     PVOID EaList;
00159     ULONG EaListLength;
00160     ULONG POINTER_ALIGNMENT EaIndex;
00161     PVOID EaBuffer;
00162     PMDL MdlAddress;
00163   } QueryEa;
00164   struct {
00165     ULONG Length;
00166     PVOID EaBuffer;
00167     PMDL MdlAddress;
00168   } SetEa;
00169   struct {
00170     ULONG Length;
00171     FS_INFORMATION_CLASS POINTER_ALIGNMENT FsInformationClass;
00172     PVOID VolumeBuffer;
00173   } QueryVolumeInformation;
00174   struct {
00175     ULONG Length;
00176     FS_INFORMATION_CLASS POINTER_ALIGNMENT FsInformationClass;
00177     PVOID VolumeBuffer;
00178   } SetVolumeInformation;
00179   union {
00180     struct {
00181       ULONG Length;
00182       PUNICODE_STRING FileName;
00183       FILE_INFORMATION_CLASS FileInformationClass;
00184       ULONG POINTER_ALIGNMENT FileIndex;
00185       PVOID DirectoryBuffer;
00186       PMDL MdlAddress;
00187     } QueryDirectory;
00188     struct {
00189       ULONG Length;
00190       ULONG POINTER_ALIGNMENT CompletionFilter;
00191       ULONG POINTER_ALIGNMENT Spare1;
00192       ULONG POINTER_ALIGNMENT Spare2;
00193       PVOID DirectoryBuffer;
00194       PMDL MdlAddress;
00195     } NotifyDirectory;
00196   } DirectoryControl;
00197   union {
00198     struct {
00199       PVPB Vpb;
00200       PDEVICE_OBJECT DeviceObject;
00201     } VerifyVolume;
00202     struct {
00203       ULONG OutputBufferLength;
00204       ULONG POINTER_ALIGNMENT InputBufferLength;
00205       ULONG POINTER_ALIGNMENT FsControlCode;
00206     } Common;
00207     struct {
00208       ULONG OutputBufferLength;
00209       ULONG POINTER_ALIGNMENT InputBufferLength;
00210       ULONG POINTER_ALIGNMENT FsControlCode;
00211       PVOID InputBuffer;
00212       PVOID OutputBuffer;
00213       PMDL OutputMdlAddress;
00214     } Neither;
00215     struct {
00216       ULONG OutputBufferLength;
00217       ULONG POINTER_ALIGNMENT InputBufferLength;
00218       ULONG POINTER_ALIGNMENT FsControlCode;
00219       PVOID SystemBuffer;
00220     } Buffered;
00221     struct {
00222       ULONG OutputBufferLength;
00223       ULONG POINTER_ALIGNMENT InputBufferLength;
00224       ULONG POINTER_ALIGNMENT FsControlCode;
00225       PVOID InputSystemBuffer;
00226       PVOID OutputBuffer;
00227       PMDL OutputMdlAddress;
00228     } Direct;
00229   } FileSystemControl;
00230   union {
00231     struct {
00232       ULONG OutputBufferLength;
00233       ULONG POINTER_ALIGNMENT InputBufferLength;
00234       ULONG POINTER_ALIGNMENT IoControlCode;
00235     } Common;
00236     struct {
00237       ULONG OutputBufferLength;
00238       ULONG POINTER_ALIGNMENT InputBufferLength;
00239       ULONG POINTER_ALIGNMENT IoControlCode;
00240       PVOID InputBuffer;
00241       PVOID OutputBuffer;
00242       PMDL OutputMdlAddress;
00243     } Neither;
00244     struct {
00245       ULONG OutputBufferLength;
00246       ULONG POINTER_ALIGNMENT InputBufferLength;
00247       ULONG POINTER_ALIGNMENT IoControlCode;
00248       PVOID SystemBuffer;
00249     } Buffered;
00250     struct {
00251       ULONG OutputBufferLength;
00252       ULONG POINTER_ALIGNMENT InputBufferLength;
00253       ULONG POINTER_ALIGNMENT IoControlCode;
00254       PVOID InputSystemBuffer;
00255       PVOID OutputBuffer;
00256       PMDL OutputMdlAddress;
00257     } Direct;
00258     struct {
00259       ULONG OutputBufferLength;
00260       ULONG POINTER_ALIGNMENT InputBufferLength;
00261       ULONG POINTER_ALIGNMENT IoControlCode;
00262       PVOID InputBuffer;
00263       PVOID OutputBuffer;
00264     } FastIo;
00265   } DeviceIoControl;
00266   struct {
00267     PLARGE_INTEGER Length;
00268     ULONG POINTER_ALIGNMENT Key;
00269     LARGE_INTEGER ByteOffset;
00270     PEPROCESS ProcessId;
00271     BOOLEAN FailImmediately;
00272     BOOLEAN ExclusiveLock;
00273   } LockControl;
00274   struct {
00275     SECURITY_INFORMATION SecurityInformation;
00276     ULONG POINTER_ALIGNMENT Length;
00277     PVOID SecurityBuffer;
00278     PMDL MdlAddress;
00279   } QuerySecurity;
00280   struct {
00281     SECURITY_INFORMATION SecurityInformation;
00282     PSECURITY_DESCRIPTOR SecurityDescriptor;
00283   } SetSecurity;
00284   struct {
00285     ULONG_PTR ProviderId;
00286     PVOID DataPath;
00287     ULONG BufferSize;
00288     PVOID Buffer;
00289   } WMI;
00290   struct {
00291     ULONG Length;
00292     PSID StartSid;
00293     PFILE_GET_QUOTA_INFORMATION SidList;
00294     ULONG SidListLength;
00295     PVOID QuotaBuffer;
00296     PMDL MdlAddress;
00297   } QueryQuota;
00298   struct {
00299     ULONG Length;
00300     PVOID QuotaBuffer;
00301     PMDL MdlAddress;
00302   } SetQuota;
00303   union {
00304     struct {
00305       PCM_RESOURCE_LIST AllocatedResources;
00306       PCM_RESOURCE_LIST AllocatedResourcesTranslated;
00307     } StartDevice;
00308     struct {
00309       DEVICE_RELATION_TYPE Type;
00310     } QueryDeviceRelations;
00311     struct {
00312       CONST GUID *InterfaceType;
00313       USHORT Size;
00314       USHORT Version;
00315       PINTERFACE Interface;
00316       PVOID InterfaceSpecificData;
00317     } QueryInterface;
00318     struct {
00319       PDEVICE_CAPABILITIES Capabilities;
00320     } DeviceCapabilities;
00321     struct {
00322       PIO_RESOURCE_REQUIREMENTS_LIST IoResourceRequirementList;
00323     } FilterResourceRequirements;
00324     struct {
00325       ULONG WhichSpace;
00326       PVOID Buffer;
00327       ULONG Offset;
00328       ULONG POINTER_ALIGNMENT Length;
00329     } ReadWriteConfig;
00330     struct {
00331       BOOLEAN Lock;
00332     } SetLock;
00333     struct {
00334       BUS_QUERY_ID_TYPE IdType;
00335     } QueryId;
00336     struct {
00337       DEVICE_TEXT_TYPE DeviceTextType;
00338       LCID POINTER_ALIGNMENT LocaleId;
00339     } QueryDeviceText;
00340     struct {
00341       BOOLEAN InPath;
00342       BOOLEAN Reserved[3];
00343       DEVICE_USAGE_NOTIFICATION_TYPE POINTER_ALIGNMENT Type;
00344     } UsageNotification;
00345   } Pnp;
00346   struct {
00347     FS_FILTER_SECTION_SYNC_TYPE SyncType;
00348     ULONG PageProtection;
00349   } AcquireForSectionSynchronization;
00350   struct {
00351     PLARGE_INTEGER EndingOffset;
00352     PERESOURCE *ResourceToRelease;
00353   } AcquireForModifiedPageWriter;
00354   struct {
00355     PERESOURCE ResourceToRelease;
00356   } ReleaseForModifiedPageWriter;
00357   struct {
00358     LARGE_INTEGER FileOffset;
00359     ULONG Length;
00360     ULONG POINTER_ALIGNMENT LockKey;
00361     BOOLEAN POINTER_ALIGNMENT CheckForReadOperation;
00362   } FastIoCheckIfPossible;
00363   struct {
00364     PIRP Irp;
00365     PFILE_NETWORK_OPEN_INFORMATION NetworkInformation;
00366   } NetworkQueryOpen;
00367   struct {
00368     LARGE_INTEGER FileOffset;
00369     ULONG POINTER_ALIGNMENT Length;
00370     ULONG POINTER_ALIGNMENT Key;
00371     PMDL *MdlChain;
00372   } MdlRead;
00373   struct {
00374     PMDL MdlChain;
00375   } MdlReadComplete;
00376   struct {
00377     LARGE_INTEGER FileOffset;
00378     ULONG POINTER_ALIGNMENT Length;
00379     ULONG POINTER_ALIGNMENT Key;
00380     PMDL *MdlChain;
00381   } PrepareMdlWrite;
00382   struct {
00383     LARGE_INTEGER FileOffset;
00384     PMDL MdlChain;
00385   } MdlWriteComplete;
00386   struct {
00387     ULONG DeviceType;
00388   } MountVolume;
00389   struct {
00390     PVOID Argument1;
00391     PVOID Argument2;
00392     PVOID Argument3;
00393     PVOID Argument4;
00394     PVOID Argument5;
00395     LARGE_INTEGER Argument6;
00396   } Others;
00397 } FLT_PARAMETERS, *PFLT_PARAMETERS;
00398 
00399 #if !defined(_AMD64_) && !defined(_IA64_) && !defined(_ARM_)
00400 #include "poppack.h"
00401 #endif
00402 
00403 typedef struct _FLT_IO_PARAMETER_BLOCK {
00404   ULONG IrpFlags;
00405   UCHAR MajorFunction;
00406   UCHAR MinorFunction;
00407   UCHAR OperationFlags;
00408   UCHAR Reserved;
00409   PFILE_OBJECT TargetFileObject;
00410   PFLT_INSTANCE TargetInstance;
00411   FLT_PARAMETERS Parameters;
00412 } FLT_IO_PARAMETER_BLOCK, *PFLT_IO_PARAMETER_BLOCK;
00413 
00414 #define FLTFL_CALLBACK_DATA_REISSUE_MASK        0x0000FFFF
00415 #define FLTFL_CALLBACK_DATA_IRP_OPERATION       0x00000001
00416 #define FLTFL_CALLBACK_DATA_FAST_IO_OPERATION   0x00000002
00417 #define FLTFL_CALLBACK_DATA_FS_FILTER_OPERATION 0x00000004
00418 #define FLTFL_CALLBACK_DATA_SYSTEM_BUFFER       0x00000008
00419 #define FLTFL_CALLBACK_DATA_GENERATED_IO        0x00010000
00420 #define FLTFL_CALLBACK_DATA_REISSUED_IO         0x00020000
00421 #define FLTFL_CALLBACK_DATA_DRAINING_IO         0x00040000
00422 #define FLTFL_CALLBACK_DATA_POST_OPERATION      0x00080000
00423 #define FLTFL_CALLBACK_DATA_NEW_SYSTEM_BUFFER   0x00100000
00424 #define FLTFL_CALLBACK_DATA_DIRTY               0x80000000
00425 
00426 #define FLT_SET_CALLBACK_DATA_DIRTY(Data)   FltSetCallbackDataDirty(Data)
00427 #define FLT_CLEAR_CALLBACK_DATA_DIRTY(Data) FltClearCallbackDataDirty(Data)
00428 #define FLT_IS_CALLBACK_DATA_DIRTY(Data)    FltIsCallbackDataDirty(Data)
00429 
00430 #define FLT_IS_IRP_OPERATION(Data)       (FlagOn((Data)->Flags, FLTFL_CALLBACK_DATA_IRP_OPERATION))
00431 #define FLT_IS_FASTIO_OPERATION(Data)    (FlagOn((Data)->Flags, FLTFL_CALLBACK_DATA_FAST_IO_OPERATION))
00432 #define FLT_IS_FS_FILTER_OPERATION(Data) (FlagOn((Data)->Flags, FLTFL_CALLBACK_DATA_FS_FILTER_OPERATION))
00433 #define FLT_IS_REISSUED_IO(Data)         (FlagOn((Data)->Flags, FLTFL_CALLBACK_DATA_REISSUED_IO))
00434 #define FLT_IS_SYSTEM_BUFFER(Data)       (FlagOn((Data)->Flags, FLTFL_CALLBACK_DATA_SYSTEM_BUFFER))
00435 
00436 typedef USHORT FLT_CONTEXT_TYPE;
00437 
00438 #define FLT_VOLUME_CONTEXT       0x0001
00439 #define FLT_INSTANCE_CONTEXT     0x0002
00440 #define FLT_FILE_CONTEXT         0x0004
00441 #define FLT_STREAM_CONTEXT       0x0008
00442 #define FLT_STREAMHANDLE_CONTEXT 0x0010
00443 #define FLT_TRANSACTION_CONTEXT  0x0020
00444 #define FLT_CONTEXT_END          0xffff
00445 
00446 #define FLT_ALL_CONTEXTS (FLT_VOLUME_CONTEXT | FLT_INSTANCE_CONTEXT | \
00447                           FLT_FILE_CONTEXT | FLT_STREAM_CONTEXT |     \
00448                           FLT_STREAMHANDLE_CONTEXT | FLT_TRANSACTION_CONTEXT)
00449 
00450 typedef ULONG FLT_CALLBACK_DATA_FLAGS;
00451 
00452 #if FLT_MGR_WIN7
00453 typedef ULONG FLT_ALLOCATE_CALLBACK_DATA_FLAGS;
00454 #define FLT_ALLOCATE_CALLBACK_DATA_PREALLOCATE_ALL_MEMORY 0x00000001
00455 #endif /* FLT_MGR_WIN7 */
00456 
00457 typedef struct _FLT_CALLBACK_DATA {
00458   FLT_CALLBACK_DATA_FLAGS Flags;
00459   PETHREAD CONST Thread;
00460   PFLT_IO_PARAMETER_BLOCK CONST Iopb;
00461   IO_STATUS_BLOCK IoStatus;
00462   struct _FLT_TAG_DATA_BUFFER *TagData;
00463   _ANONYMOUS_UNION union {
00464     _ANONYMOUS_STRUCT struct {
00465       LIST_ENTRY QueueLinks;
00466       PVOID QueueContext[2];
00467     } DUMMYSTRUCTNAME;
00468     PVOID FilterContext[4];
00469   } DUMMYUNIONNAME;
00470   KPROCESSOR_MODE RequestorMode;
00471 } FLT_CALLBACK_DATA, *PFLT_CALLBACK_DATA;
00472 
00473 typedef struct _FLT_RELATED_OBJECTS {
00474   USHORT CONST Size;
00475   USHORT CONST TransactionContext;
00476   PFLT_FILTER CONST Filter;
00477   PFLT_VOLUME CONST Volume;
00478   PFLT_INSTANCE CONST Instance;
00479   PFILE_OBJECT CONST FileObject;
00480   PKTRANSACTION CONST Transaction;
00481 } FLT_RELATED_OBJECTS, *PFLT_RELATED_OBJECTS, const *PCFLT_RELATED_OBJECTS;
00482 
00483 typedef struct _FLT_RELATED_CONTEXTS {
00484   PFLT_CONTEXT VolumeContext;
00485   PFLT_CONTEXT InstanceContext;
00486   PFLT_CONTEXT FileContext;
00487   PFLT_CONTEXT StreamContext;
00488   PFLT_CONTEXT StreamHandleContext;
00489   PFLT_CONTEXT TransactionContext;
00490 } FLT_RELATED_CONTEXTS, *PFLT_RELATED_CONTEXTS;
00491 
00492 typedef VOID
00493 (FLTAPI *PFLT_CONTEXT_CLEANUP_CALLBACK)(
00494     _In_ PFLT_CONTEXT Context,
00495     _In_ FLT_CONTEXT_TYPE ContextType);
00496 
00497 typedef PVOID
00498 (FLTAPI *PFLT_CONTEXT_ALLOCATE_CALLBACK)(
00499     _In_ POOL_TYPE PoolType,
00500     _In_ SIZE_T Size,
00501     _In_ FLT_CONTEXT_TYPE ContextType);
00502 
00503 typedef VOID
00504 (FLTAPI *PFLT_CONTEXT_FREE_CALLBACK)(
00505     _In_ PVOID Pool,
00506     _In_ FLT_CONTEXT_TYPE ContextType);
00507 
00508 typedef USHORT FLT_CONTEXT_REGISTRATION_FLAGS;
00509 
00510 #define FLTFL_CONTEXT_REGISTRATION_NO_EXACT_SIZE_MATCH 0x0001
00511 
00512 #define FLT_VARIABLE_SIZED_CONTEXTS ((SIZE_T)-1)
00513 
00514 typedef struct _FLT_CONTEXT_REGISTRATION {
00515     FLT_CONTEXT_TYPE ContextType;
00516     FLT_CONTEXT_REGISTRATION_FLAGS Flags;
00517     PFLT_CONTEXT_CLEANUP_CALLBACK ContextCleanupCallback;
00518     SIZE_T Size;
00519     ULONG PoolTag;
00520     PFLT_CONTEXT_ALLOCATE_CALLBACK ContextAllocateCallback;
00521     PFLT_CONTEXT_FREE_CALLBACK ContextFreeCallback;
00522     PVOID Reserved1;
00523 } FLT_CONTEXT_REGISTRATION, *PFLT_CONTEXT_REGISTRATION, const *PCFLT_CONTEXT_REGISTRATION;
00524 
00525 typedef ULONG FLT_INSTANCE_SETUP_FLAGS;
00526 
00527 #define FLTFL_INSTANCE_SETUP_AUTOMATIC_ATTACHMENT 0x00000001
00528 #define FLTFL_INSTANCE_SETUP_MANUAL_ATTACHMENT    0x00000002
00529 #define FLTFL_INSTANCE_SETUP_NEWLY_MOUNTED_VOLUME 0x00000004
00530 
00531 #if FLT_MGR_LONGHORN
00532 
00533 #define FLTFL_INSTANCE_SETUP_DETACHED_VOLUME        0x00000008
00534 
00535 #define FLT_MAX_TRANSACTION_NOTIFICATIONS (TRANSACTION_NOTIFY_PREPREPARE | \
00536                                            TRANSACTION_NOTIFY_PREPARE |    \
00537                                            TRANSACTION_NOTIFY_COMMIT |     \
00538                                            TRANSACTION_NOTIFY_ROLLBACK |   \
00539                                            TRANSACTION_NOTIFY_COMMIT_FINALIZE)
00540 
00541 #endif /* FLT_MGR_LONGHORN */
00542 
00543 typedef NTSTATUS
00544 (FLTAPI *PFLT_INSTANCE_SETUP_CALLBACK)(
00545     _In_ PCFLT_RELATED_OBJECTS FltObjects,
00546     _In_ FLT_INSTANCE_SETUP_FLAGS Flags,
00547     _In_ DEVICE_TYPE VolumeDeviceType,
00548     _In_ FLT_FILESYSTEM_TYPE VolumeFilesystemType);
00549 
00550 typedef ULONG FLT_INSTANCE_QUERY_TEARDOWN_FLAGS;
00551 
00552 typedef NTSTATUS
00553 (FLTAPI *PFLT_INSTANCE_QUERY_TEARDOWN_CALLBACK)(
00554     _In_ PCFLT_RELATED_OBJECTS FltObjects,
00555     _In_ FLT_INSTANCE_QUERY_TEARDOWN_FLAGS Flags);
00556 
00557 typedef ULONG FLT_INSTANCE_TEARDOWN_FLAGS;
00558 
00559 #define FLTFL_INSTANCE_TEARDOWN_MANUAL                  0x00000001
00560 #define FLTFL_INSTANCE_TEARDOWN_FILTER_UNLOAD           0x00000002
00561 #define FLTFL_INSTANCE_TEARDOWN_MANDATORY_FILTER_UNLOAD 0x00000004
00562 #define FLTFL_INSTANCE_TEARDOWN_VOLUME_DISMOUNT         0x00000008
00563 #define FLTFL_INSTANCE_TEARDOWN_INTERNAL_ERROR          0x00000010
00564 
00565 typedef VOID
00566 (FLTAPI *PFLT_INSTANCE_TEARDOWN_CALLBACK)(
00567     _In_ PCFLT_RELATED_OBJECTS FltObjects,
00568     _In_ FLT_INSTANCE_TEARDOWN_FLAGS Reason);
00569 
00570 typedef enum _FLT_PREOP_CALLBACK_STATUS {
00571   FLT_PREOP_SUCCESS_WITH_CALLBACK,
00572   FLT_PREOP_SUCCESS_NO_CALLBACK,
00573   FLT_PREOP_PENDING,
00574   FLT_PREOP_DISALLOW_FASTIO,
00575   FLT_PREOP_COMPLETE,
00576   FLT_PREOP_SYNCHRONIZE
00577 } FLT_PREOP_CALLBACK_STATUS, *PFLT_PREOP_CALLBACK_STATUS;
00578 
00579 typedef FLT_PREOP_CALLBACK_STATUS
00580 (FLTAPI *PFLT_PRE_OPERATION_CALLBACK)(
00581     _Inout_ PFLT_CALLBACK_DATA Data,
00582     _In_ PCFLT_RELATED_OBJECTS FltObjects,
00583     _Outptr_result_maybenull_ PVOID *CompletionContext);
00584 
00585 typedef enum _FLT_POSTOP_CALLBACK_STATUS {
00586   FLT_POSTOP_FINISHED_PROCESSING,
00587   FLT_POSTOP_MORE_PROCESSING_REQUIRED
00588 } FLT_POSTOP_CALLBACK_STATUS, *PFLT_POSTOP_CALLBACK_STATUS;
00589 
00590 typedef ULONG FLT_POST_OPERATION_FLAGS;
00591 
00592 #define FLTFL_POST_OPERATION_DRAINING 0x00000001
00593 
00594 typedef FLT_POSTOP_CALLBACK_STATUS
00595 (FLTAPI *PFLT_POST_OPERATION_CALLBACK)(
00596     _Inout_ PFLT_CALLBACK_DATA Data,
00597     _In_ PCFLT_RELATED_OBJECTS FltObjects,
00598     _In_opt_ PVOID CompletionContext,
00599     _In_ FLT_POST_OPERATION_FLAGS Flags);
00600 
00601 typedef ULONG FLT_OPERATION_REGISTRATION_FLAGS;
00602 
00603 #define FLTFL_OPERATION_REGISTRATION_SKIP_PAGING_IO   0x00000001
00604 #define FLTFL_OPERATION_REGISTRATION_SKIP_CACHED_IO   0x00000002
00605 #define FLTFL_OPERATION_REGISTRATION_SKIP_NON_DASD_IO 0x00000004
00606 
00607 typedef struct _FLT_OPERATION_REGISTRATION {
00608   UCHAR MajorFunction;
00609   FLT_OPERATION_REGISTRATION_FLAGS Flags;
00610   PFLT_PRE_OPERATION_CALLBACK PreOperation;
00611   PFLT_POST_OPERATION_CALLBACK PostOperation;
00612   PVOID Reserved1;
00613 } FLT_OPERATION_REGISTRATION, *PFLT_OPERATION_REGISTRATION;
00614 
00615 typedef struct _FLT_TAG_DATA_BUFFER {
00616   ULONG FileTag;
00617   USHORT TagDataLength;
00618   USHORT UnparsedNameLength;
00619   _ANONYMOUS_UNION union {
00620     struct {
00621       USHORT SubstituteNameOffset;
00622       USHORT SubstituteNameLength;
00623       USHORT PrintNameOffset;
00624       USHORT PrintNameLength;
00625       ULONG Flags;
00626       WCHAR PathBuffer[1];
00627     } SymbolicLinkReparseBuffer;
00628     struct {
00629       USHORT SubstituteNameOffset;
00630       USHORT SubstituteNameLength;
00631       USHORT PrintNameOffset;
00632       USHORT PrintNameLength;
00633       WCHAR PathBuffer[1];
00634     } MountPointReparseBuffer;
00635     struct {
00636       UCHAR DataBuffer[1];
00637     } GenericReparseBuffer;
00638     struct {
00639       GUID TagGuid;
00640       UCHAR DataBuffer[1];
00641     } GenericGUIDReparseBuffer;
00642   } DUMMYUNIONNAME;
00643 } FLT_TAG_DATA_BUFFER, *PFLT_TAG_DATA_BUFFER;
00644 
00645 #define FLT_TAG_DATA_BUFFER_HEADER_SIZE FIELD_OFFSET(FLT_TAG_DATA_BUFFER, GenericReparseBuffer)
00646 
00647 typedef ULONG FLT_FILTER_UNLOAD_FLAGS;
00648 
00649 #define FLTFL_FILTER_UNLOAD_MANDATORY               0x00000001
00650 
00651 typedef NTSTATUS
00652 (FLTAPI *PFLT_FILTER_UNLOAD_CALLBACK)(
00653     FLT_FILTER_UNLOAD_FLAGS Flags);
00654 
00655 typedef struct _FLT_NAME_CONTROL {
00656   UNICODE_STRING Name;
00657 } FLT_NAME_CONTROL, *PFLT_NAME_CONTROL;
00658 
00659 typedef ULONG FLT_FILE_NAME_OPTIONS;
00660 
00661 typedef NTSTATUS
00662 (FLTAPI *PFLT_GENERATE_FILE_NAME)(
00663     _In_ PFLT_INSTANCE Instance,
00664     _In_ PFILE_OBJECT FileObject,
00665     _In_opt_ PFLT_CALLBACK_DATA CallbackData,
00666     _In_ FLT_FILE_NAME_OPTIONS NameOptions,
00667     _Out_ PBOOLEAN CacheFileNameInformation,
00668     _Out_ PFLT_NAME_CONTROL FileName);
00669 
00670 typedef ULONG FLT_NORMALIZE_NAME_FLAGS;
00671 
00672 #define FLTFL_NORMALIZE_NAME_CASE_SENSITIVE        0x01
00673 #define FLTFL_NORMALIZE_NAME_DESTINATION_FILE_NAME 0x02
00674 
00675 typedef NTSTATUS
00676 (FLTAPI *PFLT_NORMALIZE_NAME_COMPONENT)(
00677     _In_ PFLT_INSTANCE Instance,
00678     _In_ PCUNICODE_STRING ParentDirectory,
00679     _In_ USHORT VolumeNameLength,
00680     _In_ PCUNICODE_STRING Component,
00681     _Out_writes_bytes_(ExpandComponentNameLength) PFILE_NAMES_INFORMATION ExpandComponentName,
00682     _In_ ULONG ExpandComponentNameLength,
00683     _In_ FLT_NORMALIZE_NAME_FLAGS Flags,
00684     _Inout_ PVOID *NormalizationContext);
00685 
00686 typedef NTSTATUS
00687 (FLTAPI *PFLT_NORMALIZE_NAME_COMPONENT_EX)(
00688     _In_ PFLT_INSTANCE Instance,
00689     _In_ PFILE_OBJECT FileObject,
00690     _In_ PCUNICODE_STRING ParentDirectory,
00691     _In_ USHORT VolumeNameLength,
00692     _In_ PCUNICODE_STRING Component,
00693     _Out_writes_bytes_(ExpandComponentNameLength) PFILE_NAMES_INFORMATION ExpandComponentName,
00694     _In_ ULONG ExpandComponentNameLength,
00695     _In_ FLT_NORMALIZE_NAME_FLAGS Flags,
00696     _Inout_ PVOID *NormalizationContext);
00697 
00698 typedef VOID
00699 (FLTAPI *PFLT_NORMALIZE_CONTEXT_CLEANUP)(
00700     _In_opt_ PVOID *NormalizationContext);
00701 
00702 #if FLT_MGR_LONGHORN
00703 typedef NTSTATUS
00704 (FLTAPI *PFLT_TRANSACTION_NOTIFICATION_CALLBACK)(
00705     _In_ PCFLT_RELATED_OBJECTS FltObjects,
00706     _In_ PFLT_CONTEXT TransactionContext,
00707     _In_ ULONG NotificationMask);
00708 #endif /* FLT_MGR_LONGHORN */
00709 
00710 #define FLT_REGISTRATION_VERSION_0200  0x0200
00711 #define FLT_REGISTRATION_VERSION_0201  0x0201
00712 #define FLT_REGISTRATION_VERSION_0202  0x0202
00713 #define FLT_REGISTRATION_VERSION_0203  0x0203
00714 
00715 #if FLT_MGR_LONGHORN
00716 #define FLT_REGISTRATION_VERSION FLT_REGISTRATION_VERSION_0202
00717 #else
00718 #define FLT_REGISTRATION_VERSION FLT_REGISTRATION_VERSION_0200
00719 #endif
00720 
00721 typedef ULONG FLT_REGISTRATION_FLAGS;
00722 
00723 #define FLTFL_REGISTRATION_DO_NOT_SUPPORT_SERVICE_STOP 0x00000001
00724 #define FLTFL_REGISTRATION_SUPPORT_NPFS_MSFS           0x00000002
00725 
00726 typedef struct _FLT_REGISTRATION {
00727   USHORT Size;
00728   USHORT Version;
00729   FLT_REGISTRATION_FLAGS Flags;
00730   CONST FLT_CONTEXT_REGISTRATION *ContextRegistration;
00731   CONST FLT_OPERATION_REGISTRATION *OperationRegistration;
00732   PFLT_FILTER_UNLOAD_CALLBACK FilterUnloadCallback;
00733   PFLT_INSTANCE_SETUP_CALLBACK InstanceSetupCallback;
00734   PFLT_INSTANCE_QUERY_TEARDOWN_CALLBACK InstanceQueryTeardownCallback;
00735   PFLT_INSTANCE_TEARDOWN_CALLBACK InstanceTeardownStartCallback;
00736   PFLT_INSTANCE_TEARDOWN_CALLBACK InstanceTeardownCompleteCallback;
00737   PFLT_GENERATE_FILE_NAME GenerateFileNameCallback;
00738   PFLT_NORMALIZE_NAME_COMPONENT NormalizeNameComponentCallback;
00739   PFLT_NORMALIZE_CONTEXT_CLEANUP NormalizeContextCleanupCallback;
00740 #if FLT_MGR_LONGHORN
00741   PFLT_TRANSACTION_NOTIFICATION_CALLBACK TransactionNotificationCallback;
00742   PFLT_NORMALIZE_NAME_COMPONENT_EX NormalizeNameComponentExCallback;
00743 #endif /* FLT_MGR_LONGHORN */
00744 } FLT_REGISTRATION, *PFLT_REGISTRATION;
00745 
00746 typedef VOID
00747 (FLTAPI *PFLT_COMPLETED_ASYNC_IO_CALLBACK)(
00748     _In_ PFLT_CALLBACK_DATA CallbackData,
00749     _In_ PFLT_CONTEXT Context);
00750 
00751 typedef ULONG FLT_IO_OPERATION_FLAGS;
00752 
00753 #define FLTFL_IO_OPERATION_NON_CACHED                   0x00000001
00754 #define FLTFL_IO_OPERATION_PAGING                       0x00000002
00755 #define FLTFL_IO_OPERATION_DO_NOT_UPDATE_BYTE_OFFSET    0x00000004
00756 
00757 #if FLT_MGR_LONGHORN
00758 #define FLTFL_IO_OPERATION_SYNCHRONOUS_PAGING           0x00000008
00759 #endif
00760 
00761 typedef VOID
00762 (FLTAPI *PFLT_GET_OPERATION_STATUS_CALLBACK)(
00763     _In_ PCFLT_RELATED_OBJECTS FltObjects,
00764     _In_ PFLT_IO_PARAMETER_BLOCK IopbSnapshot,
00765     _In_ NTSTATUS OperationStatus,
00766     _In_opt_ PVOID RequesterContext);
00767 
00768 typedef ULONG FLT_FILE_NAME_OPTIONS;
00769 
00770 #define FLT_VALID_FILE_NAME_FORMATS 0x000000ff
00771 
00772 #define FLT_FILE_NAME_NORMALIZED    0x01
00773 #define FLT_FILE_NAME_OPENED        0x02
00774 #define FLT_FILE_NAME_SHORT         0x03
00775 
00776 #define FltGetFileNameFormat( _NameOptions ) ((_NameOptions) & FLT_VALID_FILE_NAME_FORMATS)
00777 
00778 #define FLT_VALID_FILE_NAME_QUERY_METHODS               0x0000ff00
00779 
00780 #define FLT_FILE_NAME_QUERY_DEFAULT                   0x0100
00781 #define FLT_FILE_NAME_QUERY_CACHE_ONLY                0x0200
00782 #define FLT_FILE_NAME_QUERY_FILESYSTEM_ONLY           0x0300
00783 #define FLT_FILE_NAME_QUERY_ALWAYS_ALLOW_CACHE_LOOKUP 0x0400
00784 
00785 #define FltGetFileNameQueryMethod( _NameOptions ) ((_NameOptions) & FLT_VALID_FILE_NAME_QUERY_METHODS)
00786 
00787 #define FLT_VALID_FILE_NAME_FLAGS                     0xff000000
00788 
00789 #define FLT_FILE_NAME_REQUEST_FROM_CURRENT_PROVIDER   0x01000000
00790 #define FLT_FILE_NAME_DO_NOT_CACHE                    0x02000000
00791 
00792 #if FLT_MGR_AFTER_XPSP2
00793 #define FLT_FILE_NAME_ALLOW_QUERY_ON_REPARSE          0x04000000
00794 #endif
00795 
00796 typedef USHORT FLT_FILE_NAME_PARSED_FLAGS;
00797 
00798 #define FLTFL_FILE_NAME_PARSED_FINAL_COMPONENT      0x0001
00799 #define FLTFL_FILE_NAME_PARSED_EXTENSION            0x0002
00800 #define FLTFL_FILE_NAME_PARSED_STREAM               0x0004
00801 #define FLTFL_FILE_NAME_PARSED_PARENT_DIR           0x0008
00802 
00803 typedef struct _FLT_FILE_NAME_INFORMATION {
00804   USHORT Size;
00805   FLT_FILE_NAME_PARSED_FLAGS NamesParsed;
00806   FLT_FILE_NAME_OPTIONS Format;
00807   UNICODE_STRING Name;
00808   UNICODE_STRING Volume;
00809   UNICODE_STRING Share;
00810   UNICODE_STRING Extension;
00811   UNICODE_STRING Stream;
00812   UNICODE_STRING FinalComponent;
00813   UNICODE_STRING ParentDir;
00814 } FLT_FILE_NAME_INFORMATION, *PFLT_FILE_NAME_INFORMATION;
00815 
00816 typedef enum _FLT_SET_CONTEXT_OPERATION {
00817   FLT_SET_CONTEXT_REPLACE_IF_EXISTS,
00818   FLT_SET_CONTEXT_KEEP_IF_EXISTS
00819 } FLT_SET_CONTEXT_OPERATION, *PFLT_SET_CONTEXT_OPERATION;
00820 
00821 typedef struct _FLT_VOLUME_PROPERTIES {
00822   DEVICE_TYPE DeviceType;
00823   ULONG DeviceCharacteristics;
00824   ULONG DeviceObjectFlags;
00825   ULONG AlignmentRequirement;
00826   USHORT SectorSize;
00827   USHORT Reserved0;
00828   UNICODE_STRING FileSystemDriverName;
00829   UNICODE_STRING FileSystemDeviceName;
00830   UNICODE_STRING RealDeviceName;
00831 } FLT_VOLUME_PROPERTIES, *PFLT_VOLUME_PROPERTIES;
00832 
00833 #define FLT_PORT_CONNECT        0x0001
00834 #define FLT_PORT_ALL_ACCESS     (FLT_PORT_CONNECT | STANDARD_RIGHTS_ALL)
00835 
00836 typedef NTSTATUS
00837 (FLTAPI *PFLT_MESSAGE_NOTIFY)(
00838     _In_opt_ PVOID PortCookie,
00839     _In_reads_bytes_opt_(InputBufferLength) PVOID InputBuffer,
00840     _In_ ULONG InputBufferLength,
00841     _Out_writes_bytes_to_opt_(OutputBufferLength,*ReturnOutputBufferLength) PVOID OutputBuffer,
00842     _In_ ULONG OutputBufferLength,
00843     _Out_ PULONG ReturnOutputBufferLength);
00844 
00845 typedef NTSTATUS
00846 (FLTAPI *PFLT_CONNECT_NOTIFY)(
00847     _In_ PFLT_PORT ClientPort,
00848     _In_opt_ PVOID ServerPortCookie,
00849     _In_reads_bytes_opt_(SizeOfContext) PVOID ConnectionContext,
00850     _In_ ULONG SizeOfContext,
00851     _Outptr_result_maybenull_ PVOID *ConnectionPortCookie);
00852 
00853 typedef VOID
00854 (FLTAPI *PFLT_DISCONNECT_NOTIFY)(
00855     _In_opt_ PVOID ConnectionCookie);
00856 
00857 typedef VOID
00858 (FLTAPI *PFLT_COMPLETE_CANCELED_CALLBACK)(
00859     _In_ PFLT_CALLBACK_DATA CallbackData);
00860 
00861 typedef struct _FLT_DEFERRED_IO_WORKITEM *PFLT_DEFERRED_IO_WORKITEM;
00862 typedef struct _FLT_GENERIC_WORKITEM *PFLT_GENERIC_WORKITEM;
00863 
00864 typedef VOID
00865 (FLTAPI *PFLT_DEFERRED_IO_WORKITEM_ROUTINE)(
00866     _In_ PFLT_DEFERRED_IO_WORKITEM FltWorkItem,
00867     _In_ PFLT_CALLBACK_DATA CallbackData,
00868     _In_opt_ PVOID Context);
00869 
00870 typedef VOID
00871 (FLTAPI *PFLT_GENERIC_WORKITEM_ROUTINE)(
00872     _In_ PFLT_GENERIC_WORKITEM FltWorkItem,
00873     _In_ PVOID FltObject,
00874     _In_opt_ PVOID Context);
00875 
00876 typedef IO_CSQ_IRP_CONTEXT FLT_CALLBACK_DATA_QUEUE_IO_CONTEXT, *PFLT_CALLBACK_DATA_QUEUE_IO_CONTEXT;
00877 
00878 typedef struct _FLT_CALLBACK_DATA_QUEUE FLT_CALLBACK_DATA_QUEUE, *PFLT_CALLBACK_DATA_QUEUE;
00879 
00880 typedef NTSTATUS
00881 (FLTAPI *PFLT_CALLBACK_DATA_QUEUE_INSERT_IO)(
00882     _Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq,
00883     _In_ PFLT_CALLBACK_DATA Cbd,
00884     _In_opt_ PVOID InsertContext);
00885 
00886 typedef VOID
00887 (FLTAPI *PFLT_CALLBACK_DATA_QUEUE_REMOVE_IO)(
00888     _Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq,
00889     _In_ PFLT_CALLBACK_DATA Cbd);
00890 
00891 typedef PFLT_CALLBACK_DATA
00892 (FLTAPI *PFLT_CALLBACK_DATA_QUEUE_PEEK_NEXT_IO)(
00893     _In_ PFLT_CALLBACK_DATA_QUEUE Cbdq,
00894     _In_opt_ PFLT_CALLBACK_DATA Cbd,
00895     _In_opt_ PVOID PeekContext);
00896 
00897 typedef VOID
00898 (FLTAPI *PFLT_CALLBACK_DATA_QUEUE_ACQUIRE)(
00899     _Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq,
00900     _Out_opt_ PKIRQL Irql);
00901 
00902 typedef VOID
00903 (FLTAPI *PFLT_CALLBACK_DATA_QUEUE_RELEASE)(
00904     _Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq,
00905     _In_opt_ KIRQL Irql);
00906 
00907 typedef VOID
00908 (FLTAPI *PFLT_CALLBACK_DATA_QUEUE_COMPLETE_CANCELED_IO)(
00909     _Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq,
00910     _Inout_ PFLT_CALLBACK_DATA Cbd);
00911 
00912 typedef enum _FLT_CALLBACK_DATA_QUEUE_FLAGS FLT_CALLBACK_DATA_QUEUE_FLAGS;
00913 
00914 typedef struct _FLT_CALLBACK_DATA_QUEUE {
00915   IO_CSQ Csq;
00916   FLT_CALLBACK_DATA_QUEUE_FLAGS Flags;
00917   PFLT_INSTANCE Instance;
00918   PFLT_CALLBACK_DATA_QUEUE_INSERT_IO InsertIo;
00919   PFLT_CALLBACK_DATA_QUEUE_REMOVE_IO RemoveIo;
00920   PFLT_CALLBACK_DATA_QUEUE_PEEK_NEXT_IO PeekNextIo;
00921   PFLT_CALLBACK_DATA_QUEUE_ACQUIRE Acquire;
00922   PFLT_CALLBACK_DATA_QUEUE_RELEASE Release;
00923   PFLT_CALLBACK_DATA_QUEUE_COMPLETE_CANCELED_IO CompleteCanceledIo;
00924 } FLT_CALLBACK_DATA_QUEUE, *PFLT_CALLBACK_DATA_QUEUE;
00925 
00926 typedef NTSTATUS
00927 (*PFLT_COMPLETE_LOCK_CALLBACK_DATA_ROUTINE)(
00928     _In_opt_ PVOID Context,
00929     _In_ PFLT_CALLBACK_DATA CallbackData);
00930 
00931 typedef VOID
00932 (FLTAPI *PFLTOPLOCK_WAIT_COMPLETE_ROUTINE)(
00933     _In_ PFLT_CALLBACK_DATA CallbackData,
00934     _In_opt_ PVOID Context);
00935 
00936 typedef VOID
00937 (FLTAPI *PFLTOPLOCK_PREPOST_CALLBACKDATA_ROUTINE)(
00938     _In_ PFLT_CALLBACK_DATA CallbackData,
00939     _In_opt_ PVOID Context);
00940 
00941 VOID
00942 FLTAPI
00943 FltSetCallbackDataDirty(
00944     _Inout_ PFLT_CALLBACK_DATA Data);
00945 
00946 VOID
00947 FLTAPI
00948 FltClearCallbackDataDirty(
00949     _Inout_ PFLT_CALLBACK_DATA Data);
00950 
00951 BOOLEAN
00952 FLTAPI
00953 FltIsCallbackDataDirty(
00954     _In_ PFLT_CALLBACK_DATA Data);
00955 
00956 _Must_inspect_result_
00957 BOOLEAN
00958 FLTAPI
00959 FltDoCompletionProcessingWhenSafe(
00960     _In_ PFLT_CALLBACK_DATA Data,
00961     _In_ PCFLT_RELATED_OBJECTS FltObjects,
00962     _In_opt_ PVOID CompletionContext,
00963     _In_ FLT_POST_OPERATION_FLAGS Flags,
00964     _In_ PFLT_POST_OPERATION_CALLBACK SafePostCallback,
00965     _Out_ PFLT_POSTOP_CALLBACK_STATUS RetPostOperationStatus);
00966 
00967 _Must_inspect_result_
00968 _IRQL_requires_max_(APC_LEVEL)
00969 NTSTATUS
00970 FLTAPI
00971 FltCheckAndGrowNameControl(
00972     _Inout_ PFLT_NAME_CONTROL NameCtrl,
00973     _In_ USHORT NewSize);
00974 
00975 _Must_inspect_result_
00976 _IRQL_requires_max_(APC_LEVEL)
00977 NTSTATUS
00978 FLTAPI
00979 FltPurgeFileNameInformationCache(
00980     _In_ PFLT_INSTANCE Instance,
00981     _In_opt_ PFILE_OBJECT FileObject);
00982 
00983 _Must_inspect_result_
00984 _IRQL_requires_max_(APC_LEVEL)
00985 NTSTATUS
00986 FLTAPI
00987 FltRegisterFilter(
00988     _In_ PDRIVER_OBJECT Driver,
00989     _In_ CONST FLT_REGISTRATION *Registration,
00990     _Outptr_ PFLT_FILTER *RetFilter);
00991 
00992 _IRQL_requires_max_(APC_LEVEL)
00993 VOID
00994 FLTAPI
00995 FltUnregisterFilter(
00996     _In_ PFLT_FILTER Filter);
00997 
00998 _Must_inspect_result_
00999 _IRQL_requires_max_(APC_LEVEL)
01000 NTSTATUS
01001 FLTAPI
01002 FltStartFiltering(
01003     _In_ PFLT_FILTER Filter);
01004 
01005 _Must_inspect_result_
01006 _IRQL_requires_max_(APC_LEVEL)
01007 PVOID
01008 FLTAPI
01009 FltGetRoutineAddress(
01010     _In_ PCSTR FltMgrRoutineName);
01011 
01012 _When_(CallbackStatus==FLT_PREOP_COMPLETE, _IRQL_requires_max_(DISPATCH_LEVEL))
01013 _When_(CallbackStatus!=FLT_PREOP_COMPLETE, _IRQL_requires_max_(APC_LEVEL))
01014 VOID
01015 FLTAPI
01016 FltCompletePendedPreOperation(
01017     _In_ PFLT_CALLBACK_DATA CallbackData,
01018     _In_ FLT_PREOP_CALLBACK_STATUS CallbackStatus,
01019     _In_opt_ PVOID Context);
01020 
01021 _IRQL_requires_max_(DISPATCH_LEVEL)
01022 VOID
01023 FLTAPI
01024 FltCompletePendedPostOperation(
01025     _In_ PFLT_CALLBACK_DATA CallbackData);
01026 
01027 _Must_inspect_result_
01028 _IRQL_requires_max_(DISPATCH_LEVEL)
01029 NTSTATUS
01030 FLTAPI
01031 FltRequestOperationStatusCallback(
01032     _In_ PFLT_CALLBACK_DATA Data,
01033     _In_ PFLT_GET_OPERATION_STATUS_CALLBACK CallbackRoutine,
01034     _In_opt_ PVOID RequesterContext);
01035 
01036 _When_((PoolType==NonPagedPoolNx), _IRQL_requires_max_(DISPATCH_LEVEL))
01037 _When_((PoolType!=NonPagedPoolNx), _IRQL_requires_max_(APC_LEVEL))
01038 PVOID
01039 FLTAPI
01040 FltAllocatePoolAlignedWithTag(
01041     _In_ PFLT_INSTANCE Instance,
01042     _In_ POOL_TYPE PoolType,
01043     _In_ SIZE_T NumberOfBytes,
01044     _In_ ULONG Tag);
01045 
01046 _IRQL_requires_max_(DISPATCH_LEVEL)
01047 VOID
01048 FLTAPI
01049 FltFreePoolAlignedWithTag(
01050     _In_ PFLT_INSTANCE Instance,
01051     _In_ PVOID Buffer,
01052     _In_ ULONG Tag);
01053 
01054 _Must_inspect_result_
01055 _IRQL_requires_max_(APC_LEVEL)
01056 NTSTATUS
01057 FLTAPI
01058 FltGetFileNameInformation(
01059     _In_ PFLT_CALLBACK_DATA CallbackData,
01060     _In_ FLT_FILE_NAME_OPTIONS NameOptions,
01061     _Outptr_ PFLT_FILE_NAME_INFORMATION *FileNameInformation);
01062 
01063 _Must_inspect_result_
01064 _IRQL_requires_max_(APC_LEVEL)
01065 NTSTATUS
01066 FLTAPI
01067 FltGetFileNameInformationUnsafe(
01068     _In_ PFILE_OBJECT FileObject,
01069     _In_opt_ PFLT_INSTANCE Instance,
01070     _In_ FLT_FILE_NAME_OPTIONS NameOptions,
01071     _Outptr_ PFLT_FILE_NAME_INFORMATION *FileNameInformation);
01072 
01073 _IRQL_requires_max_(APC_LEVEL)
01074 VOID
01075 FLTAPI
01076 FltReleaseFileNameInformation(
01077     _In_ PFLT_FILE_NAME_INFORMATION FileNameInformation);
01078 
01079 _IRQL_requires_max_(APC_LEVEL)
01080 VOID
01081 FLTAPI
01082 FltReferenceFileNameInformation(
01083     _In_ PFLT_FILE_NAME_INFORMATION FileNameInformation);
01084 
01085 _IRQL_requires_max_(APC_LEVEL)
01086 NTSTATUS
01087 FLTAPI
01088 FltParseFileName(
01089     _In_ PCUNICODE_STRING FileName,
01090     _Inout_opt_ PUNICODE_STRING Extension,
01091     _Inout_opt_ PUNICODE_STRING Stream,
01092     _Inout_opt_ PUNICODE_STRING FinalComponent);
01093 
01094 _IRQL_requires_max_(APC_LEVEL)
01095 NTSTATUS
01096 FLTAPI
01097 FltParseFileNameInformation(
01098     _Inout_ PFLT_FILE_NAME_INFORMATION FileNameInformation);
01099 
01100 _Must_inspect_result_
01101 _IRQL_requires_max_(APC_LEVEL)
01102 NTSTATUS
01103 FLTAPI
01104 FltGetTunneledName(
01105     _In_ PFLT_CALLBACK_DATA CallbackData,
01106     _In_ PFLT_FILE_NAME_INFORMATION FileNameInformation,
01107     _Outptr_result_maybenull_ PFLT_FILE_NAME_INFORMATION *RetTunneledFileNameInformation);
01108 
01109 _Must_inspect_result_
01110 _IRQL_requires_max_(APC_LEVEL)
01111 NTSTATUS
01112 FLTAPI
01113 FltGetVolumeName(
01114     _In_ PFLT_VOLUME Volume,
01115     _Inout_opt_ PUNICODE_STRING VolumeName,
01116     _Out_opt_ PULONG BufferSizeNeeded);
01117 
01118 _Must_inspect_result_
01119 _IRQL_requires_max_(APC_LEVEL)
01120 NTSTATUS
01121 FLTAPI
01122 FltGetDestinationFileNameInformation(
01123     _In_ PFLT_INSTANCE Instance,
01124     _In_ PFILE_OBJECT FileObject,
01125     _In_opt_ HANDLE RootDirectory,
01126     _In_reads_bytes_(FileNameLength) PWSTR FileName,
01127     _In_ ULONG FileNameLength,
01128     _In_ FLT_FILE_NAME_OPTIONS NameOptions,
01129     _Outptr_ PFLT_FILE_NAME_INFORMATION *RetFileNameInformation);
01130 
01131 _Must_inspect_result_
01132 _IRQL_requires_max_(APC_LEVEL)
01133 NTSTATUS
01134 FLTAPI
01135 FltIsDirectory(
01136     _In_ PFILE_OBJECT FileObject,
01137     _In_ PFLT_INSTANCE Instance,
01138     _Out_ PBOOLEAN IsDirectory);
01139 
01140 _Must_inspect_result_
01141 _IRQL_requires_max_(PASSIVE_LEVEL)
01142 NTSTATUS
01143 FLTAPI
01144 FltLoadFilter(
01145     _In_ PCUNICODE_STRING FilterName);
01146 
01147 _Must_inspect_result_
01148 _IRQL_requires_max_(PASSIVE_LEVEL)
01149 NTSTATUS
01150 FLTAPI
01151 FltUnloadFilter(
01152     _In_ PCUNICODE_STRING FilterName);
01153 
01154 _Must_inspect_result_
01155 _IRQL_requires_max_(APC_LEVEL)
01156 NTSTATUS
01157 FLTAPI
01158 FltAttachVolume(
01159     _Inout_ PFLT_FILTER Filter,
01160     _Inout_ PFLT_VOLUME Volume,
01161     _In_opt_ PCUNICODE_STRING InstanceName,
01162     _Outptr_opt_result_maybenull_ PFLT_INSTANCE *RetInstance);
01163 
01164 _Must_inspect_result_
01165 _IRQL_requires_max_(APC_LEVEL)
01166 NTSTATUS
01167 FLTAPI
01168 FltAttachVolumeAtAltitude(
01169     _Inout_ PFLT_FILTER Filter,
01170     _Inout_ PFLT_VOLUME Volume,
01171     _In_ PCUNICODE_STRING Altitude,
01172     _In_opt_ PCUNICODE_STRING InstanceName,
01173     _Outptr_opt_result_maybenull_ PFLT_INSTANCE *RetInstance);
01174 
01175 _Must_inspect_result_
01176 _IRQL_requires_max_(APC_LEVEL)
01177 NTSTATUS
01178 FLTAPI
01179 FltDetachVolume(
01180     _Inout_ PFLT_FILTER Filter,
01181     _Inout_ PFLT_VOLUME Volume,
01182     _In_opt_ PCUNICODE_STRING InstanceName);
01183 
01184 _Must_inspect_result_
01185 _IRQL_requires_max_(APC_LEVEL)
01186 NTSTATUS
01187 FLTAPI
01188 FltAllocateCallbackData(
01189     _In_ PFLT_INSTANCE Instance,
01190     _In_opt_ PFILE_OBJECT FileObject,
01191     _Outptr_ PFLT_CALLBACK_DATA *RetNewCallbackData);
01192 
01193 _IRQL_requires_max_(DISPATCH_LEVEL)
01194 VOID
01195 FLTAPI
01196 FltFreeCallbackData(
01197     _In_ PFLT_CALLBACK_DATA CallbackData);
01198 
01199 _IRQL_requires_max_(APC_LEVEL)
01200 VOID
01201 FLTAPI
01202 FltReuseCallbackData(
01203     _Inout_ PFLT_CALLBACK_DATA CallbackData);
01204 
01205 _When_(FlagOn(CallbackData->Iopb->IrpFlags, IRP_PAGING_IO), _IRQL_requires_max_(APC_LEVEL))
01206 _When_(!FlagOn(CallbackData->Iopb->IrpFlags, IRP_PAGING_IO), _IRQL_requires_max_(PASSIVE_LEVEL))
01207 VOID
01208 FLTAPI
01209 FltPerformSynchronousIo(
01210     _Inout_ PFLT_CALLBACK_DATA CallbackData);
01211 
01212 _Must_inspect_result_
01213 _When_( FlagOn(CallbackData->Iopb->IrpFlags, IRP_PAGING_IO), _IRQL_requires_max_(APC_LEVEL))
01214 _When_( !FlagOn(CallbackData->Iopb->IrpFlags, IRP_PAGING_IO), _IRQL_requires_max_(PASSIVE_LEVEL))
01215 NTSTATUS
01216 FLTAPI
01217 FltPerformAsynchronousIo(
01218     _Inout_ PFLT_CALLBACK_DATA CallbackData,
01219     _In_ PFLT_COMPLETED_ASYNC_IO_CALLBACK CallbackRoutine,
01220     _In_ PVOID CallbackContext);
01221 
01222 _Must_inspect_result_
01223 _IRQL_requires_max_(PASSIVE_LEVEL)
01224 NTSTATUS
01225 FLTAPI
01226 FltCreateFile(
01227     _In_ PFLT_FILTER Filter,
01228     _In_opt_ PFLT_INSTANCE Instance,
01229     _Out_ PHANDLE FileHandle,
01230     _In_ ACCESS_MASK DesiredAccess,
01231     _In_ POBJECT_ATTRIBUTES ObjectAttributes,
01232     _Out_ PIO_STATUS_BLOCK IoStatusBlock,
01233     _In_opt_ PLARGE_INTEGER AllocationSize,
01234     _In_ ULONG FileAttributes,
01235     _In_ ULONG ShareAccess,
01236     _In_ ULONG CreateDisposition,
01237     _In_ ULONG CreateOptions,
01238     _In_reads_bytes_opt_(EaLength)PVOID EaBuffer,
01239     _In_ ULONG EaLength,
01240     _In_ ULONG Flags);
01241 
01242 _Must_inspect_result_
01243 _IRQL_requires_max_(PASSIVE_LEVEL)
01244 _When_((Flags|FLTFL_IO_OPERATION_PAGING|FLTFL_IO_OPERATION_SYNCHRONOUS_PAGING),_IRQL_requires_max_(APC_LEVEL))
01245 NTSTATUS
01246 FLTAPI
01247 FltReadFile(
01248     _In_ PFLT_INSTANCE InitiatingInstance,
01249     _In_ PFILE_OBJECT FileObject,
01250     _In_opt_ PLARGE_INTEGER ByteOffset,
01251     _In_ ULONG Length,
01252     _Out_writes_bytes_to_(Length,*BytesRead) PVOID Buffer,
01253     _In_ FLT_IO_OPERATION_FLAGS Flags,
01254     _Out_opt_ PULONG BytesRead,
01255     _In_opt_ PFLT_COMPLETED_ASYNC_IO_CALLBACK CallbackRoutine,
01256     _In_opt_ PVOID CallbackContext);
01257 
01258 _Must_inspect_result_
01259 _IRQL_requires_max_(PASSIVE_LEVEL)
01260 NTSTATUS
01261 FLTAPI
01262 FltTagFile(
01263     _In_ PFLT_INSTANCE InitiatingInstance,
01264     _In_ PFILE_OBJECT FileObject,
01265     _In_ ULONG FileTag,
01266     _In_opt_ GUID *Guid,
01267     _In_reads_bytes_(DataBufferLength) PVOID DataBuffer,
01268     _In_ USHORT DataBufferLength);
01269 
01270 _Must_inspect_result_
01271 _IRQL_requires_max_(PASSIVE_LEVEL)
01272 NTSTATUS
01273 FLTAPI
01274 FltUntagFile(
01275     _In_ PFLT_INSTANCE InitiatingInstance,
01276     _In_ PFILE_OBJECT FileObject,
01277     _In_ ULONG FileTag,
01278     _In_opt_ GUID *Guid);
01279 
01280 _Must_inspect_result_
01281 _IRQL_requires_max_(PASSIVE_LEVEL)
01282 _When_((Flags|FLTFL_IO_OPERATION_PAGING|FLTFL_IO_OPERATION_SYNCHRONOUS_PAGING),_IRQL_requires_max_(APC_LEVEL))
01283 NTSTATUS
01284 FLTAPI
01285 FltWriteFile(
01286     _In_ PFLT_INSTANCE InitiatingInstance,
01287     _In_ PFILE_OBJECT FileObject,
01288     _In_opt_ PLARGE_INTEGER ByteOffset,
01289     _In_ ULONG Length,
01290     _In_reads_bytes_(Length) PVOID Buffer,
01291     _In_ FLT_IO_OPERATION_FLAGS Flags,
01292     _Out_opt_ PULONG BytesWritten,
01293     _In_opt_ PFLT_COMPLETED_ASYNC_IO_CALLBACK CallbackRoutine,
01294     _In_opt_ PVOID CallbackContext);
01295 
01296 _Must_inspect_result_
01297 _IRQL_requires_max_(PASSIVE_LEVEL)
01298 NTSTATUS
01299 FLTAPI
01300 FltQueryInformationFile(
01301     _In_ PFLT_INSTANCE Instance,
01302     _In_ PFILE_OBJECT FileObject,
01303     _Out_writes_bytes_to_(Length,*LengthReturned) PVOID FileInformation,
01304     _In_ ULONG Length,
01305     _In_ FILE_INFORMATION_CLASS FileInformationClass,
01306     _Out_opt_ PULONG LengthReturned);
01307 
01308 _Must_inspect_result_
01309 _IRQL_requires_max_(PASSIVE_LEVEL)
01310 NTSTATUS
01311 FLTAPI
01312 FltSetInformationFile(
01313     _In_ PFLT_INSTANCE Instance,
01314     _In_ PFILE_OBJECT FileObject,
01315     _In_reads_bytes_(Length) PVOID FileInformation,
01316     _In_ ULONG Length,
01317     _In_ FILE_INFORMATION_CLASS FileInformationClass);
01318 
01319 _Must_inspect_result_
01320 _IRQL_requires_max_(PASSIVE_LEVEL)
01321 NTSTATUS
01322 FLTAPI
01323 FltQueryVolumeInformationFile(
01324     _In_ PFLT_INSTANCE Instance,
01325     _In_ PFILE_OBJECT FileObject,
01326     _Out_writes_bytes_to_(Length,*LengthReturned) PVOID FsInformation,
01327     _In_ ULONG Length,
01328     _In_ FS_INFORMATION_CLASS FsInformationClass,
01329     _Out_opt_ PULONG LengthReturned);
01330 
01331 _Must_inspect_result_
01332 _IRQL_requires_max_(PASSIVE_LEVEL)
01333 NTSTATUS
01334 FLTAPI
01335 FltQuerySecurityObject(
01336     _In_ PFLT_INSTANCE Instance,
01337     _In_ PFILE_OBJECT FileObject,
01338     _In_ SECURITY_INFORMATION SecurityInformation,
01339     _Inout_updates_bytes_opt_(Length) PSECURITY_DESCRIPTOR SecurityDescriptor,
01340     _In_ ULONG Length,
01341     _Out_opt_ PULONG LengthNeeded);
01342 
01343 _Must_inspect_result_
01344 _IRQL_requires_max_(PASSIVE_LEVEL)
01345 NTSTATUS
01346 FLTAPI
01347 FltSetSecurityObject(
01348     _In_ PFLT_INSTANCE Instance,
01349     _In_ PFILE_OBJECT FileObject,
01350     _In_ SECURITY_INFORMATION SecurityInformation,
01351     _In_ PSECURITY_DESCRIPTOR SecurityDescriptor);
01352 
01353 _Must_inspect_result_
01354 _IRQL_requires_max_(PASSIVE_LEVEL)
01355 NTSTATUS
01356 FLTAPI
01357 FltFlushBuffers(
01358     _In_ PFLT_INSTANCE Instance,
01359     _In_ PFILE_OBJECT FileObject);
01360 
01361 _Must_inspect_result_
01362 _IRQL_requires_max_(PASSIVE_LEVEL)
01363 NTSTATUS
01364 FLTAPI
01365 FltFsControlFile(
01366     _In_ PFLT_INSTANCE Instance,
01367     _In_  PFILE_OBJECT FileObject,
01368     _In_ ULONG FsControlCode,
01369     _In_reads_bytes_opt_(InputBufferLength) PVOID InputBuffer,
01370     _In_ ULONG InputBufferLength,
01371     _Out_writes_bytes_to_opt_(OutputBufferLength,*LengthReturned) PVOID OutputBuffer,
01372     _In_ ULONG OutputBufferLength,
01373     _Out_opt_ PULONG LengthReturned);
01374 
01375 _Must_inspect_result_
01376 _IRQL_requires_max_(PASSIVE_LEVEL)
01377 NTSTATUS
01378 FLTAPI
01379 FltDeviceIoControlFile(
01380     _In_ PFLT_INSTANCE Instance,
01381     _In_ PFILE_OBJECT FileObject,
01382     _In_ ULONG IoControlCode,
01383     _In_reads_bytes_opt_(InputBufferLength) PVOID InputBuffer,
01384     _In_ ULONG InputBufferLength,
01385     _Out_writes_bytes_to_opt_(OutputBufferLength,*LengthReturned) PVOID OutputBuffer,
01386     _In_ ULONG OutputBufferLength,
01387     _Out_opt_ PULONG LengthReturned);
01388 
01389 _Must_inspect_result_
01390 _When_(FlagOn(CallbackData->Iopb->IrpFlags, IRP_PAGING_IO), _IRQL_requires_max_(APC_LEVEL))
01391 _When_(!FlagOn(CallbackData->Iopb->IrpFlags, IRP_PAGING_IO), _IRQL_requires_max_(PASSIVE_LEVEL))
01392 VOID
01393 FLTAPI
01394 FltReissueSynchronousIo(
01395    _In_ PFLT_INSTANCE InitiatingInstance,
01396    _In_ PFLT_CALLBACK_DATA CallbackData);
01397 
01398 _IRQL_requires_max_(PASSIVE_LEVEL)
01399 NTSTATUS
01400 FLTAPI
01401 FltClose(
01402    _In_ HANDLE FileHandle);
01403 
01404 _IRQL_requires_max_(PASSIVE_LEVEL)
01405 VOID
01406 FLTAPI
01407 FltCancelFileOpen(
01408     _In_ PFLT_INSTANCE Instance,
01409     _In_ PFILE_OBJECT FileObject);
01410 
01411 _Must_inspect_result_
01412 _IRQL_requires_max_(PASSIVE_LEVEL)
01413 NTSTATUS
01414 FLTAPI
01415 FltCreateSystemVolumeInformationFolder(
01416     _In_ PFLT_INSTANCE Instance);
01417 
01418 _IRQL_requires_max_(APC_LEVEL)
01419 BOOLEAN
01420 FLTAPI
01421 FltSupportsFileContexts(
01422     _In_ PFILE_OBJECT FileObject);
01423 
01424 _IRQL_requires_max_(APC_LEVEL)
01425 BOOLEAN
01426 FLTAPI
01427 FltSupportsStreamContexts(
01428     _In_ PFILE_OBJECT FileObject);
01429 
01430 _IRQL_requires_max_(APC_LEVEL)
01431 BOOLEAN
01432 FLTAPI
01433 FltSupportsStreamHandleContexts(
01434     _In_ PFILE_OBJECT FileObject);
01435 
01436 _Must_inspect_result_
01437 _IRQL_requires_max_(APC_LEVEL)
01438 NTSTATUS
01439 FLTAPI
01440 FltAllocateContext(
01441     _In_ PFLT_FILTER Filter,
01442     _In_ FLT_CONTEXT_TYPE ContextType,
01443     _In_ SIZE_T ContextSize,
01444     _In_ POOL_TYPE PoolType,
01445     _Outptr_result_bytebuffer_(ContextSize) PFLT_CONTEXT *ReturnedContext);
01446 
01447 _IRQL_requires_max_(APC_LEVEL)
01448 VOID
01449 FLTAPI
01450 FltGetContexts(
01451     _In_ PCFLT_RELATED_OBJECTS FltObjects,
01452     _In_ FLT_CONTEXT_TYPE DesiredContexts,
01453     _Out_ PFLT_RELATED_CONTEXTS Contexts);
01454 
01455 _IRQL_requires_max_(APC_LEVEL)
01456 VOID
01457 FLTAPI
01458 FltReleaseContexts(
01459     _In_ PFLT_RELATED_CONTEXTS Contexts);
01460 
01461 _IRQL_requires_max_(APC_LEVEL)
01462 NTSTATUS
01463 FLTAPI
01464 FltSetVolumeContext(
01465     _In_ PFLT_VOLUME Volume,
01466     _In_ FLT_SET_CONTEXT_OPERATION Operation,
01467     _In_ PFLT_CONTEXT NewContext,
01468     _Outptr_opt_result_maybenull_ PFLT_CONTEXT *OldContext);
01469 
01470 _IRQL_requires_max_(APC_LEVEL)
01471 NTSTATUS
01472 FLTAPI
01473 FltSetInstanceContext(
01474     _In_ PFLT_INSTANCE Instance,
01475     _In_ FLT_SET_CONTEXT_OPERATION Operation,
01476     _In_ PFLT_CONTEXT NewContext,
01477     _Outptr_opt_result_maybenull_ PFLT_CONTEXT *OldContext);
01478 
01479 _IRQL_requires_max_(APC_LEVEL)
01480 NTSTATUS
01481 FLTAPI
01482 FltSetFileContext(
01483     _In_ PFLT_INSTANCE Instance,
01484     _In_ PFILE_OBJECT FileObject,
01485     _In_ FLT_SET_CONTEXT_OPERATION Operation,
01486     _In_ PFLT_CONTEXT NewContext,
01487     _Outptr_opt_result_maybenull_ PFLT_CONTEXT *OldContext);
01488 
01489 _IRQL_requires_max_(APC_LEVEL)
01490 NTSTATUS
01491 FLTAPI
01492 FltSetStreamContext(
01493     _In_ PFLT_INSTANCE Instance,
01494     _In_ PFILE_OBJECT FileObject,
01495     _In_ FLT_SET_CONTEXT_OPERATION Operation,
01496     _In_ PFLT_CONTEXT NewContext,
01497     _Outptr_opt_result_maybenull_ PFLT_CONTEXT *OldContext);
01498 
01499 _IRQL_requires_max_(APC_LEVEL)
01500 NTSTATUS
01501 FLTAPI
01502 FltSetStreamHandleContext(
01503     _In_ PFLT_INSTANCE Instance,
01504     _In_ PFILE_OBJECT FileObject,
01505     _In_ FLT_SET_CONTEXT_OPERATION Operation,
01506     _In_ PFLT_CONTEXT NewContext,
01507     _Outptr_opt_result_maybenull_ PFLT_CONTEXT *OldContext);
01508 
01509 _IRQL_requires_max_(APC_LEVEL)
01510 VOID
01511 FLTAPI
01512 FltDeleteContext(
01513     _In_ PFLT_CONTEXT Context);
01514 
01515 _IRQL_requires_max_(APC_LEVEL)
01516 NTSTATUS
01517 FLTAPI
01518 FltDeleteVolumeContext(
01519     _In_ PFLT_FILTER Filter,
01520     _In_ PFLT_VOLUME Volume,
01521     _Outptr_opt_result_maybenull_ PFLT_CONTEXT *OldContext);
01522 
01523 _IRQL_requires_max_(APC_LEVEL)
01524 NTSTATUS
01525 FLTAPI
01526 FltDeleteInstanceContext(
01527     _In_ PFLT_INSTANCE Instance,
01528     _Outptr_opt_result_maybenull_ PFLT_CONTEXT *OldContext);
01529 
01530 _IRQL_requires_max_(APC_LEVEL)
01531 NTSTATUS
01532 FLTAPI
01533 FltDeleteFileContext(
01534     _In_ PFLT_INSTANCE Instance,
01535     _In_ PFILE_OBJECT FileObject,
01536     _Outptr_opt_result_maybenull_ PFLT_CONTEXT *OldContext);
01537 
01538 _IRQL_requires_max_(APC_LEVEL)
01539 NTSTATUS
01540 FLTAPI
01541 FltDeleteStreamContext(
01542     _In_ PFLT_INSTANCE Instance,
01543     _In_ PFILE_OBJECT FileObject,
01544     _Outptr_opt_result_maybenull_ PFLT_CONTEXT *OldContext);
01545 
01546 _IRQL_requires_max_(APC_LEVEL)
01547 NTSTATUS
01548 FLTAPI
01549 FltDeleteStreamHandleContext(
01550     _In_ PFLT_INSTANCE Instance,
01551     _In_ PFILE_OBJECT FileObject,
01552     _Outptr_opt_result_maybenull_ PFLT_CONTEXT *OldContext);
01553 
01554 _IRQL_requires_max_(APC_LEVEL)
01555 NTSTATUS
01556 FLTAPI
01557 FltGetVolumeContext(
01558     _In_ PFLT_FILTER Filter,
01559     _In_ PFLT_VOLUME Volume,
01560     _Outptr_ PFLT_CONTEXT *Context);
01561 
01562 _IRQL_requires_max_(APC_LEVEL)
01563 NTSTATUS
01564 FLTAPI
01565 FltGetInstanceContext(
01566     _In_ PFLT_INSTANCE Instance,
01567     _Outptr_ PFLT_CONTEXT *Context);
01568 
01569 _IRQL_requires_max_(APC_LEVEL)
01570 NTSTATUS
01571 FLTAPI
01572 FltGetFileContext(
01573     _In_ PFLT_INSTANCE Instance,
01574     _In_ PFILE_OBJECT FileObject,
01575     _Outptr_ PFLT_CONTEXT *Context);
01576 
01577 _IRQL_requires_max_(APC_LEVEL)
01578 NTSTATUS
01579 FLTAPI
01580 FltGetStreamContext(
01581     _In_ PFLT_INSTANCE Instance,
01582     _In_ PFILE_OBJECT FileObject,
01583     _Outptr_ PFLT_CONTEXT *Context);
01584 
01585 _IRQL_requires_max_(APC_LEVEL)
01586 NTSTATUS
01587 FLTAPI
01588 FltGetStreamHandleContext(
01589     _In_ PFLT_INSTANCE Instance,
01590     _In_ PFILE_OBJECT FileObject,
01591     _Outptr_ PFLT_CONTEXT *Context);
01592 
01593 _IRQL_requires_max_(DISPATCH_LEVEL)
01594 VOID
01595 FLTAPI
01596 FltReferenceContext(
01597     _In_ PFLT_CONTEXT Context);
01598 
01599 _IRQL_requires_max_(DISPATCH_LEVEL)
01600 VOID
01601 FLTAPI
01602 FltReleaseContext(
01603     _In_ PFLT_CONTEXT Context);
01604 
01605 _IRQL_requires_max_(APC_LEVEL)
01606 NTSTATUS
01607 FLTAPI
01608 FltGetFilterFromName(
01609     _In_ PCUNICODE_STRING FilterName,
01610     _Outptr_ PFLT_FILTER *RetFilter);
01611 
01612 _IRQL_requires_max_(PASSIVE_LEVEL)
01613 NTSTATUS
01614 FLTAPI
01615 FltGetVolumeFromName(
01616     _In_ PFLT_FILTER Filter,
01617     _In_ PCUNICODE_STRING VolumeName,
01618     _Outptr_ PFLT_VOLUME *RetVolume);
01619 
01620 _IRQL_requires_max_(APC_LEVEL)
01621 NTSTATUS
01622 FLTAPI
01623 FltGetVolumeInstanceFromName(
01624     _In_opt_ PFLT_FILTER Filter,
01625     _In_ PFLT_VOLUME Volume,
01626     _In_opt_ PCUNICODE_STRING InstanceName,
01627     _Outptr_ PFLT_INSTANCE *RetInstance);
01628 
01629 _IRQL_requires_max_(APC_LEVEL)
01630 NTSTATUS
01631 FLTAPI
01632 FltGetVolumeFromInstance(
01633     _In_ PFLT_INSTANCE Instance,
01634     _Outptr_ PFLT_VOLUME *RetVolume);
01635 
01636 _IRQL_requires_max_(APC_LEVEL)
01637 NTSTATUS
01638 FLTAPI
01639 FltGetFilterFromInstance(
01640     _In_ PFLT_INSTANCE Instance,
01641     _Outptr_ PFLT_FILTER *RetFilter);
01642 
01643 _IRQL_requires_max_(APC_LEVEL)
01644 NTSTATUS
01645 FLTAPI
01646 FltGetVolumeFromFileObject(
01647     _In_ PFLT_FILTER Filter,
01648     _In_ PFILE_OBJECT FileObject,
01649     _Outptr_ PFLT_VOLUME *RetVolume);
01650 
01651 _IRQL_requires_max_(APC_LEVEL)
01652 NTSTATUS
01653 FLTAPI
01654 FltGetVolumeFromDeviceObject(
01655     _In_ PFLT_FILTER Filter,
01656     _In_ PDEVICE_OBJECT DeviceObject,
01657     _Outptr_ PFLT_VOLUME *RetVolume);
01658 
01659 _IRQL_requires_max_(DISPATCH_LEVEL)
01660 NTSTATUS
01661 FLTAPI
01662 FltGetDeviceObject(
01663     _In_ PFLT_VOLUME Volume,
01664     _Outptr_ PDEVICE_OBJECT *DeviceObject);
01665 
01666 _IRQL_requires_max_(DISPATCH_LEVEL)
01667 NTSTATUS
01668 FLTAPI
01669 FltGetDiskDeviceObject(
01670     _In_ PFLT_VOLUME Volume,
01671     _Outptr_ PDEVICE_OBJECT *DiskDeviceObject);
01672 
01673 _IRQL_requires_max_(APC_LEVEL)
01674 NTSTATUS
01675 FLTAPI
01676 FltGetLowerInstance(
01677     _In_ PFLT_INSTANCE CurrentInstance,
01678     _Outptr_ PFLT_INSTANCE *LowerInstance);
01679 
01680 _IRQL_requires_max_(APC_LEVEL)
01681 NTSTATUS
01682 FLTAPI
01683 FltGetUpperInstance(
01684     _In_ PFLT_INSTANCE CurrentInstance,
01685     _Outptr_ PFLT_INSTANCE *UpperInstance);
01686 
01687 _IRQL_requires_max_(APC_LEVEL)
01688 NTSTATUS
01689 FLTAPI
01690 FltGetTopInstance(
01691     _In_ PFLT_VOLUME Volume,
01692     _Outptr_ PFLT_INSTANCE *Instance);
01693 
01694 _IRQL_requires_max_(APC_LEVEL)
01695 NTSTATUS
01696 FLTAPI
01697 FltGetBottomInstance(
01698     _In_ PFLT_VOLUME Volume,
01699     _Outptr_ PFLT_INSTANCE *Instance);
01700 
01701 LONG
01702 FLTAPI
01703 FltCompareInstanceAltitudes(
01704     _In_ PFLT_INSTANCE Instance1,
01705     _In_ PFLT_INSTANCE Instance2);
01706 
01707 _IRQL_requires_max_(APC_LEVEL)
01708 NTSTATUS
01709 FLTAPI
01710 FltGetFilterInformation(
01711     _In_ PFLT_FILTER Filter,
01712     _In_ FILTER_INFORMATION_CLASS InformationClass,
01713     _Out_writes_bytes_to_opt_(BufferSize, *BytesReturned) PVOID Buffer,
01714     _In_ ULONG BufferSize,
01715     _Out_ PULONG BytesReturned);
01716 
01717 _IRQL_requires_max_(APC_LEVEL)
01718 NTSTATUS
01719 FLTAPI
01720 FltGetInstanceInformation(
01721     _In_ PFLT_INSTANCE Instance,
01722     _In_ INSTANCE_INFORMATION_CLASS InformationClass,
01723     _Out_writes_bytes_to_opt_(BufferSize,*BytesReturned) PVOID Buffer,
01724     _In_ ULONG BufferSize,
01725     _Out_ PULONG BytesReturned);
01726 
01727 _IRQL_requires_max_(APC_LEVEL)
01728 NTSTATUS
01729 FLTAPI
01730 FltGetVolumeProperties(
01731     _In_ PFLT_VOLUME Volume,
01732     _Out_writes_bytes_to_opt_(VolumePropertiesLength,*LengthReturned) PFLT_VOLUME_PROPERTIES VolumeProperties,
01733     _In_ ULONG VolumePropertiesLength,
01734     _Out_ PULONG LengthReturned);
01735 
01736 _Must_inspect_result_
01737 _IRQL_requires_max_(PASSIVE_LEVEL)
01738 NTSTATUS
01739 FLTAPI
01740 FltIsVolumeWritable(
01741     _In_ PVOID FltObject,
01742     _Out_ PBOOLEAN IsWritable);
01743 
01744 _Must_inspect_result_
01745 _IRQL_requires_max_(PASSIVE_LEVEL)
01746 NTSTATUS
01747 FLTAPI
01748 FltGetVolumeGuidName(
01749     _In_ PFLT_VOLUME Volume,
01750     _Out_ PUNICODE_STRING VolumeGuidName,
01751     _Out_opt_ PULONG BufferSizeNeeded);
01752 
01753 _Must_inspect_result_
01754 _IRQL_requires_max_(PASSIVE_LEVEL)
01755 NTSTATUS
01756 FLTAPI
01757 FltQueryVolumeInformation(
01758     _In_ PFLT_INSTANCE Instance,
01759     _Out_ PIO_STATUS_BLOCK Iosb,
01760     _Out_writes_bytes_(Length) PVOID FsInformation,
01761     _In_ ULONG Length,
01762     _In_ FS_INFORMATION_CLASS FsInformationClass);
01763 
01764 _Must_inspect_result_
01765 _IRQL_requires_max_(PASSIVE_LEVEL)
01766 NTSTATUS
01767 FLTAPI
01768 FltSetVolumeInformation(
01769     _In_ PFLT_INSTANCE Instance,
01770     _Out_ PIO_STATUS_BLOCK Iosb,
01771     _Out_writes_bytes_(Length) PVOID FsInformation,
01772     _In_ ULONG Length,
01773     _In_ FS_INFORMATION_CLASS FsInformationClass);
01774 
01775 _Must_inspect_result_
01776 _IRQL_requires_max_(APC_LEVEL)
01777 NTSTATUS
01778 FLTAPI
01779 FltEnumerateFilters(
01780     _Out_writes_to_opt_(FilterListSize,*NumberFiltersReturned) PFLT_FILTER *FilterList,
01781     _In_ ULONG FilterListSize,
01782     _Out_ PULONG NumberFiltersReturned);
01783 
01784 _Must_inspect_result_
01785 _IRQL_requires_max_(APC_LEVEL)
01786 NTSTATUS
01787 FLTAPI
01788 FltEnumerateVolumes(
01789     _In_ PFLT_FILTER Filter,
01790     _Out_writes_to_opt_(VolumeListSize,*NumberVolumesReturned) PFLT_VOLUME *VolumeList,
01791     _In_ ULONG VolumeListSize,
01792     _Out_ PULONG NumberVolumesReturned);
01793 
01794 _Must_inspect_result_
01795 _IRQL_requires_max_(APC_LEVEL)
01796 NTSTATUS
01797 FLTAPI
01798 FltEnumerateInstances(
01799     _In_opt_ PFLT_VOLUME Volume,
01800     _In_opt_ PFLT_FILTER Filter,
01801     _Out_writes_to_opt_(InstanceListSize,*NumberInstancesReturned) PFLT_INSTANCE *InstanceList,
01802     _In_ ULONG InstanceListSize,
01803     _Out_ PULONG NumberInstancesReturned);
01804 
01805 _Must_inspect_result_
01806 _IRQL_requires_max_(APC_LEVEL)
01807 NTSTATUS
01808 FLTAPI
01809 FltEnumerateFilterInformation(
01810     _In_ ULONG Index,
01811     _In_ FILTER_INFORMATION_CLASS InformationClass,
01812     _Out_writes_bytes_to_opt_(BufferSize,*BytesReturned) PVOID Buffer,
01813     _In_ ULONG BufferSize,
01814     _Out_ PULONG BytesReturned);
01815 
01816 _Must_inspect_result_
01817 _IRQL_requires_max_(APC_LEVEL)
01818 NTSTATUS
01819 FLTAPI
01820 FltEnumerateInstanceInformationByFilter(
01821     _In_ PFLT_FILTER Filter,
01822     _In_ ULONG Index,
01823     _In_ INSTANCE_INFORMATION_CLASS InformationClass,
01824     _Out_writes_bytes_to_opt_(BufferSize,*BytesReturned) PVOID Buffer,
01825     _In_ ULONG BufferSize,
01826     _Out_ PULONG BytesReturned);
01827 
01828 _Must_inspect_result_
01829 _IRQL_requires_max_(APC_LEVEL)
01830 NTSTATUS
01831 FLTAPI
01832 FltEnumerateInstanceInformationByVolume(
01833     _In_ PFLT_VOLUME Volume,
01834     _In_ ULONG Index,
01835     _In_ INSTANCE_INFORMATION_CLASS InformationClass,
01836     _Out_writes_bytes_to_opt_(BufferSize,*BytesReturned) PVOID Buffer,
01837     _In_ ULONG BufferSize,
01838     _Out_ PULONG BytesReturned);
01839 
01840 _Must_inspect_result_
01841 _IRQL_requires_max_(APC_LEVEL)
01842 NTSTATUS
01843 FLTAPI
01844 FltEnumerateVolumeInformation(
01845     _In_ PFLT_FILTER Filter,
01846     _In_ ULONG Index,
01847     _In_ FILTER_VOLUME_INFORMATION_CLASS InformationClass,
01848     _Out_writes_bytes_to_opt_(BufferSize,*BytesReturned) PVOID Buffer,
01849     _In_ ULONG BufferSize,
01850     _Out_ PULONG BytesReturned);
01851 
01852 _Must_inspect_result_
01853 _IRQL_requires_max_(DISPATCH_LEVEL)
01854 NTSTATUS
01855 FLTAPI
01856 FltObjectReference(
01857     _Inout_ PVOID FltObject);
01858 
01859 _IRQL_requires_max_(DISPATCH_LEVEL)
01860 VOID
01861 FLTAPI
01862 FltObjectDereference(
01863     _Inout_ PVOID FltObject);
01864 
01865 _Must_inspect_result_
01866 _IRQL_requires_max_(PASSIVE_LEVEL)
01867 NTSTATUS
01868 FLTAPI
01869 FltCreateCommunicationPort(
01870     _In_ PFLT_FILTER Filter,
01871     _Outptr_ PFLT_PORT *ServerPort,
01872     _In_ POBJECT_ATTRIBUTES ObjectAttributes,
01873     _In_opt_ PVOID ServerPortCookie,
01874     _In_ PFLT_CONNECT_NOTIFY ConnectNotifyCallback,
01875     _In_ PFLT_DISCONNECT_NOTIFY DisconnectNotifyCallback,
01876     _In_opt_ PFLT_MESSAGE_NOTIFY MessageNotifyCallback,
01877     _In_ LONG MaxConnections);
01878 
01879 _IRQL_requires_max_(PASSIVE_LEVEL)
01880 VOID
01881 FLTAPI
01882 FltCloseCommunicationPort(
01883     _In_ PFLT_PORT ServerPort);
01884 
01885 _IRQL_requires_max_(PASSIVE_LEVEL)
01886 VOID
01887 FLTAPI
01888 FltCloseClientPort(
01889     _In_ PFLT_FILTER Filter,
01890     _Outptr_ PFLT_PORT *ClientPort);
01891 
01892 _Must_inspect_result_
01893 _IRQL_requires_max_(APC_LEVEL)
01894 NTSTATUS
01895 FLTAPI
01896 FltSendMessage(
01897     _In_ PFLT_FILTER Filter,
01898     _In_ PFLT_PORT *ClientPort,
01899     _In_reads_bytes_(SenderBufferLength) PVOID SenderBuffer,
01900     _In_ ULONG SenderBufferLength,
01901     _Out_writes_bytes_opt_(*ReplyLength) PVOID ReplyBuffer,
01902     _Inout_opt_ PULONG ReplyLength,
01903     _In_opt_ PLARGE_INTEGER Timeout);
01904 
01905 _Must_inspect_result_
01906 _IRQL_requires_max_(APC_LEVEL)
01907 NTSTATUS
01908 FLTAPI
01909 FltBuildDefaultSecurityDescriptor(
01910     _Outptr_ PSECURITY_DESCRIPTOR *SecurityDescriptor,
01911     _In_ ACCESS_MASK DesiredAccess);
01912 
01913 _IRQL_requires_max_(APC_LEVEL)
01914 VOID
01915 FLTAPI
01916 FltFreeSecurityDescriptor(
01917     _In_ PSECURITY_DESCRIPTOR SecurityDescriptor);
01918 
01919 _Must_inspect_result_
01920 _IRQL_requires_max_(DISPATCH_LEVEL)
01921 BOOLEAN
01922 FLTAPI
01923 FltCancelIo(
01924     _In_ PFLT_CALLBACK_DATA CallbackData);
01925 
01926 _IRQL_requires_max_(DISPATCH_LEVEL)
01927 NTSTATUS
01928 FLTAPI
01929 FltSetCancelCompletion(
01930     _In_ PFLT_CALLBACK_DATA CallbackData,
01931     _In_ PFLT_COMPLETE_CANCELED_CALLBACK CanceledCallback);
01932 
01933 _Must_inspect_result_
01934 _IRQL_requires_max_(DISPATCH_LEVEL)
01935 NTSTATUS
01936 FLTAPI
01937 FltClearCancelCompletion(
01938     _In_ PFLT_CALLBACK_DATA CallbackData);
01939 
01940 BOOLEAN
01941 FLTAPI
01942 FltIsIoCanceled(
01943     _In_ PFLT_CALLBACK_DATA CallbackData);
01944 
01945 _Must_inspect_result_
01946 _IRQL_requires_max_(DISPATCH_LEVEL)
01947 PFLT_DEFERRED_IO_WORKITEM
01948 FLTAPI
01949 FltAllocateDeferredIoWorkItem(VOID);
01950 
01951 _IRQL_requires_max_(DISPATCH_LEVEL)
01952 VOID
01953 FLTAPI
01954 FltFreeDeferredIoWorkItem(
01955     _In_ PFLT_DEFERRED_IO_WORKITEM FltWorkItem);
01956 
01957 _Must_inspect_result_
01958 _IRQL_requires_max_(DISPATCH_LEVEL)
01959 PFLT_GENERIC_WORKITEM
01960 FLTAPI
01961 FltAllocateGenericWorkItem(VOID);
01962 
01963 _IRQL_requires_max_(DISPATCH_LEVEL)
01964 VOID
01965 FLTAPI
01966 FltFreeGenericWorkItem(
01967     _In_ PFLT_GENERIC_WORKITEM FltWorkItem);
01968 
01969 _Must_inspect_result_
01970 _IRQL_requires_max_(DISPATCH_LEVEL)
01971 NTSTATUS
01972 FLTAPI
01973 FltQueueDeferredIoWorkItem(
01974     _In_ PFLT_DEFERRED_IO_WORKITEM FltWorkItem,
01975     _In_ PFLT_CALLBACK_DATA Data,
01976     _In_ PFLT_DEFERRED_IO_WORKITEM_ROUTINE WorkerRoutine,
01977     _In_ WORK_QUEUE_TYPE QueueType,
01978     _In_ PVOID Context);
01979 
01980 _Must_inspect_result_
01981 _IRQL_requires_max_(DISPATCH_LEVEL)
01982 NTSTATUS
01983 FLTAPI
01984 FltQueueGenericWorkItem(
01985     _In_ PFLT_GENERIC_WORKITEM FltWorkItem,
01986     _In_ PVOID FltObject,
01987     _In_ PFLT_GENERIC_WORKITEM_ROUTINE WorkerRoutine,
01988     _In_ WORK_QUEUE_TYPE QueueType,
01989     _In_opt_ PVOID Context);
01990 
01991 _Must_inspect_result_
01992 _IRQL_requires_max_(APC_LEVEL)
01993 NTSTATUS
01994 FLTAPI
01995 FltLockUserBuffer(
01996     _In_ PFLT_CALLBACK_DATA CallbackData);
01997 
01998 NTSTATUS
01999 FLTAPI
02000 FltDecodeParameters(
02001     _In_ PFLT_CALLBACK_DATA CallbackData,
02002     _Outptr_opt_ PMDL **MdlAddressPointer,
02003     _Outptr_opt_result_bytebuffer_(**Length) PVOID **Buffer,
02004     _Outptr_opt_ PULONG *Length,
02005     _Out_opt_ LOCK_OPERATION *DesiredAccess);
02006 
02007 PMDL
02008 FASTCALL
02009 FltGetSwappedBufferMdlAddress(
02010     _In_ PFLT_CALLBACK_DATA CallbackData);
02011 
02012 VOID
02013 FASTCALL
02014 FltRetainSwappedBufferMdlAddress(
02015     _In_ PFLT_CALLBACK_DATA CallbackData);
02016 
02017 NTSTATUS
02018 FLTAPI
02019 FltCbdqInitialize(
02020     _In_ PFLT_INSTANCE Instance,
02021     _Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq,
02022     _In_ PFLT_CALLBACK_DATA_QUEUE_INSERT_IO CbdqInsertIo,
02023     _In_ PFLT_CALLBACK_DATA_QUEUE_REMOVE_IO CbdqRemoveIo,
02024     _In_ PFLT_CALLBACK_DATA_QUEUE_PEEK_NEXT_IO CbdqPeekNextIo,
02025     _In_ PFLT_CALLBACK_DATA_QUEUE_ACQUIRE CbdqAcquire,
02026     _In_ PFLT_CALLBACK_DATA_QUEUE_RELEASE CbdqRelease,
02027     _In_ PFLT_CALLBACK_DATA_QUEUE_COMPLETE_CANCELED_IO CbdqCompleteCanceledIo);
02028 
02029 VOID
02030 FLTAPI
02031 FltCbdqEnable(
02032     _Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq);
02033 
02034 VOID
02035 FLTAPI
02036 FltCbdqDisable(
02037     _Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq);
02038 
02039 _Must_inspect_result_
02040 NTSTATUS
02041 FLTAPI
02042 FltCbdqInsertIo(
02043     _Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq,
02044     _In_ PFLT_CALLBACK_DATA Cbd,
02045     _In_opt_ PFLT_CALLBACK_DATA_QUEUE_IO_CONTEXT Context,
02046     _In_opt_ PVOID InsertContext);
02047 
02048 _Must_inspect_result_
02049 PFLT_CALLBACK_DATA
02050 FLTAPI
02051 FltCbdqRemoveIo(
02052     _Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq,
02053     _In_ PFLT_CALLBACK_DATA_QUEUE_IO_CONTEXT Context);
02054 
02055 _Must_inspect_result_
02056 PFLT_CALLBACK_DATA
02057 FLTAPI
02058 FltCbdqRemoveNextIo(
02059     _Inout_ PFLT_CALLBACK_DATA_QUEUE Cbdq,
02060     _In_opt_ PVOID PeekContext);
02061 
02062 _IRQL_requires_max_(APC_LEVEL)
02063 VOID
02064 FLTAPI
02065 FltInitializeOplock(
02066     _Out_ POPLOCK Oplock);
02067 
02068 _IRQL_requires_max_(APC_LEVEL)
02069 VOID
02070 FLTAPI
02071 FltUninitializeOplock(
02072     _In_ POPLOCK Oplock);
02073 
02074 _Must_inspect_result_
02075 _IRQL_requires_max_(APC_LEVEL)
02076 FLT_PREOP_CALLBACK_STATUS
02077 FLTAPI
02078 FltOplockFsctrl(
02079     _In_ POPLOCK Oplock,
02080     _In_ PFLT_CALLBACK_DATA CallbackData,
02081     _In_ ULONG OpenCount);
02082 
02083 _Must_inspect_result_
02084 _IRQL_requires_max_(APC_LEVEL)
02085 FLT_PREOP_CALLBACK_STATUS
02086 FLTAPI
02087 FltCheckOplock(
02088     _In_ POPLOCK Oplock,
02089     _In_ PFLT_CALLBACK_DATA CallbackData,
02090     _In_opt_ PVOID Context,
02091     _In_opt_ PFLTOPLOCK_WAIT_COMPLETE_ROUTINE WaitCompletionRoutine,
02092     _In_opt_ PFLTOPLOCK_PREPOST_CALLBACKDATA_ROUTINE PrePostCallbackDataRoutine);
02093 
02094 _IRQL_requires_max_(APC_LEVEL)
02095 BOOLEAN
02096 FLTAPI
02097 FltOplockIsFastIoPossible(
02098     _In_ POPLOCK Oplock);
02099 
02100 _IRQL_requires_max_(APC_LEVEL)
02101 BOOLEAN
02102 FLTAPI
02103 FltCurrentBatchOplock(
02104     _In_ POPLOCK Oplock);
02105 
02106 VOID
02107 FLTAPI
02108 FltInitializeFileLock(
02109     _Out_ PFILE_LOCK FileLock);
02110 
02111 VOID
02112 FLTAPI
02113 FltUninitializeFileLock(
02114     _In_ PFILE_LOCK FileLock);
02115 
02116 _Must_inspect_result_
02117 _IRQL_requires_max_(APC_LEVEL)
02118 PFILE_LOCK
02119 FLTAPI
02120 FltAllocateFileLock(
02121     _In_opt_ PFLT_COMPLETE_LOCK_CALLBACK_DATA_ROUTINE CompleteLockCallbackDataRoutine,
02122     _In_opt_ PUNLOCK_ROUTINE UnlockRoutine);
02123 
02124 _IRQL_requires_max_(APC_LEVEL)
02125 VOID
02126 FLTAPI
02127 FltFreeFileLock(
02128     _In_ PFILE_LOCK FileLock);
02129 
02130 _Must_inspect_result_
02131 _IRQL_requires_max_(APC_LEVEL)
02132 FLT_PREOP_CALLBACK_STATUS
02133 FLTAPI
02134 FltProcessFileLock(
02135     _In_ PFILE_LOCK FileLock,
02136     _In_ PFLT_CALLBACK_DATA CallbackData,
02137     _In_opt_ PVOID Context);
02138 
02139 _Must_inspect_result_
02140 _IRQL_requires_max_(APC_LEVEL)
02141 BOOLEAN
02142 FLTAPI
02143 FltCheckLockForReadAccess(
02144     _In_ PFILE_LOCK FileLock,
02145     _In_ PFLT_CALLBACK_DATA CallbackData);
02146 
02147 _Must_inspect_result_
02148 _IRQL_requires_max_(APC_LEVEL)
02149 BOOLEAN
02150 FLTAPI
02151 FltCheckLockForWriteAccess(
02152     _In_ PFILE_LOCK FileLock,
02153     _In_ PFLT_CALLBACK_DATA CallbackData);
02154 
02155 _Acquires_lock_(_Global_critical_region_)
02156 _IRQL_requires_max_(APC_LEVEL)
02157 VOID
02158 FLTAPI
02159 FltAcquireResourceExclusive(
02160     _Inout_ _Requires_lock_not_held_(*_Curr_) _Acquires_lock_(*_Curr_) PERESOURCE Resource);
02161 
02162 _Acquires_lock_(_Global_critical_region_)
02163 _IRQL_requires_max_(APC_LEVEL)
02164 VOID
02165 FLTAPI
02166 FltAcquireResourceShared(
02167     _Inout_ _Requires_lock_not_held_(*_Curr_) _Acquires_lock_(*_Curr_) PERESOURCE Resource);
02168 
02169 _Releases_lock_(_Global_critical_region_)
02170 _IRQL_requires_max_(DISPATCH_LEVEL)
02171 VOID
02172 FLTAPI
02173 FltReleaseResource(
02174     _Inout_ _Requires_lock_held_(*_Curr_) _Releases_lock_(*_Curr_) PERESOURCE Resource);
02175 
02176 _IRQL_requires_max_(APC_LEVEL)
02177 VOID
02178 FLTAPI
02179 FltInitializePushLock(
02180     _Out_ PEX_PUSH_LOCK PushLock);
02181 
02182 _IRQL_requires_max_(APC_LEVEL)
02183 VOID
02184 FLTAPI
02185 FltDeletePushLock(
02186     _In_ PEX_PUSH_LOCK PushLock);
02187 
02188 _Acquires_lock_(_Global_critical_region_)
02189 _IRQL_requires_max_(APC_LEVEL)
02190 VOID
02191 FLTAPI
02192 FltAcquirePushLockExclusive(
02193     _Inout_ _Requires_lock_not_held_(*_Curr_) _Acquires_lock_(*_Curr_) PEX_PUSH_LOCK PushLock);
02194 
02195 _Acquires_lock_(_Global_critical_region_)
02196 _IRQL_requires_max_(APC_LEVEL)
02197 VOID
02198 FLTAPI
02199 FltAcquirePushLockShared(
02200     _Inout_ _Requires_lock_not_held_(*_Curr_) _Acquires_lock_(*_Curr_) PEX_PUSH_LOCK PushLock);
02201 
02202 _Releases_lock_(_Global_critical_region_)
02203 _IRQL_requires_max_(APC_LEVEL)
02204 VOID
02205 FLTAPI
02206 FltReleasePushLock(
02207     _Inout_ _Requires_lock_held_(*_Curr_) _Releases_lock_(*_Curr_) PEX_PUSH_LOCK PushLock);
02208 
02209 BOOLEAN
02210 FLTAPI
02211 FltIsOperationSynchronous(
02212     _In_ PFLT_CALLBACK_DATA CallbackData);
02213 
02214 _IRQL_requires_max_(DISPATCH_LEVEL)
02215 BOOLEAN
02216 FLTAPI
02217 FltIs32bitProcess(
02218     _In_opt_ PFLT_CALLBACK_DATA CallbackData);
02219 
02220 _IRQL_requires_max_(DISPATCH_LEVEL)
02221 PEPROCESS
02222 FLTAPI
02223 FltGetRequestorProcess(
02224     _In_ PFLT_CALLBACK_DATA CallbackData);
02225 
02226 _IRQL_requires_max_(DISPATCH_LEVEL)
02227 ULONG
02228 FLTAPI
02229 FltGetRequestorProcessId(
02230     _In_ PFLT_CALLBACK_DATA CallbackData);
02231 
02232 _IRQL_requires_max_(APC_LEVEL)
02233 VOID
02234 FLTAPI
02235 FltNotifyFilterChangeDirectory(
02236     _Inout_ PNOTIFY_SYNC NotifySync,
02237     _Inout_ PLIST_ENTRY NotifyList,
02238     _In_ PVOID FsContext,
02239     _In_ PSTRING FullDirectoryName,
02240     _In_ BOOLEAN WatchTree,
02241     _In_ BOOLEAN IgnoreBuffer,
02242     _In_ ULONG CompletionFilter,
02243     _In_ PFLT_CALLBACK_DATA NotifyCallbackData,
02244     _In_opt_ PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback,
02245     _In_opt_ PSECURITY_SUBJECT_CONTEXT SubjectContext,
02246     _In_opt_ PFILTER_REPORT_CHANGE FilterCallback);
02247 
02248 PCHAR
02249 FLTAPI
02250 FltGetIrpName(
02251     _In_ UCHAR IrpMajorCode);
02252 
02253 #if FLT_MGR_AFTER_XPSP2
02254 
02255 _Must_inspect_result_
02256 _IRQL_requires_max_(PASSIVE_LEVEL)
02257 NTSTATUS
02258 FLTAPI
02259 FltCreateFileEx(
02260     _In_ PFLT_FILTER Filter,
02261     _In_opt_ PFLT_INSTANCE Instance,
02262     _Out_ PHANDLE FileHandle,
02263     _Outptr_opt_ PFILE_OBJECT *FileObject,
02264     _In_ ACCESS_MASK DesiredAccess,
02265     _In_ POBJECT_ATTRIBUTES ObjectAttributes,
02266     _Out_ PIO_STATUS_BLOCK IoStatusBlock,
02267     _In_opt_ PLARGE_INTEGER AllocationSize,
02268     _In_ ULONG FileAttributes,
02269     _In_ ULONG ShareAccess,
02270     _In_ ULONG CreateDisposition,
02271     _In_ ULONG CreateOptions,
02272     _In_reads_bytes_opt_(EaLength) PVOID EaBuffer,
02273     _In_ ULONG EaLength,
02274     _In_ ULONG Flags);
02275 
02276 _Must_inspect_result_
02277 _IRQL_requires_max_(PASSIVE_LEVEL)
02278 NTSTATUS
02279 FLTAPI
02280 FltOpenVolume(
02281     _In_ PFLT_INSTANCE Instance,
02282     _Out_ PHANDLE VolumeHandle,
02283     _Outptr_opt_ PFILE_OBJECT *VolumeFileObject);
02284 
02285 _Must_inspect_result_
02286 _IRQL_requires_max_(PASSIVE_LEVEL)
02287 NTSTATUS
02288 FLTAPI
02289 FltQueryEaFile(
02290     _In_ PFLT_INSTANCE Instance,
02291     _In_ PFILE_OBJECT FileObject,
02292     _Out_writes_bytes_to_(Length,*LengthReturned) PVOID ReturnedEaData,
02293     _In_ ULONG Length,
02294     _In_ BOOLEAN ReturnSingleEntry,
02295     _In_reads_bytes_opt_(EaListLength) PVOID EaList,
02296     _In_ ULONG EaListLength,
02297     _In_opt_ PULONG EaIndex,
02298     _In_ BOOLEAN RestartScan,
02299     _Out_opt_ PULONG LengthReturned);
02300 
02301 _Must_inspect_result_
02302 _IRQL_requires_max_(PASSIVE_LEVEL)
02303 NTSTATUS
02304 FLTAPI
02305 FltSetEaFile(
02306     _In_ PFLT_INSTANCE Instance,
02307     _In_ PFILE_OBJECT FileObject,
02308     _In_reads_bytes_(Length) PVOID EaBuffer,
02309     _In_ ULONG Length);
02310 
02311 #endif /* FLT_MGR_AFTER_XPSP2 */
02312 
02313 #if FLT_MGR_LONGHORN
02314 
02315 _Must_inspect_result_
02316 _IRQL_requires_max_(PASSIVE_LEVEL)
02317 NTSTATUS
02318 FLTAPI
02319 FltCreateFileEx2(
02320     _In_ PFLT_FILTER Filter,
02321     _In_opt_ PFLT_INSTANCE Instance,
02322     _Out_ PHANDLE FileHandle,
02323     _Outptr_opt_ PFILE_OBJECT *FileObject,
02324     _In_ ACCESS_MASK DesiredAccess,
02325     _In_ POBJECT_ATTRIBUTES ObjectAttributes,
02326     _Out_ PIO_STATUS_BLOCK IoStatusBlock,
02327     _In_opt_ PLARGE_INTEGER AllocationSize,
02328     _In_ ULONG FileAttributes,
02329     _In_ ULONG ShareAccess,
02330     _In_ ULONG CreateDisposition,
02331     _In_ ULONG CreateOptions,
02332     _In_reads_bytes_opt_(EaLength) PVOID EaBuffer,
02333     _In_ ULONG EaLength,
02334     _In_ ULONG Flags,
02335     _In_opt_ PIO_DRIVER_CREATE_CONTEXT DriverContext);
02336 
02337 _Must_inspect_result_
02338 _IRQL_requires_max_(PASSIVE_LEVEL)
02339 NTSTATUS
02340 FLTAPI
02341 FltQueryDirectoryFile(
02342     _In_ PFLT_INSTANCE Instance,
02343     _In_ PFILE_OBJECT FileObject,
02344     _Out_writes_bytes_(Length) PVOID FileInformation,
02345     _In_ ULONG Length,
02346     _In_ FILE_INFORMATION_CLASS FileInformationClass,
02347     _In_ BOOLEAN ReturnSingleEntry,
02348     _In_opt_ PUNICODE_STRING FileName,
02349     _In_ BOOLEAN RestartScan,
02350     _Out_opt_ PULONG LengthReturned);
02351 
02352 _IRQL_requires_max_(APC_LEVEL)
02353 BOOLEAN
02354 FLTAPI
02355 FltSupportsFileContextsEx(
02356     _In_ PFILE_OBJECT FileObject,
02357     _In_opt_ PFLT_INSTANCE Instance);
02358 
02359 _IRQL_requires_max_(APC_LEVEL)
02360 NTSTATUS
02361 FLTAPI
02362 FltSetTransactionContext(
02363     _In_ PFLT_INSTANCE Instance,
02364     _In_ PKTRANSACTION Transaction,
02365     _In_ FLT_SET_CONTEXT_OPERATION Operation,
02366     _In_ PFLT_CONTEXT NewContext,
02367     _Outptr_opt_ PFLT_CONTEXT *OldContext);
02368 
02369 _IRQL_requires_max_(APC_LEVEL)
02370 NTSTATUS
02371 FLTAPI
02372 FltDeleteTransactionContext(
02373     _In_ PFLT_INSTANCE Instance,
02374     _In_ PKTRANSACTION Transaction,
02375     _Outptr_opt_ PFLT_CONTEXT *OldContext);
02376 
02377 _IRQL_requires_max_(APC_LEVEL)
02378 NTSTATUS
02379 FLTAPI
02380 FltGetTransactionContext(
02381     _In_ PFLT_INSTANCE Instance,
02382     _In_ PKTRANSACTION Transaction,
02383     _Outptr_ PFLT_CONTEXT *Context);
02384 
02385 _IRQL_requires_max_(APC_LEVEL)
02386 BOOLEAN
02387 FLTAPI
02388 FltIsFltMgrVolumeDeviceObject(
02389     _In_ PDEVICE_OBJECT DeviceObject);
02390 
02391 _IRQL_requires_max_(APC_LEVEL)
02392 NTSTATUS
02393 FLTAPI
02394 FltGetVolumeInformation(
02395     _In_ PFLT_VOLUME Volume,
02396     _In_ FILTER_VOLUME_INFORMATION_CLASS InformationClass,
02397     _Out_writes_bytes_to_opt_(BufferSize,*BytesReturned) PVOID Buffer,
02398     _In_ ULONG BufferSize,
02399     _Out_ PULONG BytesReturned);
02400 
02401 _IRQL_requires_max_(APC_LEVEL)
02402 NTSTATUS
02403 FLTAPI
02404 FltGetFileSystemType(
02405     _In_ PVOID FltObject,
02406     _Out_ PFLT_FILESYSTEM_TYPE FileSystemType);
02407 
02408 _Must_inspect_result_
02409 _IRQL_requires_max_(PASSIVE_LEVEL)
02410 NTSTATUS
02411 FLTAPI
02412 FltIsVolumeSnapshot(
02413     _In_ PVOID FltObject,
02414     _Out_ PBOOLEAN IsSnapshotVolume);
02415 
02416 _Must_inspect_result_
02417 _When_(((CallbackData!=NULL) && FLT_IS_IRP_OPERATION(CallbackData)), _IRQL_requires_max_(PASSIVE_LEVEL))
02418 _When_((!((CallbackData!=NULL) && FLT_IS_IRP_OPERATION(CallbackData))), _IRQL_requires_max_(APC_LEVEL))
02419 NTSTATUS
02420 FLTAPI
02421 FltCancellableWaitForSingleObject(
02422     _In_ PVOID Object,
02423     _In_opt_ PLARGE_INTEGER Timeout,
02424     _In_opt_ PFLT_CALLBACK_DATA CallbackData);
02425 
02426 _Must_inspect_result_
02427 _When_(((CallbackData!=NULL) && FLT_IS_IRP_OPERATION(CallbackData)), _IRQL_requires_max_(PASSIVE_LEVEL))
02428 _When_((!((CallbackData!=NULL) && FLT_IS_IRP_OPERATION(CallbackData))), _IRQL_requires_max_(APC_LEVEL))
02429 NTSTATUS
02430 FLTAPI
02431 FltCancellableWaitForMultipleObjects(
02432     _In_ ULONG Count,
02433     _In_reads_(Count) PVOID ObjectArray[],
02434     _In_ WAIT_TYPE WaitType,
02435     _In_opt_ PLARGE_INTEGER Timeout,
02436     _In_opt_ PKWAIT_BLOCK WaitBlockArray,
02437     _In_ PFLT_CALLBACK_DATA CallbackData);
02438 
02439 _IRQL_requires_max_(DISPATCH_LEVEL)
02440 HANDLE
02441 FLTAPI
02442 FltGetRequestorProcessIdEx(
02443     _In_ PFLT_CALLBACK_DATA CallbackData);
02444 
02445 _Must_inspect_result_
02446 _IRQL_requires_max_(APC_LEVEL)
02447 NTSTATUS
02448 FLTAPI
02449 FltEnlistInTransaction(
02450     _In_ PFLT_INSTANCE Instance,
02451     _In_ PKTRANSACTION Transaction,
02452     _In_ PFLT_CONTEXT TransactionContext,
02453     _In_ NOTIFICATION_MASK NotificationMask);
02454 
02455 _IRQL_requires_max_(APC_LEVEL)
02456 NTSTATUS
02457 FLTAPI
02458 FltRollbackEnlistment(
02459     _In_ PFLT_INSTANCE Instance,
02460     _In_ PKTRANSACTION Transaction,
02461     _In_opt_ PFLT_CONTEXT TransactionContext);
02462 
02463 _IRQL_requires_max_(APC_LEVEL)
02464 NTSTATUS
02465 FLTAPI
02466 FltPrePrepareComplete(
02467     _In_ PFLT_INSTANCE Instance,
02468     _In_ PKTRANSACTION Transaction,
02469     _In_opt_ PFLT_CONTEXT TransactionContext);
02470 
02471 _IRQL_requires_max_(APC_LEVEL)
02472 NTSTATUS
02473 FLTAPI
02474 FltPrepareComplete(
02475     _In_ PFLT_INSTANCE Instance,
02476     _In_ PKTRANSACTION Transaction,
02477     _In_opt_ PFLT_CONTEXT TransactionContext);
02478 
02479 _IRQL_requires_max_(PASSIVE_LEVEL)
02480 NTSTATUS
02481 FLTAPI
02482 FltCommitComplete(
02483     _In_ PFLT_INSTANCE Instance,
02484     _In_ PKTRANSACTION Transaction,
02485     _In_opt_ PFLT_CONTEXT TransactionContext);
02486 
02487 _IRQL_requires_max_(APC_LEVEL)
02488 NTSTATUS
02489 FLTAPI
02490 FltCommitFinalizeComplete(
02491     _In_ PFLT_INSTANCE Instance,
02492     _In_ PKTRANSACTION Transaction,
02493     _In_opt_ PFLT_CONTEXT TransactionContext);
02494 
02495 _IRQL_requires_max_(PASSIVE_LEVEL)
02496 NTSTATUS
02497 FLTAPI
02498 FltRollbackComplete(
02499     _In_ PFLT_INSTANCE Instance,
02500     _In_ PKTRANSACTION Transaction,
02501     _In_opt_ PFLT_CONTEXT TransactionContext);
02502 
02503 _Must_inspect_result_
02504 _IRQL_requires_max_(APC_LEVEL)
02505 NTSTATUS
02506 FLTAPI
02507 FltAllocateExtraCreateParameterList(
02508     _In_ PFLT_FILTER Filter,
02509     _In_ FSRTL_ALLOCATE_ECPLIST_FLAGS Flags,
02510     _Outptr_ PECP_LIST *EcpList);
02511 
02512 _Must_inspect_result_
02513 _IRQL_requires_max_(APC_LEVEL)
02514 NTSTATUS
02515 FLTAPI
02516 FltAllocateExtraCreateParameter(
02517     _In_ PFLT_FILTER Filter,
02518     _In_ LPCGUID EcpType,
02519      ULONG SizeOfContext,
02520     _In_ FSRTL_ALLOCATE_ECP_FLAGS Flags,
02521     _In_opt_ PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback,
02522     _In_ ULONG PoolTag,
02523     _Outptr_ PVOID *EcpContext);
02524 
02525 _IRQL_requires_max_(APC_LEVEL)
02526 VOID
02527 FLTAPI
02528 FltInitExtraCreateParameterLookasideList(
02529     _In_ PFLT_FILTER Filter,
02530     _Inout_ PVOID Lookaside,
02531     _In_ FSRTL_ECP_LOOKASIDE_FLAGS Flags,
02532     _In_ SIZE_T Size,
02533     _In_ ULONG Tag);
02534 
02535 _IRQL_requires_max_(APC_LEVEL)
02536 VOID
02537 FLTAPI
02538 FltDeleteExtraCreateParameterLookasideList(
02539     _In_ PFLT_FILTER Filter,
02540     _Inout_ PVOID Lookaside,
02541     _In_ FSRTL_ECP_LOOKASIDE_FLAGS Flags);
02542 
02543 _Must_inspect_result_
02544 _IRQL_requires_max_(APC_LEVEL)
02545 NTSTATUS
02546 FLTAPI
02547 FltAllocateExtraCreateParameterFromLookasideList(
02548     _In_ PFLT_FILTER Filter,
02549     _In_ LPCGUID EcpType,
02550     _In_ ULONG SizeOfContext,
02551     _In_ FSRTL_ALLOCATE_ECP_FLAGS Flags,
02552     _In_opt_ PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback,
02553     _Inout_ PVOID LookasideList,
02554     _Outptr_ PVOID *EcpContext);
02555 
02556 _IRQL_requires_max_(APC_LEVEL)
02557 NTSTATUS
02558 FLTAPI
02559 FltInsertExtraCreateParameter(
02560     _In_ PFLT_FILTER Filter,
02561     _Inout_ PECP_LIST EcpList,
02562     _Inout_ PVOID EcpContext);
02563 
02564 _IRQL_requires_max_(APC_LEVEL)
02565 NTSTATUS
02566 FLTAPI
02567 FltFindExtraCreateParameter(
02568     _In_ PFLT_FILTER Filter,
02569     _In_ PECP_LIST EcpList,
02570     _In_ LPCGUID EcpType,
02571     _Outptr_opt_ PVOID *EcpContext,
02572     _Out_opt_ ULONG *EcpContextSize);
02573 
02574 _IRQL_requires_max_(APC_LEVEL)
02575 NTSTATUS
02576 FLTAPI
02577 FltRemoveExtraCreateParameter(
02578     _In_ PFLT_FILTER Filter,
02579     _Inout_ PECP_LIST EcpList,
02580     _In_ LPCGUID EcpType,
02581     _Outptr_ PVOID *EcpContext,
02582     _Out_opt_ ULONG *EcpContextSize);
02583 
02584 _IRQL_requires_max_(APC_LEVEL)
02585 VOID
02586 FLTAPI
02587 FltFreeExtraCreateParameterList(
02588     _In_ PFLT_FILTER Filter,
02589     _In_ PECP_LIST EcpList);
02590 
02591 _IRQL_requires_max_(APC_LEVEL)
02592 VOID
02593 FLTAPI
02594 FltFreeExtraCreateParameter(
02595     _In_ PFLT_FILTER Filter,
02596     _In_ PVOID EcpContext);
02597 
02598 _IRQL_requires_max_(APC_LEVEL)
02599 NTSTATUS
02600 FLTAPI
02601 FltGetEcpListFromCallbackData(
02602     _In_ PFLT_FILTER Filter,
02603     _In_ PFLT_CALLBACK_DATA CallbackData,
02604     _Outptr_result_maybenull_ PECP_LIST *EcpList);
02605 
02606 _IRQL_requires_max_(APC_LEVEL)
02607 NTSTATUS
02608 FLTAPI
02609 FltSetEcpListIntoCallbackData(
02610     _In_ PFLT_FILTER Filter,
02611     _In_ PFLT_CALLBACK_DATA CallbackData,
02612     _In_ PECP_LIST EcpList);
02613 
02614 _IRQL_requires_max_(APC_LEVEL)
02615 NTSTATUS
02616 FLTAPI
02617 FltGetNextExtraCreateParameter(
02618     _In_ PFLT_FILTER Filter,
02619     _In_ PECP_LIST EcpList,
02620     _In_opt_ PVOID CurrentEcpContext,
02621     _Out_opt_ LPGUID NextEcpType,
02622     _Outptr_opt_ PVOID *NextEcpContext,
02623     _Out_opt_ ULONG *NextEcpContextSize);
02624 
02625 _IRQL_requires_max_(APC_LEVEL)
02626 VOID
02627 FLTAPI
02628 FltAcknowledgeEcp(
02629     _In_ PFLT_FILTER Filter,
02630     _In_ PVOID EcpContext);
02631 
02632 _IRQL_requires_max_(APC_LEVEL)
02633 BOOLEAN
02634 FLTAPI
02635 FltIsEcpAcknowledged(
02636     _In_ PFLT_FILTER Filter,
02637     _In_ PVOID EcpContext);
02638 
02639 _IRQL_requires_max_(APC_LEVEL)
02640 BOOLEAN
02641 FLTAPI
02642 FltIsEcpFromUserMode(
02643     _In_ PFLT_FILTER Filter,
02644     _In_ PVOID EcpContext);
02645 
02646 _IRQL_requires_max_(DISPATCH_LEVEL)
02647 NTSTATUS
02648 FLTAPI
02649 FltRetrieveIoPriorityInfo(
02650     _In_opt_ PFLT_CALLBACK_DATA Data,
02651     _In_opt_ PFILE_OBJECT FileObject,
02652     _In_opt_ PETHREAD Thread,
02653     _Inout_ PIO_PRIORITY_INFO PriorityInfo);
02654 
02655 _IRQL_requires_max_(DISPATCH_LEVEL)
02656 NTSTATUS
02657 FLTAPI
02658 FltApplyPriorityInfoThread(
02659     _In_ PIO_PRIORITY_INFO InputPriorityInfo,
02660     _Out_opt_ PIO_PRIORITY_INFO OutputPriorityInfo,
02661     _In_ PETHREAD Thread);
02662 
02663 _IRQL_requires_max_(DISPATCH_LEVEL)
02664 IO_PRIORITY_HINT
02665 FLTAPI
02666 FltGetIoPriorityHint(
02667     _In_ PFLT_CALLBACK_DATA Data);
02668 
02669 _IRQL_requires_max_(DISPATCH_LEVEL)
02670 IO_PRIORITY_HINT
02671 FLTAPI
02672 FltGetIoPriorityHintFromCallbackData(
02673     _In_ PFLT_CALLBACK_DATA Data);
02674 
02675 _IRQL_requires_max_(DISPATCH_LEVEL)
02676 NTSTATUS
02677 FLTAPI
02678 FltSetIoPriorityHintIntoCallbackData(
02679     _In_ PFLT_CALLBACK_DATA Data,
02680     _In_ IO_PRIORITY_HINT PriorityHint);
02681 
02682 _IRQL_requires_max_(DISPATCH_LEVEL)
02683 IO_PRIORITY_HINT
02684 FLTAPI
02685 FltGetIoPriorityHintFromFileObject(
02686     _In_ PFILE_OBJECT FileObject);
02687 
02688 _Must_inspect_result_
02689 _IRQL_requires_max_(DISPATCH_LEVEL)
02690 NTSTATUS
02691 FLTAPI
02692 FltSetIoPriorityHintIntoFileObject(
02693     _In_ PFILE_OBJECT FileObject,
02694     _In_ IO_PRIORITY_HINT PriorityHint);
02695 
02696 _IRQL_requires_max_(DISPATCH_LEVEL)
02697 IO_PRIORITY_HINT
02698 FLTAPI
02699 FltGetIoPriorityHintFromThread(
02700     _In_ PETHREAD Thread);
02701 
02702 _IRQL_requires_max_(DISPATCH_LEVEL)
02703 NTSTATUS
02704 FLTAPI
02705 FltSetIoPriorityHintIntoThread(
02706     _In_ PETHREAD Thread,
02707     _In_ IO_PRIORITY_HINT PriorityHint);
02708 
02709 #endif /* FLT_MGR_LONGHORN */
02710 
02711 #if FLT_MGR_WIN7
02712 
02713 _Must_inspect_result_
02714 _IRQL_requires_max_(APC_LEVEL)
02715 NTSTATUS
02716 FLTAPI
02717 FltAllocateCallbackDataEx(
02718     _In_ PFLT_INSTANCE Instance,
02719     _In_opt_ PFILE_OBJECT FileObject,
02720     _In_ FLT_ALLOCATE_CALLBACK_DATA_FLAGS Flags,
02721     _Outptr_ PFLT_CALLBACK_DATA *RetNewCallbackData);
02722 
02723 _Must_inspect_result_
02724 _IRQL_requires_max_(DPC_LEVEL)
02725 PVOID
02726 FLTAPI
02727 FltGetNewSystemBufferAddress(
02728     _In_ PFLT_CALLBACK_DATA CallbackData);
02729 
02730 _Must_inspect_result_
02731 _IRQL_requires_max_(APC_LEVEL)
02732 FLT_PREOP_CALLBACK_STATUS
02733 FLTAPI
02734 FltCheckOplockEx(
02735     _In_ POPLOCK Oplock,
02736     _In_ PFLT_CALLBACK_DATA CallbackData,
02737     _In_ ULONG Flags,
02738     _In_opt_ PVOID Context,
02739     _In_opt_ PFLTOPLOCK_WAIT_COMPLETE_ROUTINE WaitCompletionRoutine,
02740     _In_opt_ PFLTOPLOCK_PREPOST_CALLBACKDATA_ROUTINE PrePostCallbackDataRoutine);
02741 
02742 _IRQL_requires_max_(APC_LEVEL)
02743 BOOLEAN
02744 FLTAPI
02745 FltCurrentOplock(
02746     _In_ POPLOCK Oplock);
02747 
02748 _IRQL_requires_max_(APC_LEVEL)
02749 BOOLEAN
02750 FLTAPI
02751 FltCurrentOplockH(
02752     _In_ POPLOCK Oplock);
02753 
02754 _IRQL_requires_max_(APC_LEVEL)
02755 FLT_PREOP_CALLBACK_STATUS
02756 FLTAPI
02757 FltOplockBreakH(
02758     _In_ POPLOCK Oplock,
02759     _In_ PFLT_CALLBACK_DATA CallbackData,
02760     _In_ ULONG Flags,
02761     _In_opt_ PVOID Context,
02762     _In_opt_ PFLTOPLOCK_WAIT_COMPLETE_ROUTINE WaitCompletionRoutine,
02763     _In_opt_ PFLTOPLOCK_PREPOST_CALLBACKDATA_ROUTINE PrePostCallbackDataRoutine);
02764 
02765 _IRQL_requires_max_(APC_LEVEL)
02766 FLT_PREOP_CALLBACK_STATUS
02767 FLTAPI
02768 FltOplockBreakToNone(
02769     _In_ POPLOCK Oplock,
02770     _In_ PFLT_CALLBACK_DATA CallbackData,
02771     _In_opt_ PVOID Context,
02772     _In_opt_ PFLTOPLOCK_WAIT_COMPLETE_ROUTINE WaitCompletionRoutine,
02773     _In_opt_ PFLTOPLOCK_PREPOST_CALLBACKDATA_ROUTINE PrePostCallbackDataRoutine);
02774 
02775 _IRQL_requires_max_(APC_LEVEL)
02776 FLT_PREOP_CALLBACK_STATUS
02777 FLTAPI
02778 FltOplockBreakToNoneEx(
02779     _In_ POPLOCK Oplock,
02780     _In_ PFLT_CALLBACK_DATA CallbackData,
02781     _In_ ULONG Flags,
02782     _In_opt_ PVOID Context,
02783     _In_opt_ PFLTOPLOCK_WAIT_COMPLETE_ROUTINE WaitCompletionRoutine,
02784     _In_opt_ PFLTOPLOCK_PREPOST_CALLBACKDATA_ROUTINE PrePostCallbackDataRoutine);
02785 
02786 _IRQL_requires_max_(APC_LEVEL)
02787 BOOLEAN
02788 FLTAPI
02789 FltOplockIsSharedRequest(
02790     _In_ PFLT_CALLBACK_DATA CallbackData);
02791 
02792 _Must_inspect_result_
02793 _IRQL_requires_max_(APC_LEVEL)
02794 FLT_PREOP_CALLBACK_STATUS
02795 FLTAPI
02796 FltOplockFsctrlEx(
02797     _In_ POPLOCK Oplock,
02798     _In_ PFLT_CALLBACK_DATA CallbackData,
02799     _In_ ULONG OpenCount,
02800     _In_ ULONG Flags);
02801 
02802 BOOLEAN
02803 FLTAPI
02804 FltOplockKeysEqual(
02805     _In_opt_ PFILE_OBJECT Fo1,
02806     _In_opt_ PFILE_OBJECT Fo2);
02807 
02808 _Must_inspect_result_
02809 _IRQL_requires_max_(APC_LEVEL)
02810 NTSTATUS
02811 FLTAPI
02812 FltGetRequestorSessionId(
02813     _In_ PFLT_CALLBACK_DATA CallbackData,
02814     _Out_ PULONG SessionId);
02815 
02816 _IRQL_requires_max_(DISPATCH_LEVEL)
02817 NTSTATUS
02818 FLTAPI
02819 FltAdjustDeviceStackSizeForIoRedirection(
02820     _In_ PFLT_INSTANCE SourceInstance,
02821     _In_ PFLT_INSTANCE TargetInstance,
02822     _Out_opt_ PBOOLEAN SourceDeviceStackSizeModified);
02823 
02824 _IRQL_requires_max_(DISPATCH_LEVEL)
02825 NTSTATUS
02826 FLTAPI
02827 FltIsIoRedirectionAllowed(
02828     _In_ PFLT_INSTANCE SourceInstance,
02829     _In_ PFLT_INSTANCE TargetInstance,
02830     _Out_ PBOOLEAN RedirectionAllowed);
02831 
02832 _IRQL_requires_max_(DISPATCH_LEVEL)
02833 NTSTATUS
02834 FLTAPI
02835 FltIsIoRedirectionAllowedForOperation(
02836     _In_ PFLT_CALLBACK_DATA Data,
02837     _In_ PFLT_INSTANCE TargetInstance,
02838     _Out_ PBOOLEAN RedirectionAllowedThisIo,
02839     _Out_opt_ PBOOLEAN RedirectionAllowedAllIo);
02840 
02841 #endif /* FLT_MGR_WIN7 */
02842 
02843 #endif /* FLT_MGR_BASELINE */
02844 
02845 #ifdef __cplusplus
02846 } /* extern "C" */
02847 #endif
02848 
02849 #endif /* __FLTKERNEL__ */

Generated on Sat May 26 2012 04:28:36 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.