#ifndef _IMAGE_IMAGEHEADER_HPP_ #define _IMAGE_IMAGEHEADER_HPP_ #ifndef _COMMON_WINDOWS_HPP_ #include #endif #ifndef _COMMON_PUREVIEWOFFILE_HPP_ #include #endif #ifndef _IMAGE_HARDWARE_HPP_ #include #endif #ifndef _IMAGE_IMAGEFLAGS_HPP_ #include #endif class ImageHeader : private _IMAGE_FILE_HEADER { public: ImageHeader(void); ImageHeader(const ImageHeader &someImageHeader); ~ImageHeader(); ImageHeader &operator=(const ImageHeader &someImageHeader); WORD operator==(const ImageHeader &someImageHeader); WORD operator<<(PureViewOfFile &pureView); Hardware hardware(void)const; WORD sectionCount(void)const; DWORD timeDateStamp(void)const; DWORD pointerSymbolTable(void)const; DWORD symbolCount(void)const; WORD sizeOptionalHeader(void)const; ImageFlags imageFlags(void)const; private: }; inline ImageHeader::ImageHeader(void) { ::memset((char*)&((_IMAGE_FILE_HEADER&)*this),0,sizeof(_IMAGE_FILE_HEADER)); } inline ImageHeader::ImageHeader(const ImageHeader &someImageHeader) { *this=someImageHeader; } inline ImageHeader::~ImageHeader() { } inline ImageHeader &ImageHeader::operator=(const ImageHeader &someImageHeader) { ::memcpy((char*)&((_IMAGE_FILE_HEADER&)*this),(char*)&((_IMAGE_FILE_HEADER&)someImageHeader),sizeof(_IMAGE_FILE_HEADER)); return *this; } inline WORD ImageHeader::operator==(const ImageHeader &someImageHeader) { return (hardware()==someImageHeader.hardware()&& sectionCount()==someImageHeader.sectionCount()&& timeDateStamp()==someImageHeader.timeDateStamp()&& pointerSymbolTable()==someImageHeader.pointerSymbolTable()&& symbolCount()==someImageHeader.symbolCount()&& sizeOptionalHeader()==someImageHeader.sizeOptionalHeader()&& imageFlags()==someImageHeader.imageFlags()); } inline WORD ImageHeader::operator<<(PureViewOfFile &pureView) { return sizeof(_IMAGE_FILE_HEADER)==pureView.read((char*)&((_IMAGE_FILE_HEADER&)*this),sizeof(_IMAGE_FILE_HEADER)); } inline Hardware ImageHeader::hardware(void)const { return Hardware(_IMAGE_FILE_HEADER::Machine); } inline WORD ImageHeader::sectionCount(void)const { return _IMAGE_FILE_HEADER::NumberOfSections; } inline DWORD ImageHeader::timeDateStamp(void)const { return _IMAGE_FILE_HEADER::TimeDateStamp; } inline DWORD ImageHeader::pointerSymbolTable(void)const { return _IMAGE_FILE_HEADER::PointerToSymbolTable; } inline DWORD ImageHeader::symbolCount(void)const { return _IMAGE_FILE_HEADER::NumberOfSymbols; } inline WORD ImageHeader::sizeOptionalHeader(void)const { return _IMAGE_FILE_HEADER::SizeOfOptionalHeader; } inline ImageFlags ImageHeader::imageFlags(void)const { return ImageFlags(_IMAGE_FILE_HEADER::Characteristics); } #endif