#pragma once #include "common.h" struct RESTRACKERWORK { int didRead; IMAGE_RESOURCE_DIRECTORY directory; unsigned long position; int nextIndex; IMAGE_RESOURCE_DIRECTORY_ENTRY entry; }; class AFX_EXT_CLASS CPEFile { public: CPEFile(const CPEFile&); CPEFile& operator=(const CPEFile&); CPEFile(); ~CPEFile(); virtual BOOL Open(const char*, unsigned int, CFileException* exc = NULL); virtual void Close(); virtual long Seek(long offset, unsigned int from); virtual BOOL Seek(const char* name); virtual unsigned long GetLength(); virtual unsigned long GetPosition(); virtual unsigned int Read(void* buf, unsigned int len); virtual void Write(void* buf, unsigned int len); BOOL EnumResource(CString& s, RESTRACKERWORK& work); void EnterDirectory(RESTRACKERWORK& child, RESTRACKERWORK& parent); protected: BOOL Init(); BOOL EnumResourceDirectory(IMAGE_RESOURCE_DIRECTORY_ENTRY* entry, RESTRACKERWORK& work); void GetResourceName(CString& s, IMAGE_RESOURCE_DIRECTORY_ENTRY& entry); private: CFile *mFile; IMAGE_FILE_HEADER mFileHeader; IMAGE_SECTION_HEADER *mSectionHeaders; DWORD mRsrcPtr; int mRsrcIndex; unsigned long mStartPosition; unsigned long mLength; };