diff options
author | Ash Wolf <ninji@wuffs.org> | 2023-06-14 00:50:34 +0100 |
---|---|---|
committer | Ash Wolf <ninji@wuffs.org> | 2023-06-14 00:50:34 +0100 |
commit | 37e364b2c6cc7487a1c888d256a73e5337bb7189 (patch) | |
tree | eaf6e857382eef16c2dd940eb4125536fbe068bd /src/T2DLL/CPEFile.h | |
download | t2win-37e364b2c6cc7487a1c888d256a73e5337bb7189.tar.gz t2win-37e364b2c6cc7487a1c888d256a73e5337bb7189.zip |
initial commit
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; +}; |