【问题标题】:Minifilter cause lag on disk management and system restoreMinifilter导致磁盘管理和系统还原滞后
【发布时间】:2018-05-08 12:54:41
【问题描述】:

我正在尝试确定为什么我的过滤器会导致磁盘管理 diskmgmt.msc 滞后。它会卡住很长一段时间,直到它显示或根本不显示。

我的调查和结论已经将问题范围缩小了很多。我将编写一些代码,这些代码被大大缩短以便于阅读。我很确定回答这个问题就足够了。

你看,下面的代码有效。结果是返回的值。

    if(Data->Iopb->MajorFunction == IRP_MJ_VOLUME_MOUNT)
        {
dev = diskDevice->DeviceType;
        if((FILE_DEVICE_MASS_STORAGE == dev) || (FILE_DEVICE_DISK == dev) || 
                    (FILE_DEVICE_DISK_FILE_SYSTEM == dev) || (FILE_DEVICE_VIRTUAL_DISK == dev)
                    || (FILE_DEVICE_FILE_SYSTEM == dev) || (dev >= 32768))
                    {
                        if(FLT_FSTYPE_NTFS == fs_type)
                        {
                            Result = FLT_PREOP_SUCCESS_WITH_CALLBACK; 

                        }
                        else
                        {
                            Result = FLT_PREOP_SUCCESS_NO_CALLBACK;
                        }
                    }

        }

如果“else”为 FLT_PREOP_SUCCESS_WITH_CALLBACK;,则会滞后。

所以,我在这里的假设是,除了 NTFS 之外,某些特定 FLT_FSTYPE 存在特定行为。因此,我的问题是,哪一个有具体要求?

除了记录之外,我的 PostOperation 函数并没有做很多事情。该函数始终返回 FLT_POSTOP_FINISHED_PROCESSING。

【问题讨论】:

  • 我猜这可能是一个分支预测问题,但你应该在猜测之前先分析一下。
  • 我会尝试对此进行调查,但我很困惑。我知道 GPU 缺乏分支预测,但驱动程序是否会受到同样的影响?
  • 驱动程序在 CPU 上运行,所以是的......他们绝对有这个问题。我建议使用xperf/Windows Performance Analyzer 来解决这个问题,如果不进行分析,你只会猜测。

标签: c driver lag minifilter


【解决方案1】:

好的,我的问题不是由枚举值或涉及任何“魔法”引起的。枚举决定 postOperation 是否应该运行。常识说这就是问题所在。正如我所说,我在那里所做的只是记录东西。是的,这就是问题所在。我使用函数 FltSendMessage。由于我没有计时器并且设置为 NULL,因此它将无限期地等待。这就是它卡住的地方。我的问题是内核和用户空间之间的通信存在错误。就我而言,用户态应用程序失败了。当它失败时,它不会向驱动程序发送确认,因此它会等待。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-01
    • 2020-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多