Files
Work/image/EXPORT.HPP
2024-08-07 09:16:27 -04:00

83 lines
2.9 KiB
C++

#ifndef _IMAGE_EXPORTDESCRIPTOR_HPP_
#define _IMAGE_EXPORTDESCRIPTOR_HPP_
#ifndef _COMMON_PUREDWORD_HPP_
#include <common/puredwrd.hpp>
#endif
#ifndef _COMMON_PUREWORD_HPP_
#include <common/purewrd.hpp>
#endif
#ifndef _COMMON_PUREVIEWOFFILE_HPP_
#include <common/pview.hpp>
#endif
#ifndef _COMMON_ARRAY_HPP_
#include <common/array.hpp>
#endif
#ifndef _IMAGE_IMAGESECTIONHEADERS_HPP_
#include <image/sctnhdrs.hpp>
#endif
#ifndef _IMAGE_IMAGEEXPORTDIRECTORY_HPP_
#include <image/expdir.hpp>
#endif
#ifndef _IMAGE_IMAGEEXPORTDESCRIPTOR_HPP_
#include <image/expdsc.hpp>
#endif
class ImageExportDescriptors : public ImageExportDirectory, public Array<ImageExportDescriptor>
{
public:
ImageExportDescriptors(void);
ImageExportDescriptors(const ImageExportDescriptors &someImageExportDescriptors);
virtual ~ImageExportDescriptors();
ImageExportDescriptors &operator=(const ImageExportDescriptors &someImageExportDecsriptors);
WORD operator==(const ImageExportDescriptors &someImageExportDescriptors)const;
WORD loadImageExports(PureViewOfFile &pureView,ImageSectionHeaders &imageSectionHeaders,WORD sortFlag);
WORD locateImageExportName(String imageExportName,ImageExportDescriptor &imageExportDescriptor,DWORD &exportIndex);
WORD locateImageExportOrdinal(DWORD exportOrdinal,ImageExportDescriptor &imageExportDescriptor,DWORD &exportIndex);
private:
enum {OrdinalPrefix='@'};
WORD loadExportNames(Array<String> &exportNames,ImageSectionHeaders &imageSectionHeaders,PureViewOfFile &pureView);
WORD loadExportOrdinals(Array<PureWORD> &exportOrdinals,ImageSectionHeaders &imageSectionHeaders,PureViewOfFile &pureView);
WORD loadExportFunctions(Array<PureDWORD> &exportFunctions,ImageSectionHeaders &imageSectionHeaders,PureViewOfFile &pureView);
WORD combineExportDescriptors(Array<String> &exportNames,Array<PureWORD> &exportOrdinals,Array<PureDWORD> &exportFunctions);
WORD makeOrdinalValue(String imageExportName,WORD &exportOrdinal)const;
};
inline
ImageExportDescriptors::ImageExportDescriptors(void)
{
}
inline
ImageExportDescriptors::ImageExportDescriptors(const ImageExportDescriptors &someImageExportDescriptors)
{
*this=someImageExportDescriptors;
}
inline
ImageExportDescriptors::~ImageExportDescriptors()
{
}
inline
ImageExportDescriptors &ImageExportDescriptors::operator=(const ImageExportDescriptors &someImageExportDescriptors)
{
(Array<ImageExportDescriptor>&)*this=(Array<ImageExportDescriptor>&)someImageExportDescriptors;
return *this;
}
inline
WORD ImageExportDescriptors::operator==(const ImageExportDescriptors &someImageExportDescriptors)const
{
return (Array<ImageExportDescriptor>&)*this==(Array<ImageExportDescriptor>&)someImageExportDescriptors;
}
inline
WORD ImageExportDescriptors::makeOrdinalValue(String imageExportName,WORD &exportOrdinal)const
{
if(imageExportName.isNull())return FALSE;
if(OrdinalPrefix!=imageExportName[(DWORD)0])return FALSE;
exportOrdinal=(int)imageExportName.betweenString(OrdinalPrefix,0).toInt();
return TRUE;
}
#endif