| // Copyright 2018 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROME_CHROME_CLEANER_COMPONENTS_SYSTEM_RESTORE_POINT_COMPONENT_H_ |
| #define CHROME_CHROME_CLEANER_COMPONENTS_SYSTEM_RESTORE_POINT_COMPONENT_H_ |
| |
| #include <windows.h> |
| |
| #include <srrestoreptapi.h> |
| #include <stdint.h> |
| |
| #include <vector> |
| |
| #include "base/native_library.h" |
| #include "base/strings/string16.h" |
| #include "chrome/chrome_cleaner/components/component_api.h" |
| |
| namespace chrome_cleaner { |
| |
| // This class manages the setting and clearing of a system restore point. |
| class SystemRestorePointComponent : public ComponentAPI { |
| public: |
| explicit SystemRestorePointComponent(const base::string16& product_fullname); |
| |
| // ComponentAPI methods. |
| void PreScan() override; |
| void PostScan(const std::vector<UwSId>& found_pups) override; |
| void PreCleanup() override; |
| void PostCleanup(ResultCode result_code, RebooterAPI* rebooter) override; |
| void PostValidation(ResultCode result_code) override; |
| void OnClose(ResultCode result_code) override; |
| |
| protected: |
| // The below typedefs and members have protected visibility for testing. |
| typedef BOOL(WINAPI* SetRestorePointInfoWFn)(PRESTOREPOINTINFOW, |
| PSTATEMGRSTATUS); |
| typedef BOOL(WINAPI* RemoveRestorePointFn)(DWORD); |
| |
| SetRestorePointInfoWFn set_restore_point_info_fn_; |
| RemoveRestorePointFn remove_restore_point_info_fn_; |
| |
| private: |
| // Perform internal sanity checks to validate the presence of the restore |
| // point library. |
| bool IsLoadedRestorePointLibrary(); |
| // Safe wrappers to dynamic calls to the restore point library. |
| bool SetRestorePointInfoWrapper(PRESTOREPOINTINFOW, PSTATEMGRSTATUS); |
| bool RemoveRestorePointWrapper(DWORD); |
| |
| base::NativeLibrary srclient_dll_; |
| int64_t sequence_number_; |
| base::string16 product_fullname_; |
| }; |
| |
| } // namespace chrome_cleaner |
| |
| #endif // CHROME_CHROME_CLEANER_COMPONENTS_SYSTEM_RESTORE_POINT_COMPONENT_H_ |