⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ctxproc.h

📁 文件系统过滤驱动程序的框架
💻 H
字号:
/*++

Copyright (c) 1999 - 2002  Microsoft Corporation

Module Name:

    CtxProc.h

Abstract:

    This is the header file defining the functions of the kernel mode
    filter driver implementing the context sample.


Environment:

    Kernel mode


--*/


//
//  Functions implemented in operations.c
//

FLT_PREOP_CALLBACK_STATUS
CtxPreCreate (
    IN OUT PFLT_CALLBACK_DATA Cbd,
    IN PCFLT_RELATED_OBJECTS FltObjects,
    OUT PVOID *CompletionContext
    );

FLT_POSTOP_CALLBACK_STATUS
CtxPostCreate (
    IN OUT PFLT_CALLBACK_DATA Cbd,
    IN PCFLT_RELATED_OBJECTS FltObjects,
    IN PVOID CbdContext,
    IN FLT_POST_OPERATION_FLAGS Flags
    );

FLT_PREOP_CALLBACK_STATUS
CtxPreCleanup (
    IN OUT PFLT_CALLBACK_DATA Cbd,
    IN PCFLT_RELATED_OBJECTS FltObjects,
    OUT PVOID *CompletionContext
    );

FLT_PREOP_CALLBACK_STATUS
CtxPreClose (
    IN OUT PFLT_CALLBACK_DATA Cbd,
    IN PCFLT_RELATED_OBJECTS FltObjects,
    OUT PVOID *CompletionContext
    );


FLT_PREOP_CALLBACK_STATUS
CtxPreSetInfo (
    IN OUT PFLT_CALLBACK_DATA Cbd,
    IN PCFLT_RELATED_OBJECTS FltObjects,
    OUT PVOID *CompletionContext
    );

FLT_POSTOP_CALLBACK_STATUS
CtxPostSetInfo (
    IN OUT PFLT_CALLBACK_DATA Cbd,
    IN PCFLT_RELATED_OBJECTS FltObjects,
    IN PVOID CbdContext,
    IN FLT_POST_OPERATION_FLAGS Flags
    );


//
//  Functions implemented in context.c
//

NTSTATUS
CtxFindOrCreateStreamContext (
    IN PFLT_CALLBACK_DATA Cbd,
    IN BOOLEAN CreateIfNotFound,
    OUT PCTX_STREAM_CONTEXT *StreamContext,
    OUT PBOOLEAN ContextCreated OPTIONAL
    );

NTSTATUS
CtxCreateStreamContext (
    OUT PCTX_STREAM_CONTEXT *StreamContext
    );


NTSTATUS
CtxUpdateNameInStreamContext (
    IN PUNICODE_STRING DirectoryName,
    OUT PCTX_STREAM_CONTEXT StreamContext
    );

NTSTATUS
CtxCreateOrReplaceStreamHandleContext (
    IN PFLT_CALLBACK_DATA Cbd,
    IN BOOLEAN ReplaceIfExists,
    OUT PCTX_STREAMHANDLE_CONTEXT *StreamHandleContext,
    OUT PBOOLEAN ContextReplaced OPTIONAL
    );

NTSTATUS
CtxCreateStreamHandleContext (
    OUT PCTX_STREAMHANDLE_CONTEXT *StreamHandleContext
    );

NTSTATUS
CtxUpdateNameInStreamHandleContext (
    IN PUNICODE_STRING DirectoryName,
    OUT PCTX_STREAMHANDLE_CONTEXT StreamHandleContext
    );


//
//  Functions implemented in support.c
//

NTSTATUS
CtxAllocateUnicodeString (
    PUNICODE_STRING String
    );

VOID
CtxFreeUnicodeString (
    PUNICODE_STRING String
    );


//
//  Resource support
//

FORCEINLINE
PERESOURCE
CtxAllocateResource (
    VOID
    )
{

    return ExAllocatePoolWithTag( NonPagedPool,
                                  sizeof( ERESOURCE ),
                                  CTX_RESOURCE_TAG );
}

FORCEINLINE
VOID
CtxFreeResource (
    IN PERESOURCE Resource
    )
{

    ExFreePoolWithTag( Resource,
                       CTX_RESOURCE_TAG );
}

FORCEINLINE
VOID
CtxAcquireResourceExclusive (
    IN PERESOURCE Resource
    )
{
    ASSERT(KeGetCurrentIrql() <= APC_LEVEL);
    ASSERT(ExIsResourceAcquiredExclusiveLite(Resource) ||
           !ExIsResourceAcquiredSharedLite(Resource));

    KeEnterCriticalRegion();
    (VOID)ExAcquireResourceExclusiveLite( Resource, TRUE );
}

FORCEINLINE
VOID
CtxAcquireResourceShared (
    IN PERESOURCE Resource
    )
{
    ASSERT(KeGetCurrentIrql() <= APC_LEVEL);

    KeEnterCriticalRegion();
    (VOID)ExAcquireResourceSharedLite( Resource, TRUE );
}

FORCEINLINE
VOID
CtxReleaseResource (
    IN PERESOURCE Resource
    )
{
    ASSERT(KeGetCurrentIrql() <= APC_LEVEL);
    ASSERT(ExIsResourceAcquiredExclusiveLite(Resource) ||
           ExIsResourceAcquiredSharedLite(Resource));

    ExReleaseResourceLite(Resource);
    KeLeaveCriticalRegion();
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -