Windows 机密 强制句柄已关闭
Raymond Chen
有过想要删除文件但无法因为某些程序都有文件打开? 正确的内容是否在这种情况下是说服了该文件的程序打开以将其关闭,您可以对于是实例向编辑文档此人,将其关闭。 但有时您获取 impatient,并使用一些实用工具可以强制关闭的文件句柄。 然后已经卖者长期的数据损坏的临时缓解。
强制关闭句柄等效于连接到程序并释放一些内存。 该程序认为句柄 (或内存) 仍然有效并且将继续使用它。 但由于句柄是真正的免费,将重用它的其他内容。
假设您是在中学并看到在锁定者数所需的 305 简介册。 您强制该锁定程序打开并简介册。 现在该锁定程序已打开,其他人提供的并将自己簿包放到其中。 同时,午餐,从返回的原始所有者的锁定者 305 获取该简介册包,并将其类。
现在有两个问题: 锁定者 305 的原始用户具有错误的簿包,并且处于危险的其他人的笔记本中记笔记。 此第二个人同时,只有被盗时其簿包。
如果您非常幸运接下来该程序将执行的是关闭不得不之前关闭句柄。 该程序获取了无效的句柄错误,但因为没什么可以程序只是继续像在句柄已成功关闭。 但这是很少情况。
更可能是该程序最终将回到句柄,并尝试使用它,出现无效的句柄错误。 更多可能是句柄在强制关闭将被用于其他地方是。 这就时操作启动转完全 berserk。 假设句柄已作为另一个文件中重复使用。 现在程序认为读取并写入在第一个的文件中,但实际上它的第二个文件上运行。 结果是在第一个文件 (不应写入数据) 和第二个文件 (用于为第一个文件被写入到第二个文件的数据) 中的数据损坏。
该程序关闭第一个文件时, 它也会关闭回收句柄。 您创建一个级联错误: 您强制关闭,第一个文件,并且其结果是一些第二个句柄被强制关闭。
此数据损坏可以无限期地,继续为请求句柄已由早期组件无意中损坏的句柄的每个组件。 早期组件最后关闭它认为是有效的句柄时, 实际关闭句柄由当前组件现在将继续损坏请求句柄的下一个组件。
假设搜索索引服务有一个打开文件进行索引,但已就暂时阻塞,并且想要删除文件,因此您 (unwisely 强制关闭句柄。 搜索索引服务以记录某些的信息中打开其日志文件并对已删除的文件句柄回收为该日志文件在句柄。 停留的操作最后完成,和搜索索引服务最后关闭该句柄,它周围的获取打开,但是它最终会无意关闭日志文件句柄。
搜索索引服务打开另一个文件,说编写使它可以更新某些持久状态的配置文件。 在日志文件的句柄获取与配置文件句柄回收。 搜索索引服务需要记录某些所在的信息,因此它写入其日志文件。 遗憾的是,日志文件句柄已关闭,句柄上重新使用其配置文件。 记录的信息进入访问在配置文件并损坏它。
同时,另一个句柄您强制关闭时重用作为用于帮助防止数据被损坏一个互斥体句柄。 关闭原始文件句柄时, 互斥体句柄已关闭,并且对数据损坏保护会丢失。 越长服务运行,更损坏将成为其索引。 最终,人注意索引将返回不正确的结果。 并尝试重新启动服务时失败因为其配置文件已被损坏。
此问题报告到搜索索引服务和在确定索引已损坏的使,在日志文件 mysteriously 已停止日志记录,并且配置文件被覆盖垃圾回收公司中。 某些较差的技术人员被分配 hopeless 任务的确定为什么该服务的损坏了它的索引和不支持的配置文件的损坏的来源强制执行关闭句柄。
Raymond Chen 网站" 旧的新内容"和相同的标题为简介册 (Addison-Wesley,2007) 讨论了 Windows 历史、 Win 32 编程和 misreading 报纸标题。