Files
2019-12-01 00:43:54 +01:00

70 lines
2.2 KiB
C++

#pragma once
#include "../../ExeElementWrapper.h"
#include "../ResourceLeafWrapper.h"
#include "../pe_formats.h"
class ResourceContentFactory;
class ResourceContentWrapper : public ExeNodeWrapper
{
public:
static QString translateType(pe::resource_type type);
virtual ~ResourceContentWrapper() {}
void* getResContentPtr();
bufsize_t getResContentSize();
offset_t getContentRaw();
pe::resource_type getType() { return typeId; }
virtual void* getPtr() { return getResContentPtr(); }
virtual bufsize_t getSize() { return getResContentSize(); }
virtual QString getName() { return translateType(this->typeId); }
virtual size_t getFieldsCount() { return 1; }
virtual size_t getSubFieldsCount() { return 1; }
/* specific field boundatries */
virtual void* getFieldPtr(size_t fieldId, size_t subField) { return getPtr(); }
virtual QString getFieldName(size_t fieldId) { return getName(); }
virtual WrappedValue::data_type containsDataType(size_t fieldId, size_t subField = FIELD_NONE) { return WrappedValue::COMPLEX; }
protected:
ResourceContentWrapper(Executable *pe, ResourceLeafWrapper* v_leaf, pe::resource_type v_typeId)
: ExeNodeWrapper(pe), myLeaf(v_leaf), typeId(v_typeId) {}
BYTE* getContentAt(offset_t dataAddr, Executable::addr_type aT, bufsize_t dataSize);
ResourceLeafWrapper* myLeaf;
pe::resource_type typeId;
friend class ResourceContentFactory;
};
class ReourceManifestWrapper : public ResourceContentWrapper
{
public:
virtual WrappedValue::data_type containsDataType(size_t fieldId, size_t subField = FIELD_NONE) { return WrappedValue::STRING; }
protected:
ReourceManifestWrapper(Executable *pe, ResourceLeafWrapper* v_leaf)
: ResourceContentWrapper(pe, v_leaf, pe::RESTYPE_MANIFEST) {}
friend class ResourceContentFactory;
};
class ReourceHTMLWrapper : public ResourceContentWrapper
{
public:
virtual WrappedValue::data_type containsDataType(size_t fieldId, size_t subField = FIELD_NONE) { return WrappedValue::STRING; }
protected:
ReourceHTMLWrapper(Executable *pe, ResourceLeafWrapper* v_leaf)
: ResourceContentWrapper(pe, v_leaf, pe::RESTYPE_HTML
) {}
friend class ResourceContentFactory;
};