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_KEY_WORK_ITEM_H_
6#define CHROME_INSTALLER_UTIL_DELETE_REG_KEY_WORK_ITEM_H_
7
8#include <windows.h>
9
10#include <string>
11
12#include "base/basictypes.h"
13#include "base/compiler_specific.h"
14#include "chrome/installer/util/registry_key_backup.h"
15#include "chrome/installer/util/work_item.h"
16
17class RegistryKeyBackup;
18
19// A WorkItem subclass that deletes a registry key at the given path.  Be aware
20// that in the event of rollback the key's values and subkeys are restored but
21// the key and its subkeys take on their default security descriptors.
22class DeleteRegKeyWorkItem : public WorkItem {
23 public:
24  virtual ~DeleteRegKeyWorkItem();
25
26  virtual bool Do() OVERRIDE;
27
28  virtual void Rollback() OVERRIDE;
29
30 private:
31  friend class WorkItem;
32
33  DeleteRegKeyWorkItem(HKEY predefined_root,
34                       const std::wstring& path,
35                       REGSAM wow64_access);
36
37  // Root key from which we delete the key. The root key can only be
38  // one of the predefined keys on Windows.
39  HKEY predefined_root_;
40
41  // Path of the key to be deleted.
42  std::wstring path_;
43
44  // Whether to force 32-bit or 64-bit view of the target key.
45  REGSAM wow64_access_;
46
47  // Backup of the deleted key.
48  RegistryKeyBackup backup_;
49
50  DISALLOW_COPY_AND_ASSIGN(DeleteRegKeyWorkItem);
51};
52
53#endif  // CHROME_INSTALLER_UTIL_DELETE_REG_KEY_WORK_ITEM_H_
54