Shr*_*ut1 45 windows-registry hibernate windows-10
特尔;博士:
我注意到,如果我更改注册表然后硬关闭我的 Windows 10 系统,则重新启动后不会出现注册表更改。
我还注意到,删除休眠文件会影响 Linux 恢复工具在脱机状态下更改 Windows 注册表的能力。删除休眠文件后,该工具似乎无法进行持久更改。我将在下面列出具体的例子。
示例 1:
示例 2:
这似乎相当于在盒子上硬关机。
示例 3:
我在以下情况下看到陌生人的行为:
这些更改也不会反映在注册表中。
那么这里发生了什么?
希望得到一些澄清!
Mok*_*bai 55
TL;DR:正确关闭您的系统。
休眠与关闭无关,它与挂起到 RAM(睡眠)密切相关,除了将 RAM 的内容推送到磁盘以便将其读回并从系统停止的确切位置恢复操作.
如果您希望更改持续存在,那么您需要禁用休眠和Windows Fastboot(这是休眠的一个子集)。或者您实际上可以重新启动而不是休眠并重新启动。
更改未持久化的原因是因为除了在休眠文件中之外,它们还没有写入磁盘。您正在删除,这意味着文件系统很可能必须自我修复并返回到“最后一次已知良好”状态。
当系统处于休眠状态时,将会有几个关键的文件系统结构可能没有写出到磁盘而是在 RAM 中。在从休眠状态恢复时,系统将期望磁盘处于非常特殊的状态,并且有可能将磁盘缓存和重要的系统文件保存到休眠文件而不是实际磁盘中。
如果您正确关闭, Windows 将正确地将工作内存刷新到磁盘,然后在关闭电源之前干净地卸载磁盘。
要强制正确关闭,请打开命令提示符并键入
shutdown /s /f /t 0
Run Code Online (Sandbox Code Playgroud)
/s是“关闭”,/f强制,并/t 0表示“现在”(时间 = 0 秒)
或者您可以禁用快速启动和休眠。
在HowtoGeek 上阅读更多信息:关闭并不能完全关闭 Windows 10(但重新启动可以)
与您进行硬关机相关的问题是,Windows 不能保证在您进行更改的同一毫秒(甚至一分钟)内将任何更改写入磁盘。它几乎肯定会在几分钟内被写出来,但它被实际写出来的概率会随着时间的推移而增加。不太可能立即写入,然后接近您进行更改的时间,可能性会急剧增加,并且几乎可以肯定会在一个小时内写入。
但问题是,通过强制硬关机,您并没有给系统安全地将更改写入磁盘的机会。
大多数现代文件系统的编写都是为了以最安全的方式进行更改。在过去,它们被称为“原子的”,因为变化要么已经发生,要么没有。
今天,我们将它们称为日志式文件系统,因为它们保留了将发生的操作日志,这些日志可以在系统出现故障和重新启动时恢复或前滚。从电源故障启动时,系统会检查日志,并针对每个事务检查实际文件数据是否已写入磁盘并且是否“良好”。如果是,则事务向前滚动并完成,如果不是,则它回滚到旧数据。
通过使用此顺序,磁盘几乎总是处于易于修复的状态。
但是,通过强制您的系统意外关闭电源,您无法保证事务的进展程度是否足以在修复时前滚,而且 Linux 等操作系统可能不像 Windows 那样关心事务历史,而且更有可能而不是仅仅进行将所有内容向后而不是向前滚动的更改。
如果您重新启动到 Windows,它可能会尝试或能够正确修复磁盘,因为它对文件系统有更深入的了解。
小智 40
调用RegFlushKey是一项代价高昂的操作,会显着影响系统范围的性能,因为它会消耗磁盘带宽并阻止注册表配置单元中所有进程对所有键的修改,这些进程在刷新操作完成之前正在刷新。仅当应用程序必须保证注册表更改在修改后立即保留到磁盘时,才应显式调用RegFlushKey。对键所做的所有修改对其他进程都是可见的,而无需将它们刷新到磁盘。
或者,注册表具有“延迟刷新”机制,可以定期将注册表修改刷新到磁盘。除了此常规刷新操作之外,注册表更改还会在系统关闭时刷新到磁盘。允许“延迟刷新”刷新注册表更改是管理注册表写入磁盘上注册表存储的最有效方法。
这表明,除了立即将特定键刷新到磁盘(在刷新完成之前将其他所有人锁定在注册表之外)之外,还会定期自动刷新注册表:没有给出时间,但据推测它至少比您在写入密钥和硬关机之间等待的时间。此外,正如您已经知道的那样,它在关闭时被刷新。
RegFlushKey如果这对您的使用情况至关重要,您可以使用该软件中操作所述键的功能,或者使用它创建一个附加工具来强制立即将注册表项写入磁盘。
现已失效的“在 Windows 8 或 Windows Server 2012 上保存应用程序注册表更改” Microsoft 支持文章(archive.org 链接在此)声明如下:
为了最大限度地提高性能,Windows 8 和 Windows Server 2012 中的注册表更新不会立即刷新到磁盘。相反,注册表会定期将修改后的注册表数据刷新到磁盘。此外,修改后的注册表数据会在系统关闭时保存到磁盘。在大多数情况下,这些机制足以确保注册表修改安全地到达磁盘。
由于注册表更改不会立即刷新到磁盘,如果计算机在应用程序修改注册表后立即断电,则可能无法保存应用程序的注册表更改。如果发生这种情况,应用程序可能会在系统重新启动时观察到以下影响:
- 应用程序所做的注册表更改可能不可见
- 新安装的驱动程序可能不再安装,需要重新安装
- 新卸载的驱动仍会安装,需要再次卸载
应用程序或安装程序可以请求使用 RegFlushKey API 立即将其注册表修改写入磁盘。但是,调用 RegFlushKey 是一项代价高昂的操作,会显着影响系统范围的性能。应用程序和安装程序只有在必须保证他们的注册表修改被立即保存到磁盘时才应该调用这个 API。
此外,摘自Mokubai 的回应:
当系统处于休眠状态时,将会有几个关键的文件系统结构可能没有写出到磁盘而是在 RAM 中。从休眠状态恢复后,系统将期望磁盘处于非常特殊的状态,并且有可能将磁盘缓存和重要的系统文件保存到休眠文件而不是实际磁盘中...
该回复中链接的 How To Geek 文章非常有用:
快速启动将传统的关机过程与休眠混合在一起。启用快速启动后,Windows 10 会丢弃所有打开的程序和文件(就像在传统关机期间一样),但会将 Windows 内核的状态保存到磁盘(就像在休眠期间一样)。下次启动 PC 时,Windows 会恢复内核并启动系统的其余部分。
在快速启动/混合关机和刷新键的延迟之间,大多数部分都结合在一起。如果系统设法将修改存储在内存中但没有刷新到磁盘,那么它会在混合关机时保存在休眠文件中,或者在硬关机时被丢弃。如果休眠文件被恢复工具丢弃,则更改也将不再存在。
use*_*686 14
上的文档是FSCTL_MARK_AS_SYSTEM_HIVE这样说的:
该
FSCTL_MARK_AS_SYSTEM_HIVE控制代码通知文件系统中指定的文件包含注册表的系统配置单元。文件系统必须在适当的时候将系统配置单元数据刷新到磁盘,以避免死锁并确保数据完整性。
我认为没有比这更公开的细节了。
请记住,刷新文件系统并不意味着刷新注册表,因为注册表可以在文件系统之上执行缓存。要首先刷新注册表,您需要以某种方式导致NtFlushKey或ZwFlushKey调用您感兴趣的密钥。
| 归档时间: |
|
| 查看次数: |
9176 次 |
| 最近记录: |