Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenfltkernel.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
1.7.6.1
|