[Tips] HOWTO: 为 MMC 管理器无法关闭进行排错
HOWTO: 为 MMC 管理器无法关闭进行排错
今天 gOxiA 跟大家分享一个 MMC 管理器无法关闭的排错案例,具体故障现象是使用 Hyper-V 管理器后关闭时会遭遇其管理控制台无法关闭的故障问题,具体提示内容是“关闭 Hyper-V 管理器前你必须关闭所有会话框”。
常规排错时,我们可以使用 ProcessMonitor 工具进行分析,从 Procmon 的日志来看管理器关闭失败的原因,它检测到了有 PropertySheets 的窗口还开着,可能的原因是有 Invisible 的窗体被归到了 Hyper-V 管理器的进程上。
接下来我们可以打开任务管理器确认当前发生故障问题的 MMC 的 PID 值,然后将其转换为16进制。之后使用 Microsoft Spy++,将视图改为 Process 模式,通过前面的16进制值,定位 MMC 的进程,并展开它来排查具体线程。
在本例中可看到一个可疑的线程包含 GDI+ Hook Windows Class 以及 Default IME。尝试切换输入法重新关闭 Hyper-V 管理器,已经可以正常关闭。日常当我们遇到 Windows 的一些异常问题时可以借鉴这个案例进行排查。
[Tips] HOWTO: 手动创建 Windows To Go
HOWTO: 手动创建 Windows To Go
Windows To Go 有些朋友应该并不陌生,它早先是内置在 Windows 中的一项功能,允许在 U盘上创建一个 Windows 运行实例,当然肯定是有诸多前提条件和限制的,而且因为无法支持功能更新,所以在 Windows 10 的 2004 及更高版本中删除了 Windows To Go。那为什么 gOxiA 今天又来分享它呢!?原因很简单,假如我想在当前一个设备上临时跑个操作系统(Windows Server),但设备的存储空间有限,并且也不希望对现有系统环境,如引导信息做任何更改,该怎么办?
这时 Windows To Go(以下简称 WTG)就发挥了它的优势,手头正好有个 SSD 的移动硬盘,基于 UEFI 方案创建了磁盘分区,本例只创建了 EFI (S:)、MSR 和 Windows (W:) 分区,与我们平常的系统盘是一样的。
然后将 Windows 安装盘中的 Install.wim 释放到 Windows 分区,具体步骤不再复述,使用 DISM 高效快捷。
映像释放完毕,使用 bcdboot 生成 BCD 即可,如下所示:
看到这里是不是觉得很简单,这不跟手动安装 Windows 一样?!没错,就是这么简单,但要想工作正常还需要做额外的准备,使用 Windows ADK 中的 WSIM 创建一个应答文件,对如下组件进行配置:
1. 将 Microsoft-Windows-PartitionManager 下的 SanPolicy 配置为 4,这样在 WTG 启动和运行时就不会加载设备本机的存储。有关 SanPolicy 的详细说明可以参考:https://docs.microsoft.com/zh-cn/windows-hardware/customize/desktop/unattend/microsoft-windows-partitionmanager-sanpolicy
2. 将 Microsoft-Windows-WinRE-RecoveryAgent 下的 UninstallWindows 配置为 true,这样将会从已安装的实例中删除 WinRE。
两项组件配置完毕后可将应答文件(Unattend.xml)保存到“W:\Windows\Panther”下,然后实行如下命令将应答文件应用到脱机实例。
为了确保 WTG 能正常驱动硬件设备,还请考虑使用 DISM 的 /Add-Dirver 参数提前将驱动注入到脱机实例中,最后将 WTG U盘连接到目标设备,从 U盘启动即可完成后续的初始化,直至系统进入正常使用状态。整个过程大家会注意到没有使用任何第三方工具,所以不论从便捷性还是安全性都有保障。如果你当前也遇到类似的使用场景不妨一试!
官方的最佳实践建议:
- 始终关闭 Windows 并等待关机完成,然后再移除 WTG U盘。
- 不要将 WTG U盘插入正在运行的计算机。
- 不用通过 USB Hub 连接 WTG U盘,应直接与设备端口连接。
- 使用 USB 3.0 端口。
- 不要在 WTG 实例中安装非 Microsoft 核心 USB 驱动。
本文结束前友情提示,如果你打算将 WTG 运行在 BIOS 和 UEFI 两种类型的设备上,需要在执行 bcdboot 生成 BCD 时附加“ /f ALL”参数,这样会生成两组启动组件,该模式支持的磁盘布局如下:
HOWTO: 解决 Windows 启动时发生 0xC0000428 故障问题
HOWTO: 解决 Windows 启动时发生 0xC0000428 故障问题
当企业 IT 人员为标准化映像注入了驱动,或通过部署平台在安装过程中动态注入驱动后,设备首次初始化(Specialized phase)时可能会遇到 0xC0000428 的故障问题,如下图所示:
从提示来看,是在加载某个驱动程序时发生了异常,报出了 0xC0000428 的 error code。看描述是说文件的数字签名依赖关系无法验证。查了一下代码可确认与签名证书有关!
由于无法进入安全模式,便无法从系统 UI 下卸载此驱动,此外也想验证一下是否还有其他驱动存在文件,唯一的办法是脱机对当前实例执行离线的驱动维护。具体办法如下:
找一个 PE 引导设备进入脱机环境,然后使用 DISM 获取当前实例的驱动存储列表,参考命令如下:
如果驱动较多可以加载“| more”,或直接“> drivers.txt”导出用记事本查阅。当找到报错的驱动程序后,确定其“已发布的名称”,类似“OEM.inf”命令方式。
然后,执行下面的命令,将驱动从实例中删除。
最后,退出 PE 重启设备测试是否可以正常初始化。
有关 DISM 维护驱动程序的官方文档可参考:https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/dism-driver-servicing-command-line-options-s14?view=windows-11