JumpTo RegEdit






4.56/5 (8投票s)
一个 Sysinternals JumpTo 的克隆

引言
你有没有想过 RegJump (来自 Sysinternals) 是如何工作的? 我第一次看到这个功能时感到非常惊讶,并想知道如何在 C# 中实现它。
这里提供的库使用 Windows 消息来自动化注册表编辑器。 树的内容通过 TVM_GETITEM
消息读取,并通过发出适当的 WM_Keyxx
消息来导航树。 唯一棘手的部分是处理 TVM_GETITEM
的内存分配。 由于消息被发送到另一个进程,因此消息使用的内存必须在目标进程中分配。 幸运的是,这可以通过使用 VirtualAllocEx
并提供对远程进程的句柄来完成。
Jeffrey Richter 在 MSJ 上有一篇文章 描述了它是如何实现的,Cory Nelson 写了一篇出色的 文章,使用了相同的技术,而 Chris Taylor 在他的博客上有一些 互操作代码,我可以使用。
Using the Code
以下代码片段显示了如何使用示例项目中的代码
RegEditLocator.Locate(@"HKCU\SOFTWARE\Microsoft\.NETFramework");
关注点
根据 MSDN,函数 OpenProcess
需要 SeDebugPrivilege
才能工作。 我试图通过在 XP 的普通用户帐户上运行示例程序来验证这一点,并惊讶地发现它有效。 在 Vista 中重复相同的测试得到了预期的结果:程序将无法在受限帐户下工作。
另一个让我不太舒服的问题是,该实现基本上是一种依赖于 Regedit.exe 内部结构的黑客行为。 这意味着 Microsoft 的任何热修复或安全更新都可能破坏代码。
这段代码旨在更多地作为一种关于如何使用 C# 中的消息来自动化应用程序的指南/示例,而不是一个可以用于生产代码的库。
历史
- 2007 年 8 月 30 日:初始发布