📄 metadatamanagerproc.h
字号:
/*++
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 (
IN OUT PFLT_CALLBACK_DATA Cbd,
IN PCFLT_RELATED_OBJECTS FltObjects,
OUT PVOID *CompletionContext
);
FLT_POSTOP_CALLBACK_STATUS
FmmPostCreate (
IN OUT PFLT_CALLBACK_DATA Cbd,
IN PCFLT_RELATED_OBJECTS FltObjects,
IN PVOID CbdContext,
IN FLT_POST_OPERATION_FLAGS Flags
);
FLT_PREOP_CALLBACK_STATUS
FmmPreCleanup (
IN OUT PFLT_CALLBACK_DATA Cbd,
IN PCFLT_RELATED_OBJECTS FltObjects,
OUT PVOID *CompletionContext
);
FLT_POSTOP_CALLBACK_STATUS
FmmPostCleanup (
IN OUT PFLT_CALLBACK_DATA Cbd,
IN PCFLT_RELATED_OBJECTS FltObjects,
IN PVOID CompletionContext,
IN FLT_POST_OPERATION_FLAGS Flags
);
FLT_PREOP_CALLBACK_STATUS
FmmPreFSControl (
IN OUT PFLT_CALLBACK_DATA Cbd,
IN PCFLT_RELATED_OBJECTS FltObjects,
OUT PVOID *CompletionContext
);
FLT_POSTOP_CALLBACK_STATUS
FmmPostFSControl (
IN OUT PFLT_CALLBACK_DATA Cbd,
IN PCFLT_RELATED_OBJECTS FltObjects,
IN PVOID CompletionContext,
IN FLT_POST_OPERATION_FLAGS Flags
);
FLT_PREOP_CALLBACK_STATUS
FmmPreDeviceControl (
IN OUT PFLT_CALLBACK_DATA Cbd,
IN PCFLT_RELATED_OBJECTS FltObjects,
OUT PVOID *CompletionContext
);
FLT_POSTOP_CALLBACK_STATUS
FmmPostDeviceControl (
IN OUT PFLT_CALLBACK_DATA Cbd,
IN PCFLT_RELATED_OBJECTS FltObjects,
IN PVOID CbdContext,
IN FLT_POST_OPERATION_FLAGS Flags
);
FLT_PREOP_CALLBACK_STATUS
FmmPreShutdown (
IN OUT PFLT_CALLBACK_DATA Cbd,
IN PCFLT_RELATED_OBJECTS FltObjects,
OUT PVOID *CompletionContext
);
FLT_PREOP_CALLBACK_STATUS
FmmPrePnp (
IN OUT PFLT_CALLBACK_DATA Cbd,
IN PCFLT_RELATED_OBJECTS FltObjects,
OUT PVOID *CompletionContext
);
//
// Functions implemented in datastore.c
//
NTSTATUS
FmmOpenMetadata (
IN PFMM_INSTANCE_CONTEXT InstanceContext,
IN BOOLEAN CreateIfNotPresent
);
VOID
FmmCloseMetadata (
IN PFMM_INSTANCE_CONTEXT InstanceContext
);
NTSTATUS
FmmReleaseMetadataFileReferences (
IN OUT PFLT_CALLBACK_DATA Cbd
);
NTSTATUS
FmmReacquireMetadataFileReferences (
IN OUT PFLT_CALLBACK_DATA Cbd
);
NTSTATUS
FmmSetMetadataOpenTriggerFileObject (
IN OUT PFLT_CALLBACK_DATA Cbd
);
VOID
FmmBeginFileSystemOperation (
IN PFMM_INSTANCE_CONTEXT InstanceContext
);
VOID
FmmEndFileSystemOperation (
IN PFMM_INSTANCE_CONTEXT InstanceContext
);
//
// Functions implemented in support.c
//
NTSTATUS
FmmAllocateUnicodeString (
PUNICODE_STRING String
);
VOID
FmmFreeUnicodeString (
PUNICODE_STRING String
);
BOOLEAN
FmmTargetIsVolumeOpen (
IN PFLT_CALLBACK_DATA Cbd
);
//
// Lock primitives
//
FORCEINLINE
VOID
FmmAcquireResourceExclusive (
IN PERESOURCE Resource
)
{
ASSERT(KeGetCurrentIrql() <= APC_LEVEL);
ASSERT(ExIsResourceAcquiredExclusiveLite(Resource) ||
!ExIsResourceAcquiredSharedLite(Resource));
KeEnterCriticalRegion();
(VOID)ExAcquireResourceExclusiveLite( Resource, TRUE );
}
FORCEINLINE
VOID
FmmAcquireResourceShared (
IN PERESOURCE Resource
)
{
ASSERT(KeGetCurrentIrql() <= APC_LEVEL);
KeEnterCriticalRegion();
(VOID)ExAcquireResourceSharedLite( Resource, TRUE );
}
FORCEINLINE
VOID
FmmReleaseResource (
IN PERESOURCE Resource
)
{
ASSERT(KeGetCurrentIrql() <= DISPATCH_LEVEL);
ASSERT(ExIsResourceAcquiredExclusiveLite(Resource) ||
ExIsResourceAcquiredSharedLite(Resource));
ExReleaseResourceLite(Resource);
KeLeaveCriticalRegion();
}
FORCEINLINE
VOID
FmmTransferResourceOwnership (
IN PERESOURCE Resource,
IN PVOID OwnerPointer
)
{
ASSERT(KeGetCurrentIrql() <= DISPATCH_LEVEL);
ExSetResourceOwnerPointer( Resource, (PVOID) MAKE_RESOURCE_OWNER( OwnerPointer ) );
KeLeaveCriticalRegion();
}
FORCEINLINE
VOID
FmmReleaseResourceForOwner (
IN PERESOURCE Resource,
IN PVOID OwnerPointer
)
{
ASSERT(KeGetCurrentIrql() <= DISPATCH_LEVEL);
ExReleaseResourceForThreadLite( Resource, MAKE_RESOURCE_OWNER( OwnerPointer ) );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -