summaryrefslogtreecommitdiff
path: root/src/T2DLL/CPEFile.h
blob: 3e566f82c0c9a38dfca8d7982bd7d62d13969890 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#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_CLASS_EXPORT CPEFile {
public:
	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* inName);
	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;
};