在内核驱动程序中使用Windows过滤平台

时间:2012-01-03 09:39:05

标签: windows driver wfp

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

我们设法从wfp获取我们所需的信息没有问题,但问题是在启动过程中 - 由于我们添加了wfp功能,使用驱动程序的机器无法启动 - 它们陷入僵局(计算机“卡住了” “在启动画面中)。

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

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

1 个答案:

答案 0 :(得分: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
}