395 lines
7.6 KiB
C++
395 lines
7.6 KiB
C++
#ifndef _IMAGE_VXDHEADER_HPP_
|
|
#define _IMAGE_VXDHEADER_HPP_
|
|
#ifndef _COMMON_WINDOWS_HPP_
|
|
#include <common/windows.hpp>
|
|
#endif
|
|
#ifndef _IMAGE_DOSHEADER_HPP_
|
|
#include <image/doshdr.hpp>
|
|
#endif
|
|
#ifndef _IMAGE_VXDOBJECTS_HPP_
|
|
#include <image/vxdobjs.hpp>
|
|
#endif
|
|
#ifndef _IMAGE_VXDNAMES_HPP_
|
|
#include <image/vxdnames.hpp>
|
|
#endif
|
|
|
|
class PureViewOfFile;
|
|
|
|
class VxDHeader: private _IMAGE_VXD_HEADER, public DOSHeader, public VxDObjects, public VxDNames
|
|
{
|
|
public:
|
|
enum {LESignature=IMAGE_VXD_SIGNATURE};
|
|
VxDHeader(void);
|
|
VxDHeader(const VxDHeader &someVxDHeader);
|
|
virtual ~VxDHeader();
|
|
VxDHeader &operator=(const VxDHeader &someVxDHeader);
|
|
WORD operator==(const VxDHeader &someVxDHeader);
|
|
WORD operator<<(PureViewOfFile &pureView);
|
|
WORD magic(void)const;
|
|
BYTE byteOrdering(void)const;
|
|
BYTE wordOrdering(void)const;
|
|
DWORD exeFormatLevel(void)const;
|
|
WORD cpuType(void)const;
|
|
WORD osType(void)const;
|
|
DWORD moduleVersion(void)const;
|
|
DWORD moduleFlags(void)const;
|
|
DWORD moduleNumPages(void)const;
|
|
DWORD startObjectNumberForIP(void)const;
|
|
DWORD eip(void)const;
|
|
DWORD startObjectNumberForSP(void)const;
|
|
DWORD esp(void)const;
|
|
DWORD vxdPageSize(void)const;
|
|
DWORD vxdLastPageSize(void)const;
|
|
DWORD fixupSectionSize(void)const;
|
|
DWORD fixupSectionChecksum(void)const;
|
|
DWORD loaderSectionSize(void)const;
|
|
DWORD loaderSectionChecksum(void)const;
|
|
DWORD objectTableOffset(void)const;
|
|
DWORD objectCount(void)const;
|
|
DWORD objectPageMapOffset(void)const;
|
|
DWORD objectIteratedDataMapOffset(void)const;
|
|
DWORD resourceTableOffset(void)const;
|
|
DWORD resourceEntryCount(void)const;
|
|
DWORD residentNameTableOffset(void)const;
|
|
DWORD entryTableOffset(void)const;
|
|
DWORD moduleDirectiveTableOffset(void)const;
|
|
DWORD moduleDirectivesCount(void)const;
|
|
DWORD fixupPageTableOffset(void)const;
|
|
DWORD fixupRecordTableOffset(void)const;
|
|
DWORD importModuleNameTableOffset(void)const;
|
|
DWORD importModuleNameTableCount(void)const;
|
|
DWORD importProcedureNameTableOffset(void)const;
|
|
DWORD perPageChecksumTableOffset(void)const;
|
|
DWORD enumeratedDataPagesOffset(void)const;
|
|
DWORD preloadPagesCount(void)const;
|
|
DWORD nonResidentNameTableOffset(void)const;
|
|
DWORD nonResidentNameTableChecksum(void)const;
|
|
DWORD automaticDataObjectNumber(void)const;
|
|
DWORD debugInfoOffset(void)const;
|
|
DWORD debugInfoLengthBytes(void)const;
|
|
DWORD preloadSectionInstancePageCount(void)const;
|
|
DWORD demandLoadSectionInstancePageCount(void)const;
|
|
DWORD sizeHeap(void)const;
|
|
DWORD windowsResourceOffset(void)const;
|
|
DWORD windowsResourceLength(void)const;
|
|
WORD vxdID(void)const;
|
|
WORD ddkVersion(void)const;
|
|
WORD isOkay(void)const;
|
|
private:
|
|
void getNames(PureViewOfFile &pureView);
|
|
void getObjects(PureViewOfFile &pureView);
|
|
};
|
|
|
|
inline
|
|
VxDHeader::VxDHeader(void)
|
|
{
|
|
::memset((char*)&((_IMAGE_VXD_HEADER&)*this),0,sizeof(_IMAGE_VXD_HEADER));
|
|
}
|
|
|
|
inline
|
|
VxDHeader::VxDHeader(const VxDHeader &someVxDHeader)
|
|
{
|
|
*this=someVxDHeader;
|
|
}
|
|
|
|
inline
|
|
WORD VxDHeader::magic(void)const
|
|
{
|
|
return _IMAGE_VXD_HEADER::e32_magic;
|
|
}
|
|
|
|
inline
|
|
BYTE VxDHeader::byteOrdering(void)const
|
|
{
|
|
return _IMAGE_VXD_HEADER::e32_border;
|
|
}
|
|
|
|
inline
|
|
BYTE VxDHeader::wordOrdering(void)const
|
|
{
|
|
return _IMAGE_VXD_HEADER::e32_worder;
|
|
}
|
|
|
|
inline
|
|
DWORD VxDHeader::exeFormatLevel(void)const
|
|
{
|
|
return _IMAGE_VXD_HEADER::e32_level;
|
|
}
|
|
|
|
inline
|
|
WORD VxDHeader::cpuType(void)const
|
|
{
|
|
return _IMAGE_VXD_HEADER::e32_cpu;
|
|
}
|
|
|
|
inline
|
|
WORD VxDHeader::osType(void)const
|
|
{
|
|
return _IMAGE_VXD_HEADER::e32_os;
|
|
}
|
|
|
|
inline
|
|
DWORD VxDHeader::moduleVersion(void)const
|
|
{
|
|
return _IMAGE_VXD_HEADER::e32_ver;
|
|
}
|
|
|
|
inline
|
|
DWORD VxDHeader::moduleFlags(void)const
|
|
{
|
|
return _IMAGE_VXD_HEADER::e32_mflags;
|
|
}
|
|
|
|
inline
|
|
DWORD VxDHeader::moduleNumPages(void)const
|
|
{
|
|
return _IMAGE_VXD_HEADER::e32_mpages;
|
|
}
|
|
|
|
inline
|
|
DWORD VxDHeader::startObjectNumberForIP(void)const
|
|
{
|
|
return _IMAGE_VXD_HEADER::e32_startobj;
|
|
}
|
|
|
|
inline
|
|
DWORD VxDHeader::eip(void)const
|
|
{
|
|
return _IMAGE_VXD_HEADER::e32_eip;
|
|
}
|
|
|
|
inline
|
|
DWORD VxDHeader::startObjectNumberForSP(void)const
|
|
{
|
|
return _IMAGE_VXD_HEADER::e32_stackobj;
|
|
}
|
|
|
|
inline
|
|
DWORD VxDHeader::esp(void)const
|
|
{
|
|
return _IMAGE_VXD_HEADER::e32_esp;
|
|
}
|
|
|
|
inline
|
|
DWORD VxDHeader::vxdPageSize(void)const
|
|
{
|
|
return _IMAGE_VXD_HEADER::e32_pagesize;
|
|
}
|
|
|
|
inline
|
|
DWORD VxDHeader::vxdLastPageSize(void)const
|
|
{
|
|
return _IMAGE_VXD_HEADER::e32_lastpagesize;
|
|
}
|
|
|
|
inline
|
|
DWORD VxDHeader::fixupSectionSize(void)const
|
|
{
|
|
return _IMAGE_VXD_HEADER::e32_fixupsize;
|
|
}
|
|
|
|
inline
|
|
DWORD VxDHeader::fixupSectionChecksum(void)const
|
|
{
|
|
return _IMAGE_VXD_HEADER::e32_fixupsum;
|
|
}
|
|
|
|
inline
|
|
DWORD VxDHeader::loaderSectionSize(void)const
|
|
{
|
|
return _IMAGE_VXD_HEADER::e32_ldrsize;
|
|
}
|
|
|
|
inline
|
|
DWORD VxDHeader::loaderSectionChecksum(void)const
|
|
{
|
|
return _IMAGE_VXD_HEADER::e32_ldrsum;
|
|
}
|
|
|
|
inline
|
|
DWORD VxDHeader::objectTableOffset(void)const
|
|
{
|
|
return _IMAGE_VXD_HEADER::e32_objtab;
|
|
}
|
|
|
|
inline
|
|
DWORD VxDHeader::objectCount(void)const
|
|
{
|
|
return _IMAGE_VXD_HEADER::e32_objcnt;
|
|
}
|
|
|
|
inline
|
|
DWORD VxDHeader::objectPageMapOffset(void)const
|
|
{
|
|
return _IMAGE_VXD_HEADER::e32_objmap;
|
|
}
|
|
|
|
inline
|
|
DWORD VxDHeader::objectIteratedDataMapOffset(void)const
|
|
{
|
|
return _IMAGE_VXD_HEADER::e32_itermap;
|
|
}
|
|
|
|
inline
|
|
DWORD VxDHeader::resourceTableOffset(void)const
|
|
{
|
|
return _IMAGE_VXD_HEADER::e32_rsrctab;
|
|
}
|
|
|
|
inline
|
|
DWORD VxDHeader::resourceEntryCount(void)const
|
|
{
|
|
return _IMAGE_VXD_HEADER::e32_rsrccnt;
|
|
}
|
|
|
|
inline
|
|
DWORD VxDHeader::residentNameTableOffset(void)const
|
|
{
|
|
return _IMAGE_VXD_HEADER::e32_restab;
|
|
}
|
|
|
|
inline
|
|
DWORD VxDHeader::entryTableOffset(void)const
|
|
{
|
|
return _IMAGE_VXD_HEADER::e32_enttab;
|
|
}
|
|
|
|
inline
|
|
DWORD VxDHeader::moduleDirectiveTableOffset(void)const
|
|
{
|
|
return _IMAGE_VXD_HEADER::e32_dirtab;
|
|
}
|
|
|
|
inline
|
|
DWORD VxDHeader::moduleDirectivesCount(void)const
|
|
{
|
|
return _IMAGE_VXD_HEADER::e32_dircnt;
|
|
}
|
|
|
|
inline
|
|
DWORD VxDHeader::fixupPageTableOffset(void)const
|
|
{
|
|
return _IMAGE_VXD_HEADER::e32_fpagetab;
|
|
}
|
|
|
|
inline
|
|
DWORD VxDHeader::fixupRecordTableOffset(void)const
|
|
{
|
|
return _IMAGE_VXD_HEADER::e32_frectab;
|
|
}
|
|
|
|
inline
|
|
DWORD VxDHeader::importModuleNameTableOffset(void)const
|
|
{
|
|
return _IMAGE_VXD_HEADER::e32_impmod;
|
|
}
|
|
|
|
inline
|
|
DWORD VxDHeader::importModuleNameTableCount(void)const
|
|
{
|
|
return _IMAGE_VXD_HEADER::e32_impmodcnt;
|
|
}
|
|
|
|
inline
|
|
DWORD VxDHeader::importProcedureNameTableOffset(void)const
|
|
{
|
|
return _IMAGE_VXD_HEADER::e32_impproc;
|
|
}
|
|
|
|
inline
|
|
DWORD VxDHeader::perPageChecksumTableOffset(void)const
|
|
{
|
|
return _IMAGE_VXD_HEADER::e32_pagesum;
|
|
}
|
|
|
|
inline
|
|
DWORD VxDHeader::enumeratedDataPagesOffset(void)const
|
|
{
|
|
return _IMAGE_VXD_HEADER::e32_datapage;
|
|
}
|
|
|
|
inline
|
|
DWORD VxDHeader::preloadPagesCount(void)const
|
|
{
|
|
return _IMAGE_VXD_HEADER::e32_preload;
|
|
}
|
|
|
|
inline
|
|
DWORD VxDHeader::nonResidentNameTableOffset(void)const
|
|
{
|
|
return _IMAGE_VXD_HEADER::e32_nrestab;
|
|
}
|
|
|
|
inline
|
|
DWORD VxDHeader::nonResidentNameTableChecksum(void)const
|
|
{
|
|
return _IMAGE_VXD_HEADER::e32_cbnrestab;
|
|
}
|
|
|
|
inline
|
|
DWORD VxDHeader::automaticDataObjectNumber(void)const
|
|
{
|
|
return _IMAGE_VXD_HEADER::e32_nressum;
|
|
}
|
|
|
|
inline
|
|
DWORD VxDHeader::debugInfoOffset(void)const
|
|
{
|
|
return _IMAGE_VXD_HEADER::e32_autodata;
|
|
}
|
|
|
|
inline
|
|
DWORD VxDHeader::debugInfoLengthBytes(void)const
|
|
{
|
|
return _IMAGE_VXD_HEADER::e32_debuginfo;
|
|
}
|
|
|
|
inline
|
|
DWORD VxDHeader::preloadSectionInstancePageCount(void)const
|
|
{
|
|
return _IMAGE_VXD_HEADER::e32_instpreload;
|
|
}
|
|
|
|
inline
|
|
DWORD VxDHeader::demandLoadSectionInstancePageCount(void)const
|
|
{
|
|
return _IMAGE_VXD_HEADER::e32_instdemand;
|
|
}
|
|
|
|
inline
|
|
DWORD VxDHeader::sizeHeap(void)const
|
|
{
|
|
return _IMAGE_VXD_HEADER::e32_heapsize;
|
|
}
|
|
|
|
inline
|
|
DWORD VxDHeader::windowsResourceOffset(void)const
|
|
{
|
|
return _IMAGE_VXD_HEADER::e32_winresoff;
|
|
}
|
|
|
|
inline
|
|
DWORD VxDHeader::windowsResourceLength(void)const
|
|
{
|
|
return _IMAGE_VXD_HEADER::e32_winreslen;
|
|
}
|
|
|
|
inline
|
|
WORD VxDHeader::vxdID(void)const
|
|
{
|
|
return _IMAGE_VXD_HEADER::e32_devid;
|
|
}
|
|
|
|
inline
|
|
WORD VxDHeader::ddkVersion(void)const
|
|
{
|
|
return _IMAGE_VXD_HEADER::e32_ddkver;
|
|
}
|
|
|
|
inline
|
|
WORD VxDHeader::isOkay(void)const
|
|
{
|
|
return LESignature==magic();
|
|
}
|
|
#endif
|