15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_INSTALLER_UTIL_SET_REG_VALUE_WORK_ITEM_H__ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_INSTALLER_UTIL_SET_REG_VALUE_WORK_ITEM_H__ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <windows.h> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/installer/util/work_item.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A WorkItem subclass that sets a registry value with REG_SZ, REG_DWORD, or 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// REG_QWORD type at the specified path. The value is only set if the target key 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// exists. 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SetRegValueWorkItem : public WorkItem { 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~SetRegValueWorkItem(); 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool Do(); 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Rollback(); 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class WorkItem; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum SettingStatus { 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The status before Do is called. 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SET_VALUE, 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // One possible outcome after Do(). A new value is created under the key. 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NEW_VALUE_CREATED, 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // One possible outcome after Do(). The previous value under the key has 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // been overwritten. 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VALUE_OVERWRITTEN, 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // One possible outcome after Do(). No change is applied, either 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // because we are not allowed to overwrite the previous value, or due to 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // some errors like the key does not exist. 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VALUE_UNCHANGED, 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The status after Do and Rollback is called. 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VALUE_ROLL_BACK 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetRegValueWorkItem(HKEY predefined_root, 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::wstring& key_path, 47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) REGSAM wow64_access, 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::wstring& value_name, 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::wstring& value_data, 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool overwrite); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 52cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) SetRegValueWorkItem(HKEY predefined_root, 53cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const std::wstring& key_path, 54cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) REGSAM wow64_access, 55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const std::wstring& value_name, 56cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DWORD value_data, 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool overwrite); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 59cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) SetRegValueWorkItem(HKEY predefined_root, 60cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const std::wstring& key_path, 61cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) REGSAM wow64_access, 62cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const std::wstring& value_name, 63cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) int64 value_data, 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool overwrite); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Root key of the target key under which the value is set. The root key can 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // only be one of the predefined keys on Windows. 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HKEY predefined_root_; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Path of the target key under which the value is set. 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::wstring key_path_; 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Name of the value to be set. 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::wstring value_name_; 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Whether to overwrite the existing value under the target key. 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool overwrite_; 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 79cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Whether to force 32-bit or 64-bit view of the target key. 80cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) REGSAM wow64_access_; 81cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Type of data to store 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DWORD type_; 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<uint8> value_; 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DWORD previous_type_; 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<uint8> previous_value_; 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SettingStatus status_; 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_INSTALLER_UTIL_SET_REG_VALUE_WORK_ITEM_H__ 92