You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MiniFilter驱动启动报系统错误2 找不到指定文件问题排查

问题根因
  • 核心错误:INF模板完全用错。你当前使用的是**NDIS轻量网络过滤驱动(LWF)**的INF模板,和你开发的文件系统MiniFilter驱动完全不匹配。两类驱动的类GUID、安装逻辑、所需注册表项、加载组要求完全不同,用网络驱动的配置装文件过滤驱动,服务配置从根上就是错的,不管怎么改ImagePath都不可能启动成功。
  • 代码存在低级错误:回调注册数组中IRP_MJ_WRITE的预处理回调错误绑定为MiniPreCreate,你自己实现的MiniPreWrite根本没被注册,就算驱动加载成功写拦截逻辑也不会生效。
  • 安装方式错误:你用SC手动建服务、OSRLoader加载、手动改注册表的方式都不满足MiniFilter的安装要求。MiniFilter需要FltMgr识别的实例配置、高度值、加载组等专属注册表项,不是只建个服务项加个ImagePath就能跑,缺必要配置时系统就会抛找不到文件的错误。
  • 配置不符合规范:现有INF里LoadOrderGroup填的是自定义字符串companyName,MiniFilter必须使用微软预定义的FSFilter Activity Monitor/FSFilter Anti-Virus这类文件系统过滤专属加载组,自定义加载组会导致FltMgr无法识别驱动。
  • 潜在路径问题:如果你是用32位程序/32位CMD把sys文件复制到system32\drivers,会被系统自动重定向到SysWOW64\drivers目录,内核加载时找不到对应路径的文件也会报这个错。
修复步骤

1. 清理所有残留错误配置

以管理员身份打开命令提示符,执行以下命令删除错误创建的服务:

sc delete companyName

手动删除注册表路径HKLM\SYSTEM\CurrentControlSet\Services\companyName的整个项,清理之前散落的sys文件,避免残留配置干扰后续安装。

2. 替换为合法的MiniFilter专用INF

完全丢弃之前的NDIS驱动INF,使用MiniFilter标准模板修改,核心配置参考如下:

[Version]
Signature   = "$Windows NT$"
Class       = "ActivityMonitor"
; 文件系统过滤驱动专属类GUID,绝对不能用之前网络驱动的GUID
ClassGuid   = {b86dff51-a31e-4bac-b3cf-e8cfe75c9fc2}
Provider    = %Msft%
DriverVer   = 01/01/2024,1.0.0.0
CatalogFile = companyName.cat

[Manufacturer]
%Msft%=MSFT,NTamd64 ; 仅保留你实际编译的目标架构,不需要全平台列全

[MSFT.NTamd64]
%companyName_Desc%=Install, companyName

[Install]
OptionDesc  = %companyName_Desc%
CopyFiles   = MiniFilter.DriverFiles

[DestinationDirs]
DefaultDestDir = 12
MiniFilter.DriverFiles = 12 ; 对应系统目录%windir%\system32\drivers

[MiniFilter.DriverFiles]
companyName.sys,,,2

[SourceDisksNames]
1 = %DiskId1%,,,""

[SourceDisksFiles]
companyName.sys = 1,,

[Install.Services]
AddService = companyName,,MiniFilter.Service

[MiniFilter.Service]
DisplayName    = %companyName_Desc%
ServiceType    = 1 ; 标记为内核驱动
StartType      = 3 ; 调试阶段先设为手动启动,调通后再改为系统启动
ErrorControl   = 1
ServiceBinary  = %12%\companyName.sys
; 必须使用微软规定的MiniFilter加载组,禁止自定义
LoadOrderGroup = "FSFilter Activity Monitor"
AddReg         = MiniFilter.AddRegistry

[MiniFilter.AddRegistry]
HKR,,"DebugFlags",0x00010001,0x0
; 以下为MiniFilter实例必填配置,缺了FltMgr认不到驱动
HKR,"Instances","DefaultInstance",0x00000000,%DefaultInstance%
HKR,"Instances\"%Instance1.Name%,"Altitude",0x00000000,%Instance1.Altitude%
HKR,"Instances\"%Instance1.Name%,"Flags",0x00010001,%Instance1.Flags%

[Strings]
Msft               = "YourCompany"
companyName_Desc   = "Test Minifilter Driver"
DiskId1            = "Minifilter Installation Disk"
DefaultInstance    = "MiniFilter Default Instance"
Instance1.Name     = "MiniFilter Default Instance"
; 测试用选监控类合法高度段即可,不要随便填数字
Instance1.Altitude = "370050"
Instance1.Flags    = 0x0

注意:Altitude(高度值)决定了过滤驱动在文件系统栈上的加载顺序,测试时可使用370000-379999监控类段的数值,正式发布需要向微软申请合法高度。

3. 修复代码错误

首先修正回调注册的笔误,把IRP_MJ_WRITE对应的预处理回调改成你实现的MiniPreWrite:

const FLT_OPERATION_REGISTRATION Callbacks[] = {
    {IRP_MJ_CREATE,0,MiniPreCreate,MiniPostCreate},
    {IRP_MJ_WRITE,0,MiniPreWrite,NULL}, // 原代码这里错填成MiniPreCreate
    {IRP_MJ_OPERATION_END}
};

另外修复文件名拷贝的溢出问题:你代码里拷贝文件名时用FileNameInfo->Name.MaximumLength作为拷贝长度是错的,这个值是文件名缓冲区的总大小,不是实际字符串长度,应该用FileNameInfo->Name.Length,否则会拷贝无效内存导致蓝屏。

4. 正确安装驱动

不要用SC手动建服务,不要用OSRLoader,直接通过INF正常安装:

  • 把编译好的companyName.sys和修改后的INF放在同一文件夹
  • 右键点击INF文件,选择「安装」
  • 管理员身份执行net start companyName即可正常启动
    测试阶段如果驱动没有正式签名,先执行bcdedit /set testsigning on重启开启测试模式再安装。

内容的提问来源于stack exchange,提问作者hashy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 02:27:30