RegNotifyChangeKeyValue

RegNotifyChangeKeyValue

我正在使用RegNotifyChangeKeyValue API来跟踪对我的注册表项和C++示例的更改,这些更改类似于该MSDN页面底部给出的示例。我将此API设置为:

RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"Software\\Company\\Product", 0, KEY_NOTIFY, &hKey);
RegNotifyChangeKeyValue(hKey, FALSE, REG_NOTIFY_CHANGE_LAST_SET, hEvent, TRUE);

因此,例如,当信号通知此API将其作为参数的事件时(这意味着对Software\Company\Product键进行了更改),是否有任何方法可以找出实际触发了哪个值?

最佳答案

否。您需要在调用RegNotifyChangeKeyValue之后缓存当前的名称/值对,然后在发出信号时可以将最新的名称/值对与缓存进行比较,以查看有何不同,然后为下一个信号更新缓存。

如果在RegNotifyChangeKeyValue调用之前构建缓存,并且两个操作之间的某个线程进行了更新,则缓存将不会反射(reflect)实际状态,并且可能在下次更新时引起问题(取决于您的需要)。

在RegNotifyChangeKeyValue之后建立缓存可能会导致发出信号,但无法知道所涉及的值(如果更新是由两个操作之间的另一个线程进行的)。没什么大不了的:只是假装不做任何改变。

关于c++ - 如何判断哪个值触发了RegNotifyChangeKeyValue?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19888347/

10-08 23:05