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

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

?? datastore.c

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

Copyright (c) 2002 - 2003  Microsoft Corporation

Module Name:

    datastore.c

Abstract:

    This module contains routines that provide support for storage and
    retrieval of the filter metadata manager filter metadata.


Environment:

    Kernel mode


--*/

#include "pch.h"

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

#ifdef ALLOC_PRAGMA
#pragma alloc_text(PAGE, FmmOpenMetadata)
#pragma alloc_text(PAGE, FmmCloseMetadata)
#pragma alloc_text(PAGE, FmmReleaseMetadataFileReferences)
#pragma alloc_text(PAGE, FmmReacquireMetadataFileReferences)
#pragma alloc_text(PAGE, FmmSetMetadataOpenTriggerFileObject)
#pragma alloc_text(PAGE, FmmBeginFileSystemOperation)
#pragma alloc_text(PAGE, FmmEndFileSystemOperation)
#endif

NTSTATUS
FmmOpenMetadata (
    __in PFMM_INSTANCE_CONTEXT InstanceContext,
    __in BOOLEAN CreateIfNotPresent
    )
/*++

Routine Description:

    This routine opens or creates the Fmm metadata on the specified instance.

Arguments:

    InstanceContext     - Supplies the instance context for this instance.
    CreateIfNotPresent  - Supplies if the directory entry must be created if it is not present

Return Value:

    Returns the status of this operation.

Note:

    The caller must hold the instance context resource exclusive when this routine is called.

--*/
{
    OBJECT_ATTRIBUTES objectAttributes;
    IO_STATUS_BLOCK ioStatus;
    UNICODE_STRING fileName;
    NTSTATUS status;
    ULONG length;

    PAGED_CODE();

    DebugTrace( DEBUG_TRACE_METADATA_OPERATIONS,
                ("[Fmm]: Opening metadata file ... (Volume = %p, CreateIfNotPresent = %X)\n",
                 InstanceContext->Volume,
                 CreateIfNotPresent) );

    status = STATUS_SUCCESS;
    fileName.Buffer = NULL;

    //
    //  Get the volume name and construct the full metadata filename.
    //


    length = FMM_DEFAULT_VOLUME_NAME_LENGTH + FMM_METADATA_FILE_NAME_LENGTH;

    while (TRUE) {

        fileName.MaximumLength = (USHORT)length;

        status = FmmAllocateUnicodeString( &fileName );

        if (!NT_SUCCESS( status )) {

            goto FmmOpenMetadataCleanup;
        }

        status = FltGetVolumeName( InstanceContext->Volume, &fileName, &length );

        if (NT_SUCCESS( status )) {

            status = RtlAppendUnicodeToString( &fileName, FMM_METADATA_FILE_NAME );

            if (NT_SUCCESS( status )) {

                break;
            }
        } else {

            DebugTrace( DEBUG_TRACE_METADATA_OPERATIONS | DEBUG_TRACE_ERROR,
                        ("[Fmm]: Failed to get volume name (Volume = %p, Status = 0x%x)\n",
                         InstanceContext->Volume,
                         status) );
        }


        if (status != STATUS_BUFFER_TOO_SMALL) {

            goto FmmOpenMetadataCleanup;;
        }

        //
        //  Free the filename buffer since a bigger one will be allocated
        //  above
        //

        FmmFreeUnicodeString( &fileName );

        length += FMM_METADATA_FILE_NAME_LENGTH;
    }


    //
    //  Initialize the object attributes and open the file.
    //

    InitializeObjectAttributes( &objectAttributes,
                                &fileName,
                                OBJ_KERNEL_HANDLE,
                                NULL,
                                NULL );




RetryFltCreateFile:


    DebugTrace( DEBUG_TRACE_METADATA_OPERATIONS,
                ("[Fmm]: Calling FltCreateFile for metadata file %wZ (Volume = %p, Status = 0x%x)\n",
                 &fileName,
                 InstanceContext->Volume,
                 status) );


    //
    //  Mark the beginning of a file system operation
    //

    FmmBeginFileSystemOperation( InstanceContext );

    status = FltCreateFile( Globals.Filter,
                            InstanceContext->Instance,
                            &InstanceContext->MetadataHandle,
                            FILE_ALL_ACCESS,
                            &objectAttributes,
                            &ioStatus,
                            (PLARGE_INTEGER) NULL,
                            FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN,
                            FILE_SHARE_READ,
                            (CreateIfNotPresent ? FILE_OPEN_IF : FILE_OPEN),
                            0L,
                            NULL,
                            0L,
                            0 );

    //
    //  Mark the end of a file system operation
    //

    FmmEndFileSystemOperation( InstanceContext );


    if (!NT_SUCCESS( status )) {

        DebugTrace( DEBUG_TRACE_METADATA_OPERATIONS | DEBUG_TRACE_ERROR,
                    ("[Fmm]: FltCreateFile failure for metadata file %wZ (Volume = %p, Status = 0x%x)\n",
                     &fileName,
                     InstanceContext->Volume,
                     status) );

        if (CreateIfNotPresent && (status == STATUS_OBJECT_PATH_NOT_FOUND)) {

            //
            //  We need to create the metadata file and the creation failed
            //  because the SystemVolumeInformation folder does not exist.
            //  So, create the folder and try again.
            //

            DebugTrace( DEBUG_TRACE_METADATA_OPERATIONS,
                        ("[Fmm]: Creating SystemVolumeInformation folder for metadata file %wZ (Volume = %p, Status = 0x%x)\n",
                         &fileName,
                         InstanceContext->Volume,
                         status) );


            //
            //  Mark the beginning of a file system operation
            //

            FmmBeginFileSystemOperation( InstanceContext );

            status = FltCreateSystemVolumeInformationFolder( InstanceContext->Instance );

            //
            //  Mark the end of a file system operation
            //

            FmmEndFileSystemOperation( InstanceContext );



            if (NT_SUCCESS( status )) {

                //
                //  We have sucessfully created the SystemVolumeInformation folder
                //  Try to create the metadata file again
                //

                goto RetryFltCreateFile;
            } else {

                DebugTrace( DEBUG_TRACE_METADATA_OPERATIONS | DEBUG_TRACE_ERROR,
                            ("[Fmm]: FltCreateSystemVolumeInformationFolder failure for metadata file %wZ (Volume = %p, Status = 0x%x)\n",
                             &fileName,
                             InstanceContext->Volume,
                             status) );
            }
        }

        goto FmmOpenMetadataCleanup;
    }

    //
    //  Retrieve the FileObject from the handle created
    //

    status = ObReferenceObjectByHandle( InstanceContext->MetadataHandle,
                                        STANDARD_RIGHTS_REQUIRED,
                                        *IoFileObjectType,
                                        KernelMode,
                                        &InstanceContext->MetadataFileObject,
                                        NULL );
    if (!NT_SUCCESS( status )) {

        DebugTrace( DEBUG_TRACE_METADATA_OPERATIONS | DEBUG_TRACE_ERROR,
                    ("[Fmm]: Failure to get file object from handle for metadata file %wZ (Volume = %p, Status = 0x%x)\n",
                     &fileName,
                     InstanceContext->Volume,
                     status) );

        goto FmmOpenMetadataCleanup;
    }

    if (ioStatus.Information == FILE_CREATED) {

        //
        //  New metadata was created
        //

        DebugTrace( DEBUG_TRACE_METADATA_OPERATIONS,
                    ("[Fmm]: Created new metadata file %wZ (Volume = %p, Status = 0x%x)\n",
                     &fileName,
                     InstanceContext->Volume,
                     status) );

        //
        //  The filter may want to do some initialization on the newly created
        //  metadata file here like adding a header to the file
        //

    }
    else {

        //
        //  Existing metadata was opened
        //

        DebugTrace( DEBUG_TRACE_METADATA_OPERATIONS,
                    ("[Fmm]: Opened existing metadata file %wZ (Volume = %p, Status = 0x%x)\n",
                     &fileName,
                     InstanceContext->Volume,
                     status) );

        //
        //  The filter may want to do some sanity checks on the metadata file here
        //  like validating the header of the file
        //

    }

    //
    //  Here the filter may read the metadata contents and initialize
    //  its in memory data structures with the data from the metadata
    //  file
    //


FmmOpenMetadataCleanup:

    if (!NT_SUCCESS( status )) {

        DebugTrace( DEBUG_TRACE_METADATA_OPERATIONS | DEBUG_TRACE_ERROR,
                    ("[Fmm]: Failed to open metadata (Volume = %p, Status = 0x%x)\n",
                     InstanceContext->Volume,
                     status) );

        //
        //  CLose the handle and dereference the file object
        //

        if (InstanceContext->MetadataHandle) {


            //
            //  Mark the beginning of a file system operation
            //

            FmmBeginFileSystemOperation( InstanceContext );

            FltClose( InstanceContext->MetadataHandle );

            //
            //  Mark the end of a file system operation
            //

            FmmEndFileSystemOperation( InstanceContext );

            InstanceContext->MetadataHandle = NULL;

            if (InstanceContext->MetadataFileObject) {

                ObDereferenceObject( InstanceContext->MetadataFileObject );
                InstanceContext->MetadataFileObject = NULL;
            }
        }
    } else {

        DebugTrace( DEBUG_TRACE_METADATA_OPERATIONS,
                    ("[Fmm]: Metadata successfully opened (Volume = %p)\n",
                     InstanceContext->Volume) );

        //
        //  Set flags to indicate successful open of filter metadata
        //

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲日本青草视频在线怡红院| 精品国产精品网麻豆系列| 在线观看成人免费视频| 日本高清不卡视频| 日韩视频在线一区二区| 久久精品视频免费| 亚洲婷婷综合久久一本伊一区| 一区二区三区在线高清| 日韩精品国产欧美| 高清不卡一区二区在线| 欧美午夜理伦三级在线观看| 久久久av毛片精品| 亚洲第一激情av| 国产成人高清视频| 国产精品欧美一区二区三区| 日韩在线一区二区| 成人国产一区二区三区精品| 欧美日韩国产另类一区| 国产精品免费观看视频| 全国精品久久少妇| 在线观看视频91| 国产精品嫩草99a| 久久er99热精品一区二区| 91精品国产全国免费观看| 夜夜爽夜夜爽精品视频| 99精品视频一区二区三区| 国产日韩欧美电影| 国产成人精品一区二区三区四区 | 美国十次综合导航| 欧美日韩一区三区四区| 亚洲视频在线一区观看| 波多野结衣中文一区| 中文子幕无线码一区tr| 国产a精品视频| 国产精品国产三级国产aⅴ原创| 国产精品乡下勾搭老头1| 久久免费视频一区| 99在线精品一区二区三区| 日韩欧美成人一区| 国产在线播放一区二区三区| 欧美大片在线观看| 丁香天五香天堂综合| 国产亚洲欧美中文| av不卡在线观看| 亚洲一区免费观看| 日韩视频一区二区| 成人午夜免费电影| 亚洲一区日韩精品中文字幕| 欧美一区二区三级| 国产一区二三区| 一区二区三区鲁丝不卡| 亚洲精品一区二区三区影院| 色综合久久中文字幕综合网| 蜜臀av亚洲一区中文字幕| 中文一区二区完整视频在线观看| 欧美亚洲国产怡红院影院| 亚洲高清免费在线| 亚洲免费色视频| 欧美性极品少妇| 久88久久88久久久| 亚洲蜜桃精久久久久久久| 久久亚洲综合色| 欧美日韩激情在线| 在线观看欧美精品| kk眼镜猥琐国模调教系列一区二区 | 亚洲视频一区在线| 日本一区二区三区在线观看| 日韩欧美一区中文| 欧美美女黄视频| 欧美日本在线观看| 欧美猛男男办公室激情| 欧美视频一区二区在线观看| 成人免费视频视频在线观看免费 | 国产一区二区三区久久悠悠色av| 日韩高清电影一区| 亚洲成人免费视频| 亚洲人成精品久久久久久| 日韩理论片网站| 夜夜嗨av一区二区三区中文字幕 | 欧美在线free| 91麻豆文化传媒在线观看| 91色视频在线| 欧洲另类一二三四区| 在线观看视频一区二区欧美日韩| 91老司机福利 在线| 欧美日韩一卡二卡三卡 | 亚洲午夜国产一区99re久久| 亚洲激情图片一区| 亚洲第一搞黄网站| 久久99国产精品成人| 国产美女久久久久| 91同城在线观看| 欧美日本在线一区| 26uuu欧美日本| 国产精品免费视频观看| 亚洲成av人影院| 国产成人在线免费| 色诱视频网站一区| 精品久久国产字幕高潮| 中文字幕欧美日韩一区| 亚洲免费在线看| 精品在线免费视频| 色婷婷激情综合| 国产亚洲午夜高清国产拍精品| 亚洲欧洲成人精品av97| 日本亚洲最大的色成网站www| 成人毛片视频在线观看| 精品视频在线视频| 亚洲欧洲日韩在线| 蜜臀av一区二区在线观看| av成人免费在线观看| 久久久久久影视| 人人精品人人爱| 欧美三级韩国三级日本三斤 | 国产精品99久| 日韩一级片在线播放| 午夜精品久久久久久久久久久| 成人一道本在线| 欧美激情艳妇裸体舞| 国产精品综合视频| 欧美精品一区视频| 国产精品18久久久久久久久久久久| 538在线一区二区精品国产| 亚洲五月六月丁香激情| 欧美性生活影院| 图片区小说区区亚洲影院| 91精品国产综合久久香蕉的特点 | 欧美日本韩国一区二区三区视频| 亚洲国产一区视频| 欧美国产日韩在线观看| 97精品国产露脸对白| 亚洲成人av一区二区| 欧美丰满嫩嫩电影| 秋霞电影网一区二区| 26uuu精品一区二区在线观看| 久久国产精品无码网站| 国产喂奶挤奶一区二区三区| 99久久综合精品| 亚洲电影视频在线| 欧美mv日韩mv| 91免费观看国产| 欧美aaaaa成人免费观看视频| 亚洲观看高清完整版在线观看| 欧美xxxx在线观看| 91麻豆免费观看| 国产专区综合网| 午夜视频一区在线观看| 久久久久久免费网| 91 com成人网| 91女厕偷拍女厕偷拍高清| 亚洲精品成人在线| 国产农村妇女毛片精品久久麻豆| 欧美影院一区二区三区| 成人激情午夜影院| 免费高清成人在线| 日本强好片久久久久久aaa| 中文字幕综合网| 亚洲国产精品黑人久久久| 日韩精品一区国产麻豆| 欧美巨大另类极品videosbest| 99re成人精品视频| 韩国三级中文字幕hd久久精品| 性欧美疯狂xxxxbbbb| 亚洲视频在线观看一区| 午夜电影网亚洲视频| 夜夜操天天操亚洲| 一级日本不卡的影视| 亚洲美女精品一区| 一区二区三区欧美视频| 亚洲视频在线一区| 夜夜嗨av一区二区三区网页 | 色88888久久久久久影院野外| 老司机午夜精品| 美腿丝袜在线亚洲一区 | 日韩精品一区二区在线观看| 精品国产制服丝袜高跟| 欧美高清一级片在线观看| 国产精品久久久久久久午夜片| 国产精品午夜电影| 一区二区三区在线观看动漫 | 日本高清成人免费播放| 欧美日韩亚洲综合| 欧美一区二区三区爱爱| 国产日韩一级二级三级| 中文字幕亚洲成人| 日韩不卡在线观看日韩不卡视频| 免费av网站大全久久| 国产成人综合在线播放| voyeur盗摄精品| 欧美一区二区大片| 中文字幕一区二区三区不卡在线| 亚洲成人免费视| 成人一级片网址| 欧美不卡视频一区| 亚洲激情校园春色| 国产乱一区二区| 欧美精品在线一区二区| 中文字幕一区二区三区在线观看| 午夜欧美大尺度福利影院在线看| 美女一区二区视频|