亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ctxinit.c

?? miniFilter.rar所有框架代碼以及對應的PPT資料,可以直接拿來進行修改即可完成各種驅動,是你開發微軟新過濾構架驅動所必下資料
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*++

Copyright (c) 1999 - 2003  Microsoft Corporation

Module Name:

    ContextInit.c

Abstract:

    This is the main module of the kernel mode filter driver implementing
    the context sample.


Environment:

    Kernel mode


--*/

#include "pch.h"

//
//  Global variables
//

CTX_GLOBAL_DATA Globals;


//
//  Local function prototypes
//

NTSTATUS
DriverEntry (
    __in PDRIVER_OBJECT DriverObject,
    __in PUNICODE_STRING RegistryPath
    );

NTSTATUS
CtxUnload (
    __in FLT_FILTER_UNLOAD_FLAGS Flags
    );

VOID
CtxContextCleanup (
    __in PFLT_CONTEXT Context,
    __in FLT_CONTEXT_TYPE ContextType
    );

NTSTATUS
CtxInstanceSetup (
    __in PCFLT_RELATED_OBJECTS FltObjects,
    __in FLT_INSTANCE_SETUP_FLAGS Flags,
    __in DEVICE_TYPE VolumeDeviceType,
    __in FLT_FILESYSTEM_TYPE VolumeFilesystemType
    );

NTSTATUS
CtxInstanceQueryTeardown (
    __in PCFLT_RELATED_OBJECTS FltObjects,
    __in FLT_INSTANCE_QUERY_TEARDOWN_FLAGS Flags
    );

VOID
CtxInstanceTeardownStart (
    __in PCFLT_RELATED_OBJECTS FltObjects,
    __in FLT_INSTANCE_TEARDOWN_FLAGS Flags
    );

VOID
CtxInstanceTeardownComplete (
    __in PCFLT_RELATED_OBJECTS FltObjects,
    __in FLT_INSTANCE_TEARDOWN_FLAGS Flags
    );

#if DBG

VOID
CtxInitializeDebugLevel (
    __in PUNICODE_STRING RegistryPath
    );

#endif

//
//  Assign text sections for each routine.
//

#ifdef ALLOC_PRAGMA
#pragma alloc_text(INIT, DriverEntry)

#if DBG
#pragma alloc_text(INIT, CtxInitializeDebugLevel)
#endif

#pragma alloc_text(PAGE, CtxUnload)
#pragma alloc_text(PAGE, CtxContextCleanup)
#pragma alloc_text(PAGE, CtxInstanceSetup)
#pragma alloc_text(PAGE, CtxInstanceQueryTeardown)
#pragma alloc_text(PAGE, CtxInstanceTeardownStart)
#pragma alloc_text(PAGE, CtxInstanceTeardownComplete)
#endif


//
//  Filter driver initialization and unload routines
//

NTSTATUS
DriverEntry (
    __in PDRIVER_OBJECT DriverObject,
    __in PUNICODE_STRING RegistryPath
    )
/*++

Routine Description:

    This is the initialization routine for this filter driver. It registers
    itself with the filter manager and initializes all its global data structures.

Arguments:

    DriverObject - Pointer to driver object created by the system to
        represent this driver.

    RegistryPath - Unicode string identifying where the parameters for this
        driver are located in the registry.

Return Value:

    Returns STATUS_SUCCESS.

--*/
{
    NTSTATUS status;

    //
    //  Filters callback routines
    //

    FLT_OPERATION_REGISTRATION callbacks[] = {

        { IRP_MJ_CREATE,
          FLTFL_OPERATION_REGISTRATION_SKIP_PAGING_IO,
          CtxPreCreate,
          CtxPostCreate },

        { IRP_MJ_CLEANUP,
          FLTFL_OPERATION_REGISTRATION_SKIP_PAGING_IO,
          CtxPreCleanup,
          NULL },

        { IRP_MJ_CLOSE,
          FLTFL_OPERATION_REGISTRATION_SKIP_PAGING_IO,
          CtxPreClose,
          NULL },

        { IRP_MJ_SET_INFORMATION,
          FLTFL_OPERATION_REGISTRATION_SKIP_PAGING_IO,
          CtxPreSetInfo,
          CtxPostSetInfo },

        { IRP_MJ_OPERATION_END }
    };

    const FLT_CONTEXT_REGISTRATION contextRegistration[] = {

        { FLT_INSTANCE_CONTEXT,
          0,
          CtxContextCleanup,
          CTX_INSTANCE_CONTEXT_SIZE,
          CTX_INSTANCE_CONTEXT_TAG },

        { FLT_FILE_CONTEXT,
          0,
          CtxContextCleanup,
          CTX_FILE_CONTEXT_SIZE,
          CTX_FILE_CONTEXT_TAG },

        { FLT_STREAM_CONTEXT,
          0,
          CtxContextCleanup,
          CTX_STREAM_CONTEXT_SIZE,
          CTX_STREAM_CONTEXT_TAG },

        { FLT_STREAMHANDLE_CONTEXT,
          0,
          CtxContextCleanup,
          CTX_STREAMHANDLE_CONTEXT_SIZE,
          CTX_STREAMHANDLE_CONTEXT_TAG },

        { FLT_CONTEXT_END }
    };

    //
    // Filters registration data structure
    //

    FLT_REGISTRATION filterRegistration = {

        sizeof( FLT_REGISTRATION ),                     //  Size
        FLT_REGISTRATION_VERSION,                       //  Version
        0,                                              //  Flags
        contextRegistration,                            //  Context
        callbacks,                                      //  Operation callbacks
        CtxUnload,                                      //  Filters unload routine
        CtxInstanceSetup,                               //  InstanceSetup routine
        CtxInstanceQueryTeardown,                       //  InstanceQueryTeardown routine
        CtxInstanceTeardownStart,                       //  InstanceTeardownStart routine
        CtxInstanceTeardownComplete,                    //  InstanceTeardownComplete routine
        NULL, NULL, NULL                                //  Unused naming support callbacks
    };


    RtlZeroMemory( &Globals, sizeof( Globals ) );

#if DBG

    //
    //  Initialize global debug level
    //

    CtxInitializeDebugLevel( RegistryPath );

#else

    UNREFERENCED_PARAMETER( RegistryPath );

#endif

    DebugTrace( DEBUG_TRACE_LOAD_UNLOAD,
                ("[Ctx]: Driver being loaded\n") );



    //
    //  Register with the filter manager
    //

    status = FltRegisterFilter( DriverObject,
                                &filterRegistration,
                                &Globals.Filter );

    if (!NT_SUCCESS( status )) {

        return status;
    }

    //
    //  Start filtering I/O
    //

    status = FltStartFiltering( Globals.Filter );

    if (!NT_SUCCESS( status )) {

        FltUnregisterFilter( Globals.Filter );
    }

    DebugTrace( DEBUG_TRACE_LOAD_UNLOAD,
                ("[Ctx]: Driver loaded complete (Status = 0x%08X)\n",
                status) );

    return status;
}

#if DBG

VOID
CtxInitializeDebugLevel (
    __in PUNICODE_STRING RegistryPath
    )
/*++

Routine Description:

    This routine tries to read the filter DebugLevel parameter from
    the registry.  This value will be found in the registry location
    indicated by the RegistryPath passed in.

Arguments:

    RegistryPath - The path key passed to the driver during DriverEntry.

Return Value:

    None.

--*/
{
    OBJECT_ATTRIBUTES attributes;
    HANDLE driverRegKey;
    NTSTATUS status;
    ULONG resultLength;
    UNICODE_STRING valueName;
    UCHAR buffer[sizeof( KEY_VALUE_PARTIAL_INFORMATION ) + sizeof( LONG )];

    Globals.DebugLevel = DEBUG_TRACE_ERROR;

    //
    //  Open the desired registry key
    //

    InitializeObjectAttributes( &attributes,
                                RegistryPath,
                                OBJ_CASE_INSENSITIVE,
                                NULL,
                                NULL );

    status = ZwOpenKey( &driverRegKey,
                        KEY_READ,
                        &attributes );

    if (NT_SUCCESS( status )) {

        //
        // Read the DebugFlags value from the registry.
        //

        RtlInitUnicodeString( &valueName, L"DebugLevel" );

        status = ZwQueryValueKey( driverRegKey,
                                  &valueName,
                                  KeyValuePartialInformation,
                                  buffer,
                                  sizeof(buffer),
                                  &resultLength );

        if (NT_SUCCESS( status )) {

            Globals.DebugLevel = *((PULONG) &(((PKEY_VALUE_PARTIAL_INFORMATION) buffer)->Data));
        }
    }

    //
    //  Close the registry entry
    //

    ZwClose( driverRegKey );
}

#endif

NTSTATUS
CtxUnload (
    __in FLT_FILTER_UNLOAD_FLAGS Flags
    )
/*++

Routine Description:

    This is the unload routine for this filter driver. This is called
    when the minifilter is about to be unloaded. We can fail this unload
    request if this is not a mandatory unloaded indicated by the Flags
    parameter.

Arguments:

    Flags - Indicating if this is a mandatory unload.

Return Value:

    Returns the final status of this operation.

--*/
{
    UNREFERENCED_PARAMETER( Flags );

    PAGED_CODE();

    DebugTrace( DEBUG_TRACE_LOAD_UNLOAD,
                ("[Ctx]: Unloading driver\n") );


    FltUnregisterFilter( Globals.Filter );
    Globals.Filter = NULL;

    return STATUS_SUCCESS;
}

VOID
CtxContextCleanup (
    __in PFLT_CONTEXT Context,
    __in FLT_CONTEXT_TYPE ContextType
    )
{
    PCTX_INSTANCE_CONTEXT instanceContext;
    PCTX_FILE_CONTEXT fileContext;
    PCTX_STREAM_CONTEXT streamContext;
    PCTX_STREAMHANDLE_CONTEXT streamHandleContext;

    PAGED_CODE();

    switch(ContextType) {

    case FLT_INSTANCE_CONTEXT:

        instanceContext = (PCTX_INSTANCE_CONTEXT) Context;

        DebugTrace( DEBUG_TRACE_INSTANCE_CONTEXT_OPERATIONS,
                    ("[Ctx]: Cleaning up instance context for volume %wZ (Context = %p)\n",
                     &instanceContext->VolumeName,
                     Context) );

        //
        //  Here the filter should free memory or synchronization objects allocated to
        //  objects within the instance context. The instance context itself should NOT
        //  be freed. It will be freed by Filter Manager when the ref count on the
        //  context falls to zero.
        //

        CtxFreeUnicodeString( &instanceContext->VolumeName );

        DebugTrace( DEBUG_TRACE_INSTANCE_CONTEXT_OPERATIONS,
                    ("[Ctx]: Instance context cleanup complete.\n") );

        break;


    case FLT_FILE_CONTEXT:

        fileContext = (PCTX_FILE_CONTEXT) Context;

        DebugTrace( DEBUG_TRACE_FILE_CONTEXT_OPERATIONS,
                    ("[Ctx]: Cleaning up file context for file %wZ (FileContext = %p)\n",
                     &fileContext->FileName,
                     fileContext) );


        //
        //  Free the file name
        //

        if (fileContext->FileName.Buffer != NULL) {

            CtxFreeUnicodeString(&fileContext->FileName);
        }

        DebugTrace( DEBUG_TRACE_FILE_CONTEXT_OPERATIONS,
                    ("[Ctx]: File context cleanup complete.\n") );

        break;

    case FLT_STREAM_CONTEXT:

        streamContext = (PCTX_STREAM_CONTEXT) Context;

        DebugTrace( DEBUG_TRACE_STREAM_CONTEXT_OPERATIONS,
                    ("[Ctx]: Cleaning up stream context for file %wZ (StreamContext = %p) \n\tCreateCount = %x \n\tCleanupCount = %x, \n\tCloseCount = %x\n",

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人动漫中文字幕| 亚洲福中文字幕伊人影院| 欧美精品乱人伦久久久久久| 91小视频在线观看| 成人va在线观看| 成人一级片在线观看| 高清国产一区二区| caoporen国产精品视频| 成人av电影观看| 成人黄色一级视频| 99精品欧美一区二区三区综合在线| 懂色av一区二区三区蜜臀| 成人午夜av电影| 色狠狠一区二区三区香蕉| 欧美性大战久久久久久久蜜臀 | 精品成a人在线观看| 久久综合狠狠综合久久激情| 国产女同互慰高潮91漫画| 欧美极品少妇xxxxⅹ高跟鞋| 国产精品国产自产拍高清av| 亚洲欧美日韩中文字幕一区二区三区 | 欧美精品电影在线播放| 日韩一区二区影院| 欧美国产一区二区在线观看| 国产精品二三区| 亚洲成人手机在线| 韩国女主播成人在线观看| 99久久综合99久久综合网站| 欧美日韩你懂的| 久久精品亚洲一区二区三区浴池 | 久久精品72免费观看| 国产成人综合亚洲91猫咪| 色乱码一区二区三区88| 日韩欧美国产三级电影视频| 日本一区二区不卡视频| 亚洲成a人片在线不卡一二三区| 韩国成人精品a∨在线观看| 一本色道综合亚洲| 精品国精品国产尤物美女| 中文字幕永久在线不卡| 日本va欧美va瓶| 91蝌蚪porny成人天涯| 欧美成人a∨高清免费观看| 亚洲精品视频自拍| 国产一区二区女| 91精品国产乱| 亚洲精品亚洲人成人网| 成人三级伦理片| 日韩精品一区国产麻豆| 亚洲一区二区三区精品在线| 国产黑丝在线一区二区三区| 日韩一区二区电影| 亚洲一二三专区| 99久久亚洲一区二区三区青草| 精品久久久久久综合日本欧美| 亚洲综合一区二区三区| av日韩在线网站| 亚洲理论在线观看| 韩国成人精品a∨在线观看| 91精品国产91久久久久久一区二区| 国产精品灌醉下药二区| 国产在线播精品第三| 欧美一卡在线观看| 日本成人在线不卡视频| 欧美天堂一区二区三区| 亚洲日本韩国一区| 99久久99精品久久久久久| 久久精品网站免费观看| 另类成人小视频在线| 欧美精品三级在线观看| 同产精品九九九| 欧美天天综合网| 亚洲成人激情av| 欧美精品在线观看一区二区| 亚洲电影一级黄| 欧美精品aⅴ在线视频| 丝袜亚洲另类欧美综合| 在线不卡一区二区| 男女性色大片免费观看一区二区| 欧美日韩精品一区二区三区四区| 亚洲成人一区二区| 91精品啪在线观看国产60岁| 午夜天堂影视香蕉久久| 91麻豆精品国产91| 国产在线精品一区二区不卡了| 欧美成人a视频| 国产v综合v亚洲欧| 亚洲人快播电影网| 欧美日韩中文另类| 日本三级亚洲精品| 国产欧美一区二区三区网站| 成人小视频免费观看| 亚洲精品国产a| 717成人午夜免费福利电影| 久久国产剧场电影| 国产精品沙发午睡系列990531| 成人综合在线观看| 亚洲国产精品自拍| wwww国产精品欧美| 99国产精品久久久久久久久久| 一区二区免费在线| 精品国产三级a在线观看| 成人久久视频在线观看| 亚洲电影你懂得| 久久久一区二区| 欧美色倩网站大全免费| 国产精品资源站在线| 椎名由奈av一区二区三区| 91麻豆精品国产自产在线观看一区 | www亚洲一区| 在线亚洲人成电影网站色www| 视频一区在线播放| 日本一二三不卡| 884aa四虎影成人精品一区| 高清不卡一二三区| 日本中文字幕一区二区有限公司| 国产日韩亚洲欧美综合| 欧美日韩国产a| 99久久综合狠狠综合久久| 免费成人美女在线观看| 亚洲精品国产无套在线观| 精品久久人人做人人爰| 欧美视频日韩视频在线观看| 国产在线一区二区| 一区二区三区四区在线| 26uuu色噜噜精品一区二区| 欧美亚洲国产一区在线观看网站| 极品美女销魂一区二区三区免费 | 老汉av免费一区二区三区| 亚洲欧美色图小说| 欧美激情在线看| 日韩小视频在线观看专区| 日本乱人伦一区| 99久久精品国产一区| 国产美女主播视频一区| 美国十次了思思久久精品导航| 一区二区欧美国产| 亚洲精品乱码久久久久久黑人 | 欧美色精品在线视频| av在线播放成人| fc2成人免费人成在线观看播放| 精品在线观看视频| 毛片一区二区三区| 欧美96一区二区免费视频| 亚洲午夜免费视频| 一区二区三区资源| 亚洲欧美日本韩国| 亚洲欧美激情视频在线观看一区二区三区 | 91精品国产综合久久久久久漫画| 色哦色哦哦色天天综合| 97精品视频在线观看自产线路二| 国产麻豆成人传媒免费观看| 久久精品国产第一区二区三区| 美腿丝袜一区二区三区| 蜜乳av一区二区三区| 激情综合五月婷婷| 国产一区二区不卡| www.性欧美| 91女人视频在线观看| 色婷婷综合激情| 欧美色图12p| 精品少妇一区二区三区在线播放| 日韩午夜在线观看视频| 精品国精品自拍自在线| 国产亚洲欧美一级| 亚洲欧洲成人精品av97| 一区二区视频在线| 日韩精品久久久久久| 韩国在线一区二区| a美女胸又www黄视频久久| 日本韩国欧美国产| 日韩欧美国产一区二区三区 | 亚洲成人福利片| 青青国产91久久久久久| 国产精品综合二区| 91浏览器在线视频| 日韩亚洲欧美综合| 国产精品久久免费看| 午夜婷婷国产麻豆精品| 国产一区二区伦理片| 色妞www精品视频| 日韩美女视频在线| 国产日产欧美一区二区三区| 亚洲码国产岛国毛片在线| 日韩成人免费电影| av一区二区三区在线| 911国产精品| 国产精品色在线| 麻豆精品视频在线| 91视频观看视频| 精品久久人人做人人爰| 一区二区三区中文字幕在线观看| 久久精品国产一区二区三| 91天堂素人约啪| 久久精品人人做| 日韩av一区二区在线影视| 99视频超级精品| 久久久久久一级片| 蜜臂av日日欢夜夜爽一区| 91美女视频网站|