| Index: chrome_elf/blacklist/blacklist.cc
|
| diff --git a/chrome_elf/blacklist/blacklist.cc b/chrome_elf/blacklist/blacklist.cc
|
| index f87c41a16a36b681160be17a4a095f413d287865..7413ee33c590af883c7800a348f3848d2f6277a2 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,41 @@ bool IsNonBrowserProcess() {
|
|
|
| namespace blacklist {
|
|
|
| -bool CreateBeacon() {
|
| - HKEY beacon_key = NULL;
|
| - DWORD disposition = 0;
|
| - LONG result = ::RegCreateKeyEx(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;
|
| +bool LeaveSetupBeacon() {
|
| + DWORD blacklist_state = BLACKLIST_DISABLED;
|
| + DWORD blacklist_state_size = sizeof(blacklist_state);
|
| + LONG result = ::RegGetValue(HKEY_CURRENT_USER,
|
| + kRegistryBeaconPath,
|
| + kBeaconState,
|
| + RRF_RT_REG_DWORD,
|
| + NULL,
|
| + &blacklist_state,
|
| + &blacklist_state_size);
|
| +
|
| + if (blacklist_state != BLACKLIST_ENABLED ||
|
| + result != ERROR_SUCCESS)
|
| + return false;
|
| +
|
| + blacklist_state = BLACKLIST_SETUP_RUNNING;
|
| + result = ::RegSetKeyValue(HKEY_CURRENT_USER,
|
| + kRegistryBeaconPath,
|
| + 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 +233,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.
|
|
|