summaryrefslogtreecommitdiff
path: root/src/T2DLL/CPEFile.h
diff options
context:
space:
mode:
authorAsh Wolf <ninji@wuffs.org>2023-06-14 00:50:34 +0100
committerAsh Wolf <ninji@wuffs.org>2023-06-14 00:50:34 +0100
commit37e364b2c6cc7487a1c888d256a73e5337bb7189 (patch)
treeeaf6e857382eef16c2dd940eb4125536fbe068bd /src/T2DLL/CPEFile.h
downloadt2win-37e364b2c6cc7487a1c888d256a73e5337bb7189.tar.gz
t2win-37e364b2c6cc7487a1c888d256a73e5337bb7189.zip
initial commit
Diffstat (limited to '')
-rw-r--r--src/T2DLL/CPEFile.h44
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;
+};