Index: chrome_elf/blacklist/blacklist.cc |
diff --git a/chrome_elf/blacklist/blacklist.cc b/chrome_elf/blacklist/blacklist.cc |
index f87c41a16a36b681160be17a4a095f413d287865..10a07ce18d421a8d3a402244b95aff5ede97730f 100644 |
--- a/chrome_elf/blacklist/blacklist.cc |
+++ b/chrome_elf/blacklist/blacklist.cc |
@@ -22,6 +22,8 @@ const wchar_t* g_troublesome_dlls[kTroublesomeDllsMaxCount] = {}; |
int g_troublesome_dlls_cur_index = 0; |
const wchar_t kRegistryBeaconPath[] = L"SOFTWARE\\Google\\Chrome\\BLBeacon"; |
+const wchar_t kBeaconVersion[] = L"version"; |
+const wchar_t kBeaconState[] = L"state"; |
} // namespace blacklist |
@@ -145,27 +147,40 @@ bool IsNonBrowserProcess() { |
namespace blacklist { |
-bool CreateBeacon() { |
- HKEY beacon_key = NULL; |
- DWORD disposition = 0; |
- LONG result = ::RegCreateKeyEx(HKEY_CURRENT_USER, |
+bool LeaveSetupBeacon() { |
+ DWORD blacklist_state = 0; |
robertshield
2014/01/02 20:42:22
= BLACKLIST_DISABLED;
csharp
2014/01/02 21:57:59
Done.
|
+ DWORD blacklist_state_size = sizeof(blacklist_state); |
+ ::RegGetValue(HKEY_CURRENT_USER, |
+ kRegistryBeaconPath, |
+ kBeaconState, |
+ RRF_RT_REG_DWORD, |
+ NULL, |
+ &blacklist_state, |
+ &blacklist_state_size); |
robertshield
2014/01/02 20:42:22
Check the return value of RegGetValue and also fai
csharp
2014/01/02 21:57:59
Done.
|
+ |
+ if (blacklist_state != BLACKLIST_ENABLED) |
+ return false; |
+ |
+ blacklist_state = BLACKLIST_SETUP_RUNNING; |
+ LONG result = ::RegSetKeyValue(HKEY_CURRENT_USER, |
kRegistryBeaconPath, |
- 0, |
- NULL, |
- 0, |
- KEY_WRITE, |
- NULL, |
- &beacon_key, |
- &disposition); |
- bool success = (result == ERROR_SUCCESS && |
- disposition != REG_OPENED_EXISTING_KEY); |
- if (result == ERROR_SUCCESS) |
- ::RegCloseKey(beacon_key); |
- return success; |
+ kBeaconState, |
+ REG_DWORD, |
+ &blacklist_state, |
+ sizeof(blacklist_state)); |
+ |
+ return (result == ERROR_SUCCESS); |
} |
-bool ClearBeacon() { |
- LONG result = ::RegDeleteKey(HKEY_CURRENT_USER, kRegistryBeaconPath); |
+bool ResetBeacon() { |
+ DWORD blacklist_state = BLACKLIST_ENABLED; |
+ LONG result = ::RegSetKeyValue(HKEY_CURRENT_USER, |
+ kRegistryBeaconPath, |
+ kBeaconState, |
+ REG_DWORD, |
+ &blacklist_state, |
+ sizeof(blacklist_state)); |
+ |
return (result == ERROR_SUCCESS); |
} |
@@ -217,7 +232,7 @@ bool Initialize(bool force) { |
return false; |
// Check to see if a beacon is present, abort if so. |
- if (!force && !CreateBeacon()) |
+ if (!force && !LeaveSetupBeacon()) |
return false; |
// Don't try blacklisting on unsupported OS versions. |