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

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

?? operations.c

?? 文件系統過濾驅動程序的框架
?? C
?? 第 1 頁 / 共 2 頁
字號:

    PAGED_CODE();

    DebugTrace( DEBUG_TRACE_ALL_IO,
                ("[Ctx]: CtxPreClose -> Enter (Cbd = %p, FileObject = %p)\n",
                 Cbd,
                 FltObjects->FileObject) );

    //
    // Get the stream context
    //

    status = CtxFindOrCreateStreamContext(Cbd, 
                                          FALSE,     // do not create if one does not exist
                                          &streamContext,
                                          &streamContextCreated);
    if (!NT_SUCCESS( status )) {

        //
        //  This failure will most likely be because stream contexts are not supported
        //  on the object we are trying to assign a context to or the object is being 
        //  deleted
        //  
                
        DebugTrace( DEBUG_TRACE_ERROR | DEBUG_TRACE_STREAM_CONTEXT_OPERATIONS,
                    ("[Ctx]: CtxPreClose -> Failed to find stream context (Cbd = %p, FileObject = %p)\n",
                     Cbd,
                     FltObjects->FileObject) );
    
        goto CtxPreCloseCleanup;
    }        

    DebugTrace( DEBUG_TRACE_STREAM_CONTEXT_OPERATIONS,
                ("[Ctx]: CtxPreClose -> Getting stream context for file (Cbd = %p, FileObject = %p, StreamContext = %p. StreamContextCreated = %x)\n",
                 Cbd,
                 FltObjects->FileObject,
                 streamContext,
                 streamContextCreated) );

    //
    //  Acquire write acccess to the context
    //
    
    CtxAcquireResourceExclusive(streamContext->Resource);


    DebugTrace( DEBUG_TRACE_STREAM_CONTEXT_OPERATIONS,
                ("[Ctx]: CtxPreClose -> Old info in stream context for file(Cbd = %p, FileObject = %p, StreamContext = %p) \n\tName = %wZ \n\tCreateCount = %x \n\tCleanupCount = %x, \n\tCloseCount = %x\n",
                 Cbd,
                 FltObjects->FileObject,
                 streamContext,
                 &streamContext->FileName,
                 streamContext->CreateCount,
                 streamContext->CleanupCount,
                 streamContext->CloseCount) );
    
    //
    //  Update the close count in the context
    //
    
    streamContext->CloseCount++;

    
    DebugTrace( DEBUG_TRACE_STREAM_CONTEXT_OPERATIONS,
                ("[Ctx]: CtxPreClose -> New info in stream context for file (Cbd = %p, FileObject = %p, StreamContext = %p) \n\tName = %wZ \n\tCreateCount = %x \n\tCleanupCount = %x, \n\tCloseCount = %x\n",
                 Cbd,
                 FltObjects->FileObject,
                 streamContext,
                 &streamContext->FileName,
                 streamContext->CreateCount,
                 streamContext->CleanupCount,
                 streamContext->CloseCount) );

    //
    //  Relinquish write acccess to the context
    //
    
    CtxReleaseResource(streamContext->Resource);


CtxPreCloseCleanup:

    //
    // Release the references we have acquired
    //    

    if (streamContext != NULL) {

        FltReleaseContext( streamContext );            
    }


    DebugTrace( DEBUG_TRACE_ALL_IO,
                ("[Ctx]: CtxPreClose -> Exit (Cbd = %p, FileObject = %p)\n",
                 Cbd,
                 FltObjects->FileObject) );

    //
    //  It doesn't make sense to fail the cleanup - so ignore any errors we may 
    //  encounter and return success
    //

    return FLT_PREOP_SUCCESS_NO_CALLBACK;
}


FLT_PREOP_CALLBACK_STATUS
CtxPreSetInfo (
    IN OUT PFLT_CALLBACK_DATA Cbd,
    IN PCFLT_RELATED_OBJECTS FltObjects,
    OUT PVOID *CompletionContext
    )
{
    FILE_INFORMATION_CLASS fileInformationClass;
    FLT_PREOP_CALLBACK_STATUS callbackStatus;

    UNREFERENCED_PARAMETER( FltObjects );
    UNREFERENCED_PARAMETER( CompletionContext );

    PAGED_CODE();

    DebugTrace( DEBUG_TRACE_ALL_IO,
                ("[Ctx]: CtxPreSetInfo -> Enter (Cbd = %p, FileObject = %p)\n",
                 Cbd,
                 FltObjects->FileObject) );

    callbackStatus = FLT_PREOP_SUCCESS_NO_CALLBACK; // pass through - default is no post op callback

    fileInformationClass = Cbd->Iopb->Parameters.SetFileInformation.FileInformationClass;

    //
    //  Ignore the ops we do not care about
    //
    
    if ((fileInformationClass != FileRenameInformation)) {

        DebugTrace( DEBUG_TRACE_ALL_IO,
                    ("[Ctx]: CtxPreSetInfo -> Ignoring SetInfo operations other than FileRenameInformation (Cbd = %p, FileObject = %p)\n",
                     Cbd,
                     FltObjects->FileObject) );

        goto CtxPreSetInfoCleanup;
    }

    //
    //  We want to process renames in the post-op callback
    //
    
    callbackStatus = FLT_PREOP_SYNCHRONIZE; 


CtxPreSetInfoCleanup:


    DebugTrace( DEBUG_TRACE_ALL_IO,
                ("[Ctx]: CtxPreSetInfo -> Exit (Cbd = %p, FileObject = %p)\n",
                 Cbd,
                 FltObjects->FileObject) );

    return callbackStatus;

}




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
    )
{
    PCTX_INSTANCE_CONTEXT instanceContext = NULL;
    PCTX_STREAM_CONTEXT streamContext = NULL;
    PCTX_STREAMHANDLE_CONTEXT streamHandleContext = NULL;
    PFLT_FILE_NAME_INFORMATION nameInfo = NULL;

    NTSTATUS status;
    BOOLEAN streamContextCreated, streamHandleContextReplaced;
    
    UNREFERENCED_PARAMETER( Flags );
    UNREFERENCED_PARAMETER( FltObjects );
    UNREFERENCED_PARAMETER( CbdContext );

    //
    //  The pre-operation callback will return FLT_PREOP_SYNCHRONIZE if it needs a 
    //  post operation callback. In this case, the Filter Manager will call the 
    //  minifilter's post-operation callback in the context of the pre-operation 
    //  thread, at IRQL <= APC_LEVEL. This allows the post-operation code to be
    //  pagable and also allows it to access paged data
    //  

    PAGED_CODE();

    DebugTrace( DEBUG_TRACE_ALL_IO,
                ("[Ctx]: CtxPostSetInfo -> Enter (Cbd = %p, FileObject = %p)\n",
                 Cbd,
                 FltObjects->FileObject) );


    //
    // Initialize defaults
    //
    
    status = STATUS_SUCCESS;


    //
    //  Get the instance context for the target instance
    //

    DebugTrace( DEBUG_TRACE_INSTANCE_CONTEXT_OPERATIONS,
                ("[Ctx]: CtxPostSetInfo -> Trying to get instance context (TargetInstance = %p, Cbd = %p, FileObject = %p)\n",
                 Cbd->Iopb->TargetInstance,
                 Cbd,
                 FltObjects->FileObject) );
    
    status = FltGetInstanceContext( Cbd->Iopb->TargetInstance,
                                    &instanceContext );
    if (!NT_SUCCESS( status )) {

        DebugTrace( DEBUG_TRACE_INSTANCE_CONTEXT_OPERATIONS | DEBUG_TRACE_ERROR,
                    ("[Ctx]: CtxPostSetInfo -> Failed to get instance context (Cbd = %p, FileObject = %p)\n",
                     Cbd,
                     FltObjects->FileObject) );
    
        goto CtxPostSetInfoCleanup;
    }

    DebugTrace( DEBUG_TRACE_INSTANCE_CONTEXT_OPERATIONS,
                ("[Ctx]: CtxPostSetInfo -> Instance context info for volume %wZ (Cbd = %p, FileObject = %p, InstanceContext = %p) \n\tVolumeName = %wZ \n\tInstance = %p \n\tVolume = %p\n",
                 &instanceContext->VolumeName,
                 Cbd,
                 FltObjects->FileObject,
                 instanceContext,
                 &instanceContext->VolumeName,
                 &instanceContext->Instance,
                 &instanceContext->Volume) );


    //
    // Get the directory name
    //
    
    status = FltGetFileNameInformation( Cbd,
                                        FLT_FILE_NAME_NORMALIZED |
                                        FLT_FILE_NAME_QUERY_DEFAULT,
                                        &nameInfo );
    
    if (!NT_SUCCESS( status )) {
    
        DebugTrace( DEBUG_TRACE_ERROR | DEBUG_TRACE_STREAM_CONTEXT_OPERATIONS | DEBUG_TRACE_STREAMHANDLE_CONTEXT_OPERATIONS,
                    ("[Ctx]: CtxPostSetInfo -> Failed to get file name information (Cbd = %p, FileObject = %p)\n",
                     Cbd,
                     FltObjects->FileObject) );
    
        goto CtxPostSetInfoCleanup;
    }

    
    //
    // Get the stream context
    //

    status = CtxFindOrCreateStreamContext(Cbd, 
                                          FALSE,     // do not create if one does not exist
                                          &streamContext,
                                          &streamContextCreated);
    if (!NT_SUCCESS( status )) {

        //
        //  This failure will most likely be because stream contexts are not supported
        //  on the object we are trying to assign a context to or the object is being 
        //  deleted
        //  
                
        DebugTrace( DEBUG_TRACE_ERROR | DEBUG_TRACE_STREAM_CONTEXT_OPERATIONS,
                    ("[Ctx]: CtxPostSetInfo -> Failed to find stream context (Cbd = %p, FileObject = %p)\n",
                     Cbd,
                     FltObjects->FileObject) );
    
        goto CtxPostSetInfoCleanup;
    }        

    DebugTrace( DEBUG_TRACE_STREAM_CONTEXT_OPERATIONS,
                ("[Ctx]: CtxPostSetInfo -> Getting stream context for file %wZ (Cbd = %p, FileObject = %p, StreamContext = %p. StreamContextCreated = %x)\n",
                 &nameInfo->Name,
                 Cbd,
                 FltObjects->FileObject,
                 streamContext,
                 streamContextCreated) );

    //
    //  Acquire write acccess to the context
    //
    
    CtxAcquireResourceExclusive(streamContext->Resource);


    DebugTrace( DEBUG_TRACE_STREAM_CONTEXT_OPERATIONS,
                ("[Ctx]: CtxPostSetInfo -> Old info in stream context for file %wZ (Cbd = %p, FileObject = %p, StreamContext = %p) \n\tName = %wZ \n\tCreateCount = %x \n\tCleanupCount = %x, \n\tCloseCount = %x\n",
                 &nameInfo->Name,
                 Cbd,
                 FltObjects->FileObject,
                 streamContext,
                 &streamContext->FileName,
                 streamContext->CreateCount,
                 streamContext->CleanupCount,
                 streamContext->CloseCount) );


    
    //
    //  Update the file name in the context
    //
    
    status = CtxUpdateNameInStreamContext( &nameInfo->Name, 
                                                  streamContext);


    DebugTrace( DEBUG_TRACE_STREAM_CONTEXT_OPERATIONS,
                ("[Ctx]: CtxPostSetInfo -> New info in stream context for file %wZ (Cbd = %p, FileObject = %p, StreamContext = %p) \n\tName = %wZ \n\tCreateCount = %x \n\tCleanupCount = %x, \n\tCloseCount = %x\n",
                 &nameInfo->Name,
                 Cbd,
                 FltObjects->FileObject,
                 streamContext,
                 &streamContext->FileName,
                 streamContext->CreateCount,
                 streamContext->CleanupCount,
                 streamContext->CloseCount) );

    //
    //  Relinquish write acccess to the context
    //
    
    CtxReleaseResource(streamContext->Resource);

    //
    //  Quit on failure after we have given up
    //  the resource
    //

    if (!NT_SUCCESS( status )) {
    
        DebugTrace( DEBUG_TRACE_ERROR | DEBUG_TRACE_STREAM_CONTEXT_OPERATIONS,
                    ("[Ctx]: CtxPostSetInfo -> Failed to update name in stream context for file %wZ (Cbd = %p, FileObject = %p)\n",
                     &nameInfo->Name,
                     Cbd,
                     FltObjects->FileObject) );

        goto CtxPostSetInfoCleanup;
    }
            


    //
    // Create or replace a stream handle context
    //

    status = CtxCreateOrReplaceStreamHandleContext(Cbd, 
                                                   TRUE,
                                                   &streamHandleContext,
                                                   &streamHandleContextReplaced);
    if (!NT_SUCCESS( status )) {

        //
        //  This failure will most likely be because stream contexts are not supported
        //  on the object we are trying to assign a context to or the object is being 
        //  deleted
        //  
                
        DebugTrace( DEBUG_TRACE_ERROR | DEBUG_TRACE_STREAMHANDLE_CONTEXT_OPERATIONS,
                    ("[Ctx]: CtxPostSetInfo -> Failed to find or create stream handle context (Cbd = %p, FileObject = %p)\n",
                     Cbd,
                     FltObjects->FileObject) );

        goto CtxPostSetInfoCleanup;
    }        

    DebugTrace( DEBUG_TRACE_STREAMHANDLE_CONTEXT_OPERATIONS,
                ("[Ctx]: CtxPostSetInfo -> Creating/Replacing stream handle context for file %wZ (Cbd = %p, FileObject = %p StreamHandleContext = %p, StreamHandleContextReplaced = %x)\n",
                 &nameInfo->Name,
                 Cbd,
                 FltObjects->FileObject,
                 streamHandleContext,
                 streamHandleContextReplaced) );

    //
    //  Acquire write acccess to the context
    //

    CtxAcquireResourceExclusive(streamHandleContext->Resource);

    //
    //  Update the file name in the context
    //

    status = CtxUpdateNameInStreamHandleContext( &nameInfo->Name, 
                                                 streamHandleContext);

    DebugTrace( DEBUG_TRACE_STREAMHANDLE_CONTEXT_OPERATIONS,
                ("[Ctx]: CtxPostSetInfo -> Stream handle context info for file %wZ (Cbd = %p, FileObject = %p, StreamHandleContext = %p) \n\tName = %wZ\n",
                 &nameInfo->Name,
                 Cbd,
                 FltObjects->FileObject,
                 streamHandleContext,
                 &streamHandleContext->FileName) );

    //
    //  Relinquish write acccess to the context
    //

    CtxReleaseResource( streamHandleContext->Resource );

    //
    //  Quit on failure after we have given up
    //  the resource
    //

    if (!NT_SUCCESS( status )) {

        DebugTrace( DEBUG_TRACE_ERROR | DEBUG_TRACE_STREAMHANDLE_CONTEXT_OPERATIONS,
                    ("[Ctx]: CtxPostSetInfo -> Failed to update name in stream handle context for file %wZ (Cbd = %p, FileObject = %p)\n",
                     &nameInfo->Name,
                     Cbd,
                     FltObjects->FileObject) );

        goto CtxPostSetInfoCleanup;
    }
    

CtxPostSetInfoCleanup:

    
    //
    // Release the references we have acquired
    //    
        
    if (instanceContext != NULL) {

        FltReleaseContext( instanceContext );            
    }

    if (streamContext != NULL) {

        FltReleaseContext( streamContext );            
    }

    if (streamHandleContext != NULL) {

        FltReleaseContext( streamHandleContext );            
    }

    if (nameInfo != NULL) {

        FltReleaseFileNameInformation( nameInfo );
    }

    if (!NT_SUCCESS( status )) {
    
        DebugTrace( DEBUG_TRACE_ERROR,
                    ("[Ctx]: CtxPostSetInfo -> Failed with status 0x%x \n",
                    status) );

        //
        //  It doesn't make sense to udate Cbd->IoStatus.Status on failure since the
        //  file system has suceesfully completed the operation
        //
    }

    DebugTrace( DEBUG_TRACE_ALL_IO,
                ("[Ctx]: CtxPostSetInfo -> Exit (Cbd = %p, FileObject = %p)\n",
                 Cbd,
                 FltObjects->FileObject) );

    return FLT_POSTOP_FINISHED_PROCESSING;
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品国产黑色紧身裤美女| 国产精品国产精品国产专区不蜜| 欧美成人综合网站| 国产精品久久久久aaaa樱花 | 国产精品电影一区二区| 亚洲va国产天堂va久久en| 国产精品 欧美精品| 欧美一区二区三区在线电影| 亚洲欧美成aⅴ人在线观看| 国产在线视频一区二区| 欧美日韩aaaaaa| 亚洲色图一区二区三区| 国产成人亚洲综合a∨婷婷| 欧美一区欧美二区| 亚洲一卡二卡三卡四卡| 91老司机福利 在线| 中文字幕 久热精品 视频在线 | 亚洲一区在线看| av中文字幕亚洲| 国产精品天天看| 国产成人av一区二区三区在线观看| 日韩限制级电影在线观看| 亚洲国产综合在线| 一本高清dvd不卡在线观看| 国产精品久久久久久久岛一牛影视 | 卡一卡二国产精品| 91 com成人网| 亚洲一区二区三区四区在线免费观看| 色婷婷综合久色| 亚洲天堂av老司机| 99re视频这里只有精品| 国产精品伦一区| 99视频一区二区三区| 亚洲免费观看高清完整版在线观看熊 | 成人午夜电影网站| 中文字幕乱码亚洲精品一区| 成人激情小说乱人伦| 国产精品成人免费| 色综合久久中文字幕综合网| 亚洲精品中文在线观看| 欧美在线啊v一区| 一区二区欧美精品| 91精选在线观看| 精久久久久久久久久久| 欧美韩日一区二区三区| 99视频精品在线| 一二三四区精品视频| 欧美日韩一区视频| 日本不卡一区二区三区| 2欧美一区二区三区在线观看视频| 国产一区激情在线| 亚洲少妇30p| 正在播放亚洲一区| 黄色资源网久久资源365| 中文文精品字幕一区二区| 色婷婷狠狠综合| 青椒成人免费视频| 国产欧美日产一区| 日韩一区二区三区视频在线观看| 狠狠色丁香婷婷综合久久片| 中文字幕成人av| 欧美剧情电影在线观看完整版免费励志电影| 日本欧美一区二区| 国产精品久久久爽爽爽麻豆色哟哟| 91黄色免费网站| 国产一区在线观看麻豆| 亚洲乱码日产精品bd| 精品国产不卡一区二区三区| 99国产麻豆精品| 青青草伊人久久| 综合婷婷亚洲小说| 欧美一级日韩一级| 97精品电影院| 国内精品久久久久影院薰衣草| 综合精品久久久| 久久这里只精品最新地址| 色综合av在线| 国产一区二区三区久久悠悠色av| 亚洲精品欧美激情| 国产人久久人人人人爽| 欧美日韩一区二区在线视频| 国产成人av电影在线播放| 亚洲国产欧美在线人成| 国产精品欧美久久久久无广告| 欧美肥大bbwbbw高潮| 色就色 综合激情| 国产999精品久久| 奇米色一区二区| 亚洲在线观看免费视频| 中文字幕在线观看一区| 久久你懂得1024| 日韩三级中文字幕| 欧美日韩的一区二区| 99精品黄色片免费大全| 成人午夜伦理影院| 国产乱码精品一区二区三区av| 日韩电影在线一区| 亚洲www啪成人一区二区麻豆| 成人免费在线播放视频| 国产欧美一区二区精品忘忧草| 亚洲精品在线电影| 日韩写真欧美这视频| 欧美久久久久久蜜桃| 欧美怡红院视频| 欧美午夜精品一区二区蜜桃| 色综合久久天天| 99精品久久只有精品| 99久久精品久久久久久清纯| 大尺度一区二区| 国产v综合v亚洲欧| 国产乱子伦一区二区三区国色天香| 日本三级亚洲精品| 日本va欧美va精品发布| 日韩av中文字幕一区二区三区| 亚洲国产精品久久人人爱蜜臀| 亚洲国产综合91精品麻豆 | 国产精品区一区二区三区| 精品999在线播放| 精品福利一区二区三区免费视频| 欧美一级片在线观看| 欧美岛国在线观看| 欧美大尺度电影在线| 欧美mv和日韩mv国产网站| 精品国精品国产尤物美女| 欧美不卡一区二区| 久久精品欧美日韩精品 | 国产美女精品在线| 国产成人免费视| 成年人国产精品| 91色综合久久久久婷婷| 91黄视频在线观看| 日韩欧美国产一二三区| 久久无码av三级| 亚洲欧美日韩一区二区三区在线观看| 亚洲欧美成aⅴ人在线观看| 五月综合激情网| 国内外成人在线| 国产成人8x视频一区二区| 色婷婷综合久色| 欧美成人福利视频| 欧美国产丝袜视频| 亚洲电影一级黄| 国产乱码精品一品二品| 91免费国产在线观看| 欧美一区二区三区免费在线看| 久久久午夜电影| 亚洲国产精品久久不卡毛片| 久久精品国产亚洲一区二区三区| 成人免费视频播放| 国产午夜精品一区二区三区四区| 国产精品久久久久一区二区三区 | 国产激情一区二区三区四区 | 亚洲天堂成人网| 美女视频黄久久| 91影视在线播放| 欧美成人免费网站| 亚洲永久精品大片| 国产999精品久久久久久绿帽| 欧美精品在线观看播放| 久久精品亚洲精品国产欧美| 亚洲一区二区视频在线观看| 国产一区二区剧情av在线| 欧美午夜免费电影| 欧美国产日韩亚洲一区| 美日韩一级片在线观看| 色综合天天综合给合国产| www久久精品| 午夜精品久久一牛影视| av电影天堂一区二区在线| 欧美一级二级在线观看| 亚洲黄网站在线观看| 国产99久久久国产精品| 欧美tickling挠脚心丨vk| 依依成人综合视频| 成人动漫av在线| 久久蜜臀中文字幕| 久久99热狠狠色一区二区| 欧美体内she精高潮| 国产精品久久久久久久第一福利| 国产一区二区视频在线播放| 91精品国产麻豆国产自产在线| 一区二区在线免费| 成人国产亚洲欧美成人综合网| 久久综合av免费| 久久精品国产99国产精品| 欧美疯狂性受xxxxx喷水图片| 亚洲国产精品尤物yw在线观看| 99精品欧美一区| 亚洲欧美色图小说| 91在线你懂得| 亚洲精品乱码久久久久久久久 | 国产精品自拍在线| 欧美一区二区三区日韩视频| 丝袜美腿亚洲色图| 欧美色综合网站| 亚洲一级二级在线| 欧美精品在线一区二区三区| 丝袜美腿亚洲综合| 欧美一区二区啪啪| 麻豆视频一区二区|