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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? ctxinit.c

?? 文件系統(tǒng)過(guò)濾驅(qū)動(dòng)程序的框架
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
/*++

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 (
    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_FILE_SYSTEM_CONTROL,
          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_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 (
    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 );

    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_STREAM_CONTEXT streamContext;    
    PCTX_STREAMHANDLE_CONTEXT streamHandleContext;    
    
    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_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",
                     &streamContext->FileName,
                     streamContext,
                     streamContext->CreateCount,
                     streamContext->CleanupCount,
                     streamContext->CloseCount) );        
            
        //
        //  Delete the resource and memory the memory allocated for the resource
        //
        
        if (streamContext->Resource != NULL) {
        
            ExDeleteResourceLite( streamContext->Resource );

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美日韩电影| 亚洲男人的天堂在线aⅴ视频| 成人在线综合网| 亚洲图片自拍偷拍| 国产三级一区二区| 欧美精选一区二区| 99久久久国产精品| 国内国产精品久久| 丝袜诱惑制服诱惑色一区在线观看| 中文在线一区二区| 精品国产精品一区二区夜夜嗨| 欧美视频完全免费看| 丁香一区二区三区| 蜜桃久久久久久久| 亚洲国产欧美另类丝袜| 日本一区二区三区dvd视频在线| 欧美一区二区人人喊爽| 91精品福利在线| 99久久精品国产一区二区三区| 久久超级碰视频| 日本大胆欧美人术艺术动态| 亚洲综合丝袜美腿| 亚洲色图.com| 国产精品色哟哟网站| 久久久亚洲高清| 日韩亚洲欧美中文三级| 欧美三级欧美一级| 色就色 综合激情| 99国产精品一区| 不卡视频在线看| 成人av资源网站| gogo大胆日本视频一区| 国产曰批免费观看久久久| 老司机一区二区| 秋霞午夜av一区二区三区| 午夜电影网亚洲视频| 亚洲国产综合91精品麻豆| 一区二区三区在线观看视频| 日韩一区中文字幕| 国产精品国产三级国产aⅴ原创| 久久免费美女视频| 国产午夜亚洲精品理论片色戒| 久久久久久夜精品精品免费| 精品国产免费久久| 久久精品一区二区三区不卡牛牛| 久久免费视频一区| 国产无人区一区二区三区| 国产日产欧产精品推荐色| 国产亚洲一区二区三区| 国产日韩欧美一区二区三区乱码 | 久久国产福利国产秒拍| 日韩中文字幕麻豆| 六月丁香婷婷久久| 国产精品一级黄| 国产91对白在线观看九色| 成人性视频免费网站| a4yy欧美一区二区三区| 91豆麻精品91久久久久久| 欧美日韩一区二区三区免费看| 在线电影欧美成精品| 亚洲精品在线免费观看视频| 国产午夜亚洲精品理论片色戒| 国产精品传媒视频| 亚洲一区二区av电影| 蜜臀va亚洲va欧美va天堂| 国产麻豆91精品| 91丨porny丨中文| 欧美日韩三级视频| 精品欧美乱码久久久久久1区2区| 久久综合久久久久88| 中文字幕在线观看一区二区| 亚洲一区成人在线| 麻豆成人综合网| 成人激情小说网站| 欧美日韩国产片| 国产视频一区在线观看| 亚洲精品国产a| 老司机精品视频在线| 99久久久久免费精品国产| 欧美老人xxxx18| 国产亚洲成av人在线观看导航 | 久久激情综合网| 成人性视频免费网站| 欧洲日韩一区二区三区| 日韩女优视频免费观看| 中文字幕第一区第二区| 天堂av在线一区| 白白色 亚洲乱淫| 91精品欧美久久久久久动漫| 欧美激情一二三区| 日韩av一级电影| 色综合久久综合中文综合网| 精品乱人伦一区二区三区| 亚洲欧美色一区| 国产一区二区视频在线| 欧美视频三区在线播放| 欧美高清在线视频| 另类小说综合欧美亚洲| 欧美中文字幕一二三区视频| 欧美精品一区二区蜜臀亚洲| 亚洲国产sm捆绑调教视频 | 狠狠色综合日日| 在线观看91视频| 日本一区二区三区四区在线视频| 日日夜夜一区二区| 91视频观看免费| 久久综合九色欧美综合狠狠| 爽好久久久欧美精品| av网站一区二区三区| 精品国产凹凸成av人导航| 亚洲国产日产av| 91丨porny丨在线| 国产欧美一区在线| 国产美女在线精品| 日韩午夜av一区| 日本不卡免费在线视频| 色国产综合视频| 中文字幕五月欧美| 成人av在线网站| 国产欧美精品一区二区三区四区| 日韩va亚洲va欧美va久久| 日本精品裸体写真集在线观看| 国产女人水真多18毛片18精品视频| 奇米精品一区二区三区在线观看 | 欧美亚洲综合网| 一区二区三区在线视频观看| 波多野结衣精品在线| 国产精品免费免费| 成人免费看片app下载| 亚洲国产高清在线观看视频| 国产成人免费在线视频| 久久嫩草精品久久久久| 国产一区二区三区日韩| 26uuu国产在线精品一区二区| 美腿丝袜在线亚洲一区| 日韩视频在线一区二区| 奇米影视在线99精品| 日韩一级高清毛片| 久久精品国产秦先生| 精品久久久久久久久久久久包黑料 | 亚洲一区国产视频| 欧美色大人视频| 午夜视黄欧洲亚洲| 欧美电影一区二区| 久久激情五月激情| 欧美精品一区二区三| 国产91对白在线观看九色| 国产精品女主播av| 91在线国内视频| 艳妇臀荡乳欲伦亚洲一区| 欧美日韩一区二区三区四区| 日韩1区2区日韩1区2区| 日韩欧美高清dvd碟片| 国产麻豆视频一区二区| 国产精品美女久久久久久久久久久 | 久久99九九99精品| 国产日韩av一区二区| 91网站最新网址| 日韩精品亚洲一区二区三区免费| 欧美一区二区三区爱爱| 国产九色sp调教91| 国产精品短视频| 在线中文字幕一区二区| 免费一级片91| 亚洲国产精品成人综合 | 在线播放/欧美激情| 久久精品国产一区二区三区免费看| 久久一夜天堂av一区二区三区| 高清在线不卡av| 亚洲乱码精品一二三四区日韩在线| 欧美日韩中文另类| 精品一区免费av| 亚洲欧美日韩久久| 91精品国产麻豆国产自产在线 | 免费高清成人在线| 国产精品久久久久久久蜜臀| 欧美日韩视频第一区| 国产尤物一区二区| 亚洲一区二区三区免费视频| 精品国一区二区三区| 一本色道久久加勒比精品 | 国产不卡高清在线观看视频| 亚洲综合一区二区三区| 精品国产凹凸成av人网站| 色拍拍在线精品视频8848| 久久精品国产亚洲一区二区三区 | 亚洲一级二级在线| 日韩欧美国产综合一区 | 中文字幕一区二区三区在线观看| 欧美精品少妇一区二区三区| 成人app在线| 日本麻豆一区二区三区视频| 中文字幕五月欧美| 精品理论电影在线观看 | 狠狠色狠狠色综合系列| 亚洲免费观看在线视频| 国产午夜精品一区二区三区四区 | 精品日韩一区二区三区| 91蜜桃网址入口| 国产精品综合av一区二区国产馆|