![是否可以在不重新启动的情况下动态加载/卸载磁盘驱动器筛选器驱动程序?](https://linux22.com/image/1448936/%E6%98%AF%E5%90%A6%E5%8F%AF%E4%BB%A5%E5%9C%A8%E4%B8%8D%E9%87%8D%E6%96%B0%E5%90%AF%E5%8A%A8%E7%9A%84%E6%83%85%E5%86%B5%E4%B8%8B%E5%8A%A8%E6%80%81%E5%8A%A0%E8%BD%BD%2F%E5%8D%B8%E8%BD%BD%E7%A3%81%E7%9B%98%E9%A9%B1%E5%8A%A8%E5%99%A8%E7%AD%9B%E9%80%89%E5%99%A8%E9%A9%B1%E5%8A%A8%E7%A8%8B%E5%BA%8F%EF%BC%9F.png)
正如标题所暗示的,我想知道是否可以在不重新启动机器的情况下加载或卸载磁盘驱动器过滤驱动程序,并使更改立即生效。
我在 WinPE 环境中执行此操作,并且需要保留在 WinPE 中。
历史
我已将 Symantec Encryption Desktop(又名 PGP)PGPWDE 驱动程序嵌入到我们的 MDT/SCCM 启动媒体中,以便我们的技术人员可以轻松管理加密驱动器(添加/删除用户、密码恢复、数据恢复等)。
但是,PGPWDE 驱动程序有一些内置功能,可以防止擦除 MBR/扇区 0。这在重新映像加密机器时会产生问题:
- diskpart clean 不会擦除 MBR
- bootrec /fixmbr 或 /fixboot 不会重写 MBR
- dskprobe 和 mbrwiz 等第三方实用程序也无法运行
- 以上所有操作均成功执行,这意味着“成功完成”或同等含义;errorlevel/lastexitcode 为 0
所以我的想法是,如果我可以卸载驱动程序,那么这将删除这种“保护”,这样我就可以成功擦除 MBR 并继续进行成像。
在 WinPE 中,
- 我没有看到 fltmc 中加载任何相关的(例如:没有提到 pgp、wde 等)过滤驱动程序
- 运行 devcon status、driverfiles、dp_enum、resources、find、findall 时,我没有看到任何相关信息(例如:没有对 pgp、wde 等的引用)
- 有多个设备安装类的名称和描述都是“?”。
- 系统进程仅加载一个文件:pgpwded.sys(通过 procexp 检查)
以下是我认为自己了解的有关驱动程序/‘设备’的一些信息:
- 在设备管理器中(在安装了该软件的 Windows 计算机上),显示隐藏项目后,我可以在非即插即用驱动程序下看到它
- 两个服务:PGPdisk 和 PGPsdkDriver
- 两者的设备类和设备类 GUID 分别为 LegacyDriver 和 {8ECC055D-047F-11D1-A537-0000F8753ED1}
- devcon 堆栈 * 显示:
- 安装类当然是 DiskDrive 类(GUID 形式)
- 上层过滤器包括 partmgr 和 pgpwded
- devcon driverfiles * 显示已安装的 INF 文件和设备驱动程序文件分别为 %WINDIR%\inf\disk.inf [disk_install] 和 %WINDIR%\system32\drivers\disk.sys
- 检查注册表中的 DiskDrive GUID 时,UpperFilters 确认 PartMgr 和 pgpwded 条目。
- 我在 HKLM\System\ControlSet001\Services\PGPwded 中找到了该服务
- 错误控制:1
- 组: 过滤器
- 开始: 0
- 类型:1
- 尝试停止服务(“PGPwded 存储过滤服务”)失败,并显示“请求的暂停、继续或停止对于该服务无效”
- 虽然
devcon classfilter diskdrive upper !pgpwded
成功了,但它不会主动从内存中卸载它,直到重新启动。(我们做不到) - 最后,这些是通常与 PGP 相关的文件:
- %WINDIR%\System32\pgpcl.dll
- %WINDIR%\System32\pgpiconv.dll
- %WINDIR%\System32\pgpsdk.dll
- %WINDIR%\System32\pgpsdknl.dll
- %WINDIR%\System32\pgpsdkui.dll
- %WINDIR%\System32\pgpwd.dll
- %WINDIR%\System32\pgpwdesdk.dll
- %WINDIR%\System32\drivers\pgpsdk.sys
- %WINDIR%\System32\drivers\pgpwded.sys
将“Start”类型常量从 0(代表启动卷的驱动程序堆栈的一部分,因此必须由启动加载程序加载)更改为:
- 2 = 无论服务类型如何,每次启动时都会自动加载或启动;或
- 3 = 可用,无论类型如何,但直到手动启动才会启动
我想我已经尽我所能了,虽然我担心最坏的情况会发生,但我还是向社区寻求建议。