delete_reg_value_work_item.h revision cedac228d2dd51db4b79ea1e72c7f249408ee061
1// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef CHROME_INSTALLER_UTIL_DELETE_REG_VALUE_WORK_ITEM_H_ 6#define CHROME_INSTALLER_UTIL_DELETE_REG_VALUE_WORK_ITEM_H_ 7 8#include <windows.h> 9 10#include <string> 11 12#include "chrome/installer/util/work_item.h" 13 14// A WorkItem subclass that deletes a registry value with REG_SZ, REG_DWORD, or 15// REG_QWORD type at the specified path. The value is only deleted if the target 16// key exists. 17class DeleteRegValueWorkItem : public WorkItem { 18 public: 19 virtual ~DeleteRegValueWorkItem(); 20 21 virtual bool Do(); 22 23 virtual void Rollback(); 24 25 private: 26 friend class WorkItem; 27 28 enum DeletionStatus { 29 // The status before Do is called. 30 DELETE_VALUE, 31 // One possible outcome after Do(). Value is deleted. 32 VALUE_DELETED, 33 // One possible outcome after Do(). Value is not found. 34 VALUE_NOT_FOUND, 35 // The status after Do() and Rollback() is called. 36 VALUE_ROLLED_BACK, 37 // Another possible outcome after Do() (when there is an error). 38 VALUE_UNCHANGED 39 }; 40 41 DeleteRegValueWorkItem(HKEY predefined_root, 42 const std::wstring& key_path, 43 REGSAM wow64_acccess, 44 const std::wstring& value_name); 45 46 // Root key of the target key under which the value is set. The root key can 47 // only be one of the predefined keys on Windows. 48 HKEY predefined_root_; 49 50 // Path of the target key under which the value is set. 51 std::wstring key_path_; 52 53 // Name of the value to be set. 54 std::wstring value_name_; 55 56 // Whether to force 32-bit or 64-bit view of the target key. 57 REGSAM wow64_access_; 58 59 DeletionStatus status_; 60 61 // Previous value. 62 DWORD previous_type_; 63 std::string previous_value_; 64}; 65 66#endif // CHROME_INSTALLER_UTIL_DELETE_REG_VALUE_WORK_ITEM_H_ 67