我正在尝试查找对注册表进行了哪些更改或启动了哪些进程。例如:如果我更改 windows-explorer 的视图以显示隐藏的文件和文件夹 - 我想查看哪个注册表项被更改了。
有人建议使用进程监视器,但是 a) 有太多的注册表访问,并且 b) 我在那里找不到对注册表的任何更改。(虽然我记得读过它是对控制它的注册表的更改)
我这样做是因为我希望我的程序做同样的事情。
C# 中的答案会很好。
是的,哇,这可能会变得非常棘手,因为注册表可能很大。在过去,我会导出注册表的一个分支,比如 HKEY_LOCAL_MACHINE\SOFTWARE\InnaTech,然后运行一些我怀疑正在编辑该分支中的内容的程序,然后再次将其导出到另一个文件。如果分支不是很大,那么我可以观察它的差异,否则我会使用普通的差异程序 ala WinDiff 来查找任何更改。
RegNotifyChangeKeyValue() 是您需要调用的系统函数。我从未见过有人尝试从 C# 中使用它,但使用它应该不会比调用任何其他非托管代码更麻烦。基本上,你调用它,它在第一次更改后返回,你再次调用它并等待下一个 chande。
http://msdn.microsoft.com/en-us/library/windows/desktop/ms724892%28v=vs.85%29.aspx
对其用途有相当好的描述。
http://www.mydigitallife.info/trick-to-enable-show-hidden-files-and-folders-in-windows/
转到“开始”菜单并单击“运行”(Windows Vista 和 Windows 7 使用“开始搜索”)。键入 RegEdit 并按 Enter 键运行注册表编辑器。导航到以下注册表项:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\ CurrentVersion\Explorer\Advanced\Folder\Hidden\SHOWALL
在右窗格中,验证 CheckedValue 值数据是否为 REG_DWORD 类型。如果不是(如属于 REG_SZ),则删除 CheckedValue 值数据。如果 CheckedValue 已被删除,则创建一个新的 DWORD(32 位)值并将其命名为 CheckedValue。双击 CheckedValue 并将其值数据更改为 1(病毒可能会将其更改为 0 或 2)。在同一注册表项中,验证 Type 值数据是否为 REG_SZ 类型,并且具有值数据单选。如果没有,请将其设置为收音机。病毒可能会将其更改为空白。设置系统显示或显示所有隐藏文件、文件夹和驱动器,然后检查是否显示隐藏文件和文件夹。