我需要跟踪注册表更改。我需要详细信息,因此RegNotifyChangeKeyValue
还不够。所以,我在谷歌找到的唯一方法是使用这个可怕的Event Tracing。
在配置所有内容并实际获取数据后,我Registry_TypeGroup1 class
发出了EVENT_TRACE
:
[EventType{...}]class Registry_TypeGroup1 : Registry
{
sint64 InitialTime;
uint32 Status;
uint32 Index;
uint32 KeyHandle;
string KeyName;
};
根据文档,KeyName
只是注册表项的名称,而不是给定事件的完整密钥路径。但问题是我需要密钥的完整路径!
如果我将KeyHandle
从uint32
转换为HKEY
并使用NtQueryKey
(like this) - 该功能将失败并显示未知状态。
那么,有没有办法从EVENT_TRACE
的{{1}}实例中检索完整的注册表项路径?
(我问的是因为我在某处读过ProcMon使用事件跟踪并显示事件的完整注册表路径...或者是否将系统调用挂钩到EVENT_TRACE_FLAG_REGISTRY
函数?)
答案 0 :(得分:0)
根据this thread,您可以使用MSDN中可以看到的KCBRundownEnd来收集所有注册表。 KCBRundownEnd事件日志中有完整的basename和KeyHandle,可以匹配KeyHandle得到对应的basename。