#pragma once #include "stdafx.hpp" #include namespace VSW::Materializer::Utilities { /// @brief The value representing a invalid CK_ID. constexpr CK_ID INVALID_CK_ID = static_cast(-1); constexpr char NULLPTR_CKSTRING[] = ""; class EnhancedReporter : public VSW::Reporter { public: EnhancedReporter(CKContext* ctx); ~EnhancedReporter(); protected: virtual void PrePrint(const YYCC::yycc_char8_t* strl) const override; private: CKContext* m_Ctx; }; /** * @brief Get relative address from given absolute address * @details This function is used when exporting function pointer into database. * @param[in] absolute_addr The absolute address * @return Module based relative address like \c xxx.dll+0x00000000. */ YYCC::yycc_u8string RelativeAddress(const EnhancedReporter& reporter, const void* absolute_addr); void CopyStrGuid(const EnhancedReporter& reporter, YYCC::yycc_u8string& dst, const CKGUID& src); void CopyGuid(const EnhancedReporter& reporter, int64_t& dst, const CKGUID& src); void CopyCKString( const EnhancedReporter& reporter, YYCC::yycc_u8string& storage, const char* str, UINT code_page, const YYCC::yycc_char8_t* fallback = YYCC::EncodingHelper::ToUTF8(NULLPTR_CKSTRING) ); }