diff options
Diffstat (limited to '')
-rw-r--r-- | src/T2DLL/CPEFile.h | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/src/T2DLL/CPEFile.h b/src/T2DLL/CPEFile.h new file mode 100644 index 0000000..e27a1fa --- /dev/null +++ b/src/T2DLL/CPEFile.h @@ -0,0 +1,44 @@ +#pragma once +#include "common.h" + +struct RESTRACKERWORK { + int didRead; + IMAGE_RESOURCE_DIRECTORY directory; + unsigned long position; + int nextIndex; + IMAGE_RESOURCE_DIRECTORY_ENTRY entry; +}; + +class DLL_EXPORT 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; +}; |