summaryrefslogtreecommitdiff
path: root/filesys/miniFilter/MetadataManager/MetadataManagerProc.h
diff options
context:
space:
mode:
authorDave Wilson <[email protected]>2015-03-17 19:50:07 -0700
committerDave Wilson <[email protected]>2015-03-17 19:50:07 -0700
commit97cf5197cf5b882b2c689d8dc2b555f2edf8f418 (patch)
tree46f3701832d70b420eb0fc0eb93261f9da45db3f /filesys/miniFilter/MetadataManager/MetadataManagerProc.h
parentef1905bf1e8825bb31120dfb27e0daf3154d859a (diff)
Initial publish
Diffstat (limited to 'filesys/miniFilter/MetadataManager/MetadataManagerProc.h')
-rw-r--r--filesys/miniFilter/MetadataManager/MetadataManagerProc.h255
1 files changed, 255 insertions, 0 deletions
diff --git a/filesys/miniFilter/MetadataManager/MetadataManagerProc.h b/filesys/miniFilter/MetadataManager/MetadataManagerProc.h
new file mode 100644
index 00000000..bee71cd7
--- /dev/null
+++ b/filesys/miniFilter/MetadataManager/MetadataManagerProc.h
@@ -0,0 +1,255 @@
+/*++
+
+Copyright (c) 1999 - 2002 Microsoft Corporation
+
+Module Name:
+
+ MetadataManagerProc.h
+
+Abstract:
+
+ This is the header file defining the functions of the kernel mode
+ filter driver implementing filter metadata management.
+
+
+Environment:
+
+ Kernel mode
+
+
+--*/
+
+#define MAKE_RESOURCE_OWNER(X) (((ERESOURCE_THREAD)(X)) | 0x3)
+
+//
+// Functions implemented in operations.c
+//
+
+FLT_PREOP_CALLBACK_STATUS
+FmmPreCreate (
+ _Inout_ PFLT_CALLBACK_DATA Cbd,
+ _In_ PCFLT_RELATED_OBJECTS FltObjects,
+ _Flt_CompletionContext_Outptr_ PVOID *CompletionContext
+ );
+
+FLT_POSTOP_CALLBACK_STATUS
+FmmPostCreate (
+ _Inout_ PFLT_CALLBACK_DATA Cbd,
+ _In_ PCFLT_RELATED_OBJECTS FltObjects,
+ _In_ PVOID CbdContext,
+ _In_ FLT_POST_OPERATION_FLAGS Flags
+ );
+
+FLT_PREOP_CALLBACK_STATUS
+FmmPreCleanup (
+ _Inout_ PFLT_CALLBACK_DATA Cbd,
+ _In_ PCFLT_RELATED_OBJECTS FltObjects,
+ _Flt_CompletionContext_Outptr_ PVOID *CompletionContext
+ );
+
+FLT_POSTOP_CALLBACK_STATUS
+FmmPostCleanup (
+ _Inout_ PFLT_CALLBACK_DATA Cbd,
+ _In_ PCFLT_RELATED_OBJECTS FltObjects,
+ _Inout_ PVOID CompletionContext,
+ _In_ FLT_POST_OPERATION_FLAGS Flags
+ );
+
+
+FLT_PREOP_CALLBACK_STATUS
+FmmPreFSControl (
+ _Inout_ PFLT_CALLBACK_DATA Cbd,
+ _In_ PCFLT_RELATED_OBJECTS FltObjects,
+ _Flt_CompletionContext_Outptr_ PVOID *CompletionContext
+ );
+
+FLT_POSTOP_CALLBACK_STATUS
+FmmPostFSControl (
+ _Inout_ PFLT_CALLBACK_DATA Cbd,
+ _In_ PCFLT_RELATED_OBJECTS FltObjects,
+ _In_ PVOID CompletionContext,
+ _In_ FLT_POST_OPERATION_FLAGS Flags
+ );
+
+FLT_PREOP_CALLBACK_STATUS
+FmmPreDeviceControl (
+ _Inout_ PFLT_CALLBACK_DATA Cbd,
+ _In_ PCFLT_RELATED_OBJECTS FltObjects,
+ _Flt_CompletionContext_Outptr_ PVOID *CompletionContext
+ );
+
+FLT_POSTOP_CALLBACK_STATUS
+FmmPostDeviceControl (
+ _Inout_ PFLT_CALLBACK_DATA Cbd,
+ _In_ PCFLT_RELATED_OBJECTS FltObjects,
+ _In_ PVOID CbdContext,
+ _In_ FLT_POST_OPERATION_FLAGS Flags
+ );
+
+FLT_PREOP_CALLBACK_STATUS
+FmmPreShutdown (
+ _Inout_ PFLT_CALLBACK_DATA Cbd,
+ _In_ PCFLT_RELATED_OBJECTS FltObjects,
+ _Flt_CompletionContext_Outptr_ PVOID *CompletionContext
+ );
+
+FLT_PREOP_CALLBACK_STATUS
+FmmPrePnp (
+ _Inout_ PFLT_CALLBACK_DATA Cbd,
+ _In_ PCFLT_RELATED_OBJECTS FltObjects,
+ _Flt_CompletionContext_Outptr_ PVOID *CompletionContext
+ );
+
+FLT_POSTOP_CALLBACK_STATUS
+FmmPostPnp (
+ _Inout_ PFLT_CALLBACK_DATA Cbd,
+ _In_ PCFLT_RELATED_OBJECTS FltObjects,
+ _In_ PVOID CbdContext,
+ _In_ FLT_POST_OPERATION_FLAGS Flags
+ );
+
+//
+// Functions implemented in datastore.c
+//
+
+_Requires_lock_held_(_Global_critical_region_)
+_Requires_lock_held_(InstanceContext->MetadataResource)
+_IRQL_requires_max_(PASSIVE_LEVEL)
+NTSTATUS
+FmmOpenMetadata (
+ _In_ PFMM_INSTANCE_CONTEXT InstanceContext,
+ _In_ BOOLEAN CreateIfNotPresent
+ );
+
+_Requires_lock_held_(_Global_critical_region_)
+_Requires_lock_held_(InstanceContext->MetadataResource)
+_IRQL_requires_max_(PASSIVE_LEVEL)
+VOID
+FmmCloseMetadata (
+ _In_ PFMM_INSTANCE_CONTEXT InstanceContext
+ );
+
+NTSTATUS
+FmmReleaseMetadataFileReferences (
+ _Inout_ PFLT_CALLBACK_DATA Cbd
+ );
+
+NTSTATUS
+FmmReacquireMetadataFileReferences (
+ _Inout_ PFLT_CALLBACK_DATA Cbd
+ );
+
+NTSTATUS
+FmmSetMetadataOpenTriggerFileObject (
+ _Inout_ PFLT_CALLBACK_DATA Cbd
+ );
+
+_Releases_lock_(_Global_critical_region_)
+_Requires_lock_held_(InstanceContext->MetadataResource)
+_Releases_lock_(InstanceContext->MetadataResource)
+_IRQL_requires_max_(APC_LEVEL)
+VOID
+FmmBeginFileSystemOperation (
+ IN PFMM_INSTANCE_CONTEXT InstanceContext
+ );
+
+_Acquires_lock_(_Global_critical_region_)
+_Requires_lock_not_held_(InstanceContext->MetadataResource)
+_Acquires_exclusive_lock_(InstanceContext->MetadataResource)
+_IRQL_requires_max_(APC_LEVEL)
+VOID
+FmmEndFileSystemOperation (
+ IN PFMM_INSTANCE_CONTEXT InstanceContext
+ );
+
+
+#if VERIFY_METADATA_OPENED
+
+NTSTATUS
+FmmIsMetadataOpen (
+ _Inout_ PFLT_CALLBACK_DATA Cbd,
+ _Out_ BOOLEAN* MetadataOpen
+ );
+
+#endif
+
+//
+// Functions implemented in support.c
+//
+
+NTSTATUS
+FmmAllocateUnicodeString (
+ _Inout_ PUNICODE_STRING String
+ );
+
+VOID
+FmmFreeUnicodeString (
+ _Inout_ PUNICODE_STRING String
+ );
+
+BOOLEAN
+FmmTargetIsVolumeOpen (
+ _In_ PFLT_CALLBACK_DATA Cbd
+ );
+
+NTSTATUS
+FmmIsImplicitVolumeLock(
+ _In_ PFLT_CALLBACK_DATA Cbd,
+ _Out_ PBOOLEAN IsLock
+ );
+
+//
+// Lock primitives
+//
+
+_Acquires_lock_(_Global_critical_region_)
+_IRQL_requires_max_(APC_LEVEL)
+FORCEINLINE
+VOID
+FmmAcquireResourceExclusive (
+ _Inout_ _Requires_lock_not_held_(*_Curr_) _Acquires_exclusive_lock_(*_Curr_)
+ PERESOURCE Resource
+ )
+{
+ FLT_ASSERT(KeGetCurrentIrql() <= APC_LEVEL);
+ FLT_ASSERT(ExIsResourceAcquiredExclusiveLite(Resource) ||
+ !ExIsResourceAcquiredSharedLite(Resource));
+
+ KeEnterCriticalRegion();
+ (VOID)ExAcquireResourceExclusiveLite( Resource, TRUE );
+}
+
+_Acquires_lock_(_Global_critical_region_)
+_IRQL_requires_max_(APC_LEVEL)
+FORCEINLINE
+VOID
+FmmAcquireResourceShared (
+ _Inout_ _Requires_lock_not_held_(*_Curr_) _Acquires_shared_lock_(*_Curr_)
+ PERESOURCE Resource
+ )
+{
+ FLT_ASSERT(KeGetCurrentIrql() <= APC_LEVEL);
+
+ KeEnterCriticalRegion();
+ (VOID)ExAcquireResourceSharedLite( Resource, TRUE );
+}
+
+_Releases_lock_(_Global_critical_region_)
+_IRQL_requires_max_(APC_LEVEL)
+FORCEINLINE
+VOID
+FmmReleaseResource (
+ _Inout_ _Requires_lock_held_(*_Curr_) _Releases_lock_(*_Curr_)
+ PERESOURCE Resource
+ )
+{
+ FLT_ASSERT(KeGetCurrentIrql() <= DISPATCH_LEVEL);
+ FLT_ASSERT(ExIsResourceAcquiredExclusiveLite(Resource) ||
+ ExIsResourceAcquiredSharedLite(Resource));
+
+ ExReleaseResourceLite(Resource);
+ KeLeaveCriticalRegion();
+}
+
+
+