chromium/chrome/installer/mini_installer/enumerate_resources.h

// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROME_INSTALLER_MINI_INSTALLER_ENUMERATE_RESOURCES_H_
#define CHROME_INSTALLER_MINI_INSTALLER_ENUMERATE_RESOURCES_H_

#include <windows.h>

namespace mini_installer {

struct MemoryRange;

class ResourceEnumeratorDelegate {
 public:
  ResourceEnumeratorDelegate(const ResourceEnumeratorDelegate&) = delete;
  ResourceEnumeratorDelegate& operator=(const ResourceEnumeratorDelegate&) =
      delete;

  // Processes the resource named `name` in the memory range indicated by
  // `data_range`, which is guaranteed to not be empty. Enumeration is aborted
  // when false is returned.
  // Note: This method is not pure virtual because that would require linking
  // in purecall handlers from the standard library.
  virtual bool OnResource(const wchar_t* name, const MemoryRange& data_range);

 protected:
  ResourceEnumeratorDelegate() = default;
  // Note: This class's destructor is not virtual because doing so requires
  // linking in bits of the standard library.
  ~ResourceEnumeratorDelegate() = default;
};

// Invokes `delegate`'s `OnResource` method for each resource of `type` in
// `module`. Returns true if the enumeration runs to completion; false in case
// of error or if the delegate halts enumeration prematurely.
bool EnumerateResources(ResourceEnumeratorDelegate&& delegate,
                        HMODULE module,
                        const wchar_t* type);

}  // namespace mini_installer

#endif  // CHROME_INSTALLER_MINI_INSTALLER_ENUMERATE_RESOURCES_H_