Home | History | Annotate | Download | only in util
      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.
     17 class 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