我正在编写一个文件系统微过滤器驱动程序,用于监控IRP_MJ_CREATE、IRP_MJ_CLOSE、IRP_MJ_READ和IRP_MJ_WRITE操作。我必须以这样的方式实现它:当我的操作前回调被调用时,我需要从用户程序获得一个输入,决定是允许还是阻止我计划使用FltQueueDeferredIoWorkItem和FltCompletePendedPreOperation()的操作(对于所选文件的列表)。
我写了一个示例,其中我的预操作回调函数执行以下操作(作为测试)-分配工作项-调用FltQueueDeferredIoWorkItem并将其排队-将CompletionContext设置为NULL -返回FLT_PREOP_PENDING
我的延迟IO回调例程将创建一条记录(来自非分页池的自定义类型),从PFLT_CALLBACK_DATA复制详细信息并将其传递给Completioncontext参数并返回状态为FLT_PREOP_SUCCESS_WITH_CALLBACK。
如果我只监视IRP_MJ_CREATE,这可以很好地工作。如果我也为IRP_MJ_WRITE/READ/CLOSE注册了pre和post操作例程,它只能工作几秒钟,稍后我的机器就会死机。
在预创建例程中,我不应该像这样为IRP_MJ_WRITE/READ/CLOSE挂起IO吗?
发布于 2017-03-27 15:57:32
好吧,有两个问题:
。。WorkItem = FltAllocateDeferredIoWorkItem();
FltLockUserBuffer(Data);
Status = FltQueueDeferredIoWorkItem(WorkItem, Data, &FileDeferredRoutine, DelayedWorkQueue, CompletionContext);
if(Status==STATUS_SUCCESS)
return FLT_PREOP_PENDING;。。
https://stackoverflow.com/questions/43037684
复制相似问题