@ 261107.1
current
/* Copyright 2017 - 2026 R. Thomas
 * Copyright 2017 - 2026 Quarkslab
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#include "LIEF/runtime/windows/Module.hpp"
#include "LIEF/runtime/windows/Host.hpp"
#include "LIEF/runtime/windows/PEB.hpp"
#include "LIEF/runtime/windows/LdrDataTableEntry.hpp"
#include "LIEF/runtime/windows/Process.hpp"
#include "LIEF/runtime/windows/injector.hpp"
#include "LIEF/PE/Binary.hpp"
#include "LIEF/optional.hpp"


namespace LIEF::runtime {
namespace details {
class ModuleIt {};
class Module {};
}
}

namespace LIEF::runtime::windows {

namespace details {
class peb {};
class ldr_entry {};
class ldr_entry_it {};
}

std::unique_ptr<Module> dlopen(const std::string& /*name*/) {
  return nullptr;
}

std::unique_ptr<Module> find_module(const std::string& /*name*/) {
  return nullptr;
}

std::unique_ptr<Module> Module::from_handle(void* /*H*/) {
  return nullptr;
}

void* Module::handle() const {
  return nullptr;
}

void* Module::dlsym(const std::string& /*name*/) const {
  return nullptr;
}

std::unique_ptr<PE::Binary> Module::parse_from_path() const {
  return nullptr;
}

std::unique_ptr<PE::Binary>
    Module::parse_from_path(const PE::ParserConfig&) const {
  return nullptr;
}

std::unique_ptr<PE::Binary> Module::parse_from_memory() const {
  return nullptr;
}

std::unique_ptr<PE::Binary>
    Module::parse_from_memory(const PE::ParserConfig&) const {
  return nullptr;
}

bool injection_context_t::validate() const {
  return true;
}

std::string injection_context_t::to_string() const {
  return "";
}

ok_error_t inject_spawn(const injection_context_t& /*ctx*/) {
  return make_error_code(lief_errors::not_supported);
}

Host::version_t Host::version() {
  return {};
}

std::unique_ptr<PEB> Process::peb() {
  return nullptr;
}

bool PEB::being_debugged() const {
  return false;
}

uintptr_t PEB::ldr() const {
  return 0;
}

uintptr_t PEB::process_parameters() const {
  return 0;
}

uintptr_t PEB::atl_thunk_slist_ptr() const {
  return 0;
}

uint32_t PEB::atl_thunk_slist_ptr32() const {
  return 0;
}

uintptr_t PEB::post_process_init_routine() const {
  return 0;
}

uint32_t PEB::session_id() const {
  return 0;
}

PEB::PEB(std::unique_ptr<details::peb> /*impl*/) :
  impl_(nullptr) {}

PEB::PEB(PEB&&) noexcept = default;
PEB& PEB::operator=(PEB&&) noexcept = default;

PEB::~PEB() = default;

PEB::entries_it PEB::entries() const {
  return make_range(LdrDataTableEntry::Iterator(), LdrDataTableEntry::Iterator());
}

LdrDataTableEntry::
    LdrDataTableEntry(std::unique_ptr<details::ldr_entry> /*impl*/) :
  impl_(nullptr) {}

LdrDataTableEntry::LdrDataTableEntry(LdrDataTableEntry&&) noexcept = default;
LdrDataTableEntry&
    LdrDataTableEntry::operator=(LdrDataTableEntry&&) noexcept = default;

LdrDataTableEntry::~LdrDataTableEntry() = default;

uintptr_t LdrDataTableEntry::dll_base() const {
  return 0;
}

uintptr_t LdrDataTableEntry::entry_point() const {
  return 0;
}

uint32_t LdrDataTableEntry::size_of_image() const {
  return 0;
}

std::string LdrDataTableEntry::full_dll_name() const {
  return "";
}

std::string LdrDataTableEntry::base_dll_name() const {
  return "";
}

uint32_t LdrDataTableEntry::flags() const {
  return 0;
}

uint16_t LdrDataTableEntry::obsolete_load_count() const {
  return 0;
}

uint16_t LdrDataTableEntry::tls_index() const {
  return 0;
}

uint32_t LdrDataTableEntry::time_date_stamp() const {
  return 0;
}

uintptr_t LdrDataTableEntry::entry_point_activation_context() const {
  return 0;
}

uintptr_t LdrDataTableEntry::lock() const {
  return 0;
}

optional<uintptr_t> LdrDataTableEntry::ddag_node() const {
  return nullopt();
}

optional<uintptr_t> LdrDataTableEntry::load_context() const {
  return nullopt();
}

optional<uintptr_t> LdrDataTableEntry::parent_dll_base() const {
  return nullopt();
}

optional<uintptr_t> LdrDataTableEntry::switch_back_context() const {
  return nullopt();
}

optional<uintptr_t> LdrDataTableEntry::original_base() const {
  return nullopt();
}

optional<int64_t> LdrDataTableEntry::load_time() const {
  return nullopt();
}

optional<uint32_t> LdrDataTableEntry::base_name_hash_value() const {
  return nullopt();
}

optional<int32_t> LdrDataTableEntry::load_reason() const {
  return nullopt();
}

optional<uint32_t> LdrDataTableEntry::implicit_path_options() const {
  return nullopt();
}

optional<uint32_t> LdrDataTableEntry::reference_count() const {
  return nullopt();
}

optional<uint32_t> LdrDataTableEntry::dependent_load_flags() const {
  return nullopt();
}

optional<uint8_t> LdrDataTableEntry::signing_level() const {
  return nullopt();
}

optional<uint32_t> LdrDataTableEntry::check_sum() const {
  return nullopt();
}

optional<uintptr_t> LdrDataTableEntry::active_patch_image_base() const {
  return nullopt();
}

optional<uint32_t> LdrDataTableEntry::hot_patch_state() const {
  return nullopt();
}

std::string LdrDataTableEntry::to_string() const {
  return "";
}

LdrDataTableEntry::Iterator::Iterator() = default;

LdrDataTableEntry::Iterator::
    Iterator(std::unique_ptr<details::ldr_entry_it> /*impl*/) :
  impl_(nullptr) {}

LdrDataTableEntry::Iterator::Iterator(const Iterator&) :
  impl_(nullptr) {}

LdrDataTableEntry::Iterator&
    LdrDataTableEntry::Iterator::operator=(const Iterator& other) {
  if (this != &other) {
    cached_.reset();
  }
  return *this;
}

LdrDataTableEntry::Iterator::Iterator(Iterator&&) noexcept = default;
LdrDataTableEntry::Iterator&
    LdrDataTableEntry::Iterator::operator=(Iterator&&) noexcept = default;

LdrDataTableEntry::Iterator::~Iterator() = default;

bool operator==(const LdrDataTableEntry::Iterator&,
                const LdrDataTableEntry::Iterator&) {
  return true;
}

LdrDataTableEntry::Iterator& LdrDataTableEntry::Iterator::operator++() {
  return *this;
}

LdrDataTableEntry::Iterator& LdrDataTableEntry::Iterator::operator--() {
  return *this;
}

void LdrDataTableEntry::Iterator::load() const {}

const LdrDataTableEntry& LdrDataTableEntry::Iterator::operator*() const {
  return *cached_;
}

const LdrDataTableEntry* LdrDataTableEntry::Iterator::operator->() const {
  return cached_.get();
}

std::unique_ptr<LdrDataTableEntry> LdrDataTableEntry::Iterator::yield() {
  return nullptr;
}

}