WFP驱动Win7下调用FwpmProviderAdd返回STATUS_FWP_DYNAMIC_SESSION_IN_PROGRESS求助
解决Win7下WFP驱动调用FwpmProviderAdd返回STATUS_FWP_DYNAMIC_SESSION_IN_PROGRESS的问题
针对你遇到的Win7环境下WFP驱动无法启动、调用FwpmProviderAdd()返回STATUS_FWP_DYNAMIC_SESSION_IN_PROGRESS的问题,结合Win7 WFP的特性,有以下几个可行的解决方向:
启用持久化Provider标志
Win7的WFP引擎对非持久化Provider的添加限制更严格,当系统中存在动态会话(比如临时防火墙规则生效中)时,不允许添加未标记为持久化的Provider。取消你代码中FWPM_PROVIDER_FLAG_PERSISTENT的注释,确保Provider被标记为持久化:provider.flags = FWPM_PROVIDER_FLAG_PERSISTENT;检查引擎初始化参数
确认打开WFP引擎时使用的参数是否兼容Win7。Win7下打开引擎建议明确指定FWPM_ENGINE_FLAG_USE_KERNEL_MODE(如果你的驱动是内核模式),避免使用高版本系统才支持的标志,比如FWPM_ENGINE_FLAG_NETWORK_AWARE。显式创建会话并关联操作
在Win7中,若当前系统有活跃的动态会话,直接添加Provider会触发该错误。可以显式创建一个会话,将Provider添加操作关联到这个会话中:HANDLE sessionHandle = NULL; NTSTATUS status = FwpmSessionCreate(g_EngineHandle, NULL, &sessionHandle); if (NT_SUCCESS(status)) { status = FwpmProviderAdd(g_EngineHandle, &provider, sessionHandle); // 操作完成后关闭会话 FwpmSessionDelete(g_EngineHandle, sessionHandle); }验证ServiceName的正确性
Win7下WFP对Provider的serviceName字段校验更严格,确保该名称和你的驱动服务名称完全一致,且服务已正确注册并处于可启动状态。
另外,Win7的WFP API行为和Win8+存在差异,建议参考Win7对应的WFP文档,确认API参数的兼容性要求。
内容的提问来源于stack exchange,提问作者Lion Kuo
相关产品推荐
相关产品推荐

