首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在微过滤器驱动中挂起IRP?

如何在微过滤器驱动中挂起IRP?
EN

Stack Overflow用户
提问于 2020-03-05 10:47:20
回答 1查看 181关注 0票数 4

我正在尝试取消与创建相关的IRP,这是我的与PreCreate相关的代码。当前正在阻止IRP,我想通过将其置于挂起状态来取消IRP我不想实现取消安全的IRP队列,因为我只有很少的IRP可以取消比如说一两个,我如何才能取消IRP ?,请帮助

我的代码

代码语言:javascript
复制
FltLockUserBuffer(Data);

        FltWorkItem = FltAllocateDeferredIoWorkItem();

        if (FltWorkItem != NULL)
        {

            if (NT_SUCCESS(FltQueueDeferredIoWorkItem(FltWorkItem, Data, WorkItemCallback, DelayedWorkQueue, NULL)))
                return FLT_PREOP_PENDING;

        }



//Callback that notify when is file is accessed
VOID WorkItemCallback(IN PFLT_DEFERRED_IO_WORKITEM  FltWorkItem,
    IN PFLT_CALLBACK_DATA  Data,
    IN PVOID  Context)
{
    UNICODE_STRING  UniFilePathName = { 0 };
    UNICODE_STRING  UniParentFileName = { 0 };
    ULONG           replyLength;
    NTSTATUS        status;

    FLT_PREOP_CALLBACK_STATUS       Result = FLT_PREOP_SUCCESS_WITH_CALLBACK;
    DWORD                           SafeToOpen = 1;



    __try
    {

        // Extract file name Information        
        if (!NT_SUCCESS(GetFileName(Data, &UniFilePathName, &UniParentFileName)))
        {
            __leave;
        }


        //communicate with service
        SafeToOpen = SendFileInfo(UniFilePathName);

        if (!SafeToOpen)
        {   

                // ACCESS DENIED
                Data->IoStatus.Status = STATUS_ACCESS_DENIED;               
                Data->IoStatus.Information = 0;             
                Result = FLT_PREOP_COMPLETE;
                __leave;

        }
    }
    __finally
    {


        FltCompletePendedPreOperation(Data, Result, Context);
        FltFreeDeferredIoWorkItem(FltWorkItem);
    }

}
EN

回答 1

Stack Overflow用户

发布于 2020-05-14 11:56:00

使用FltDoCompletionProcessingWhenSafe函数而不是FltQueueDeferredIoWorkItem。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60537518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档