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

标签 windows driver wfp

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

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

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

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

最佳答案

这是我在 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
}

关于windows - 在内核驱动程序中使用 Windows 过滤平台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8710253/

相关文章:

windows - 如何从命令行在 Windows 上播放音频文件?

windows - 一个进程的 read() 可以看到另一个进程的部分 write() 吗?

c# - 如何检测当前 session 是否通过 RDP 启动?

linux - 如何在/sys/class中创建bin属性文件?

c# - 如何在 Windows 上过滤到特定域名的网络连接

c# - Windows 过滤 platform.net 包装器?

C# - 在 if 语句中使用正则表达式

google-chrome - 无法在 selenium 中启动 Chrome 驱动程序

连接到 postgres 时出现 rgdal 错误

visual-studio - Windows 驱动程序开发 : Deploy option missing in Visual Studio 2012