Chromium Code Reviews| 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. |