summaryrefslogtreecommitdiff
path: root/src/T2DLL/CPEFile.h
diff options
context:
space:
mode:
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;
+};