2

我们最近向我们的驱动程序添加了 Windows 过滤平台功能。

我们成功地从 wfp 获得了我们需要的信息,但问题是在启动过程中 - 自从我们添加了 wfp 功能后,使用驱动程序的机器无法启动 - 它们出现死锁(计算机“卡”在闪屏)。

我们认为这可能是因为我们的驱动程序仅依赖于 FltMgr 并且可能在加载 wfp 框架之前加载(TcpStack?)。

我的问题是 - 有没有办法询问服务管理器或任何其他机构是否加载了 wfp 框架?甚至更进一步——wfp 依赖的驱动程序是什么(所以我可以在开始使用之前检查它们是否已加载)

4

1 回答 1

2

这是我在 DriverEntry 中所做的。

//
// Wait for the WFP engine to be ready.
//

FWPM_SERVICE_STATE  bfeState;

bfeState = FwpmBfeStateGet0();
if (bfeState != FWPM_SERVICE_RUNNING) 
{
    WaitTime.QuadPart = (-5000000);   // wait 500000us (500ms) relative
    do {
        KeDelayExecutionThread (KernelMode, FALSE, &WaitTime);
        bfeState = FwpmBfeStateGet0();
        WaitCycles--;
    } while (bfeState != FWPM_SERVICE_RUNNING && WaitCycles > 0);
}

if (bfeState != FWPM_SERVICE_RUNNING)
{
    // log and error handling
}
于 2012-01-13T12:23:53.300 回答