UWP调用FilterConnectCommunicationPort连接minifilter驱动报错如何解决?
问题解决方案
首先明确:FilterConnectCommunicationPort 仅支持桌面桥(MSIX打包的Win32程序)形态的UWP应用调用,纯沙箱运行的UWP应用无法直接调用该内核API,需要通过桌面辅助进程中转。
现有配置的核心错误
- 安全描述符配置对象搞反
你在客户端调用FilterConnectCommunicationPort时传入的SECURITY_ATTRIBUTES是用来设置返回的端口句柄的继承/访问权限,并不控制能否连接到minifilter的通信端口。真正控制连接权限的是驱动侧调用FltCreateCommunicationPort创建端口时传入的安全描述符,需要在驱动侧修改该配置。 - SDDL规则不匹配UWP运行上下文
你当前用的SDDL(A;;GA;;;AC)(A;;GA;;;S-1-15-2-2)是给所有应用容器开放权限,Win10 1903及以后版本的系统安全策略默认禁止通用应用容器组SID访问内核通信端口,需要指定你的UWP应用的唯一包SID:- 首先调用
GetPackageFamilyName获取你的应用的包家族名 - 通过
ConvertPackageFamilyNameToSid接口生成对应包SID,添加到驱动侧端口的SDDL规则中,示例规则格式:D:P(A;;GA;;;WD)(A;;GA;;;<你的应用包SID>)S:(ML;;;;;LW)
- 首先调用
应用侧补充配置
如果你使用的是桌面桥形态的UWP应用,除了你已添加的权限外,还需要补充如下配置:
- 如果minifilter端口需要管理员权限访问,在包清单中添加管理员权限声明:
<rescap:Capability Name="allowElevation" />
- 确认项目属性中已开启「允许不安全代码」「允许调用Win32 API」相关配置,没有对
fltlib.dll的调用做沙箱限制。
纯UWP兼容方案
如果你需要在纯沙箱UWP应用中对接minifilter,使用中转方案:
- 开发一个桌面辅助进程,负责调用
FilterConnectCommunicationPort和驱动通信 - UWP应用通过
AppService和桌面辅助进程进行数据交互,辅助进程默认随UWP应用启动
内容的提问来源于stack exchange,提问作者vincent
相关产品推荐
相关产品推荐

