| Index: chrome/installer/util/delete_reg_value_work_item.cc
|
| diff --git a/chrome/installer/util/delete_reg_value_work_item.cc b/chrome/installer/util/delete_reg_value_work_item.cc
|
| index 2d2da41d8b6d022bc91f57e1c88dcf5eda094d27..7579df6cb8598bad4dda8f2c657e1c800ca70fe1 100644
|
| --- a/chrome/installer/util/delete_reg_value_work_item.cc
|
| +++ b/chrome/installer/util/delete_reg_value_work_item.cc
|
| @@ -13,12 +13,17 @@ using base::win::RegKey;
|
|
|
| DeleteRegValueWorkItem::DeleteRegValueWorkItem(HKEY predefined_root,
|
| const std::wstring& key_path,
|
| - const std::wstring& value_name)
|
| + const std::wstring& value_name,
|
| + REGSAM wow64_access)
|
| : predefined_root_(predefined_root),
|
| key_path_(key_path),
|
| value_name_(value_name),
|
| + wow64_access_(wow64_access),
|
| previous_type_(0),
|
| status_(DELETE_VALUE) {
|
| + DCHECK(wow64_access == 0 ||
|
| + wow64_access == KEY_WOW64_32KEY ||
|
| + wow64_access == KEY_WOW64_64KEY);
|
| }
|
|
|
| DeleteRegValueWorkItem::~DeleteRegValueWorkItem() {
|
| @@ -36,8 +41,9 @@ bool DeleteRegValueWorkItem::Do() {
|
| RegKey key;
|
| DWORD type = 0;
|
| DWORD size = 0;
|
| - LONG result = key.Open(predefined_root_, key_path_.c_str(),
|
| - KEY_READ | KEY_WRITE);
|
| + LONG result = key.Open(predefined_root_,
|
| + key_path_.c_str(),
|
| + KEY_READ | KEY_WRITE | wow64_access_);
|
| if (result == ERROR_SUCCESS)
|
| result = key.ReadValue(value_name_.c_str(), NULL, &size, &type);
|
|
|
| @@ -83,8 +89,9 @@ void DeleteRegValueWorkItem::Rollback() {
|
|
|
| // At this point only possible state is VALUE_DELETED.
|
| RegKey key;
|
| - LONG result = key.Open(predefined_root_, key_path_.c_str(),
|
| - KEY_READ | KEY_WRITE);
|
| + LONG result = key.Open(predefined_root_,
|
| + key_path_.c_str(),
|
| + KEY_READ | KEY_WRITE | wow64_access_);
|
| if (result == ERROR_SUCCESS) {
|
| // try to restore the previous value
|
| DWORD previous_size = static_cast<DWORD>(previous_value_.size());
|
|
|