profile.h
2.59 KB
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
/* Copyright (C) 2010-2011 kaosu (qiupf2000@gmail.com)
* This file is part of the Interactive Text Hooker.
* Interactive Text Hooker is free software: you can redistribute it and/or
* modify it under the terms of the GNU General Public License as published
* by the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include "main.h"
#include "..\AVL.h"
#define THREAD_MASK_RETN 1
#define THREAD_MASK_SPLIT 2
struct ThreadParam
{
UINT_PTR hook_index,status;
UINT_PTR hook_addr;
UINT_PTR retn;
UINT_PTR split;
UINT_PTR hm_index,reserve;
};
struct LinkParam
{
UINT_PTR from_index,to_index;
};
struct CommentParam
{
UINT_PTR thread_index,status;
LPWSTR comment;
};
class Profile
{
public:
Profile();
Profile(const Profile& p);
~Profile();
void Release();
void AddHook(const HookParam& hp);
void RemoveThread(UINT_PTR index);
void RemoveLink(UINT_PTR index);
void RemoveComment(UINT_PTR index);
void ClearHooks();
UINT_PTR AddThread(ThreadParam *tp);
UINT_PTR AddLink(LinkParam* lp);
UINT_PTR AddComment(LPWSTR comment, UINT_PTR index);
Profile& operator = (Profile& pf);
HookParam hps[4];
UINT_PTR hook_count,thread_count,link_count,comment_count,select_index;
UINT_PTR engine_type,thread_allocate,link_allocate,comment_allocate,flag;
ThreadParam* threads;
LinkParam* links;
CommentParam *comments;
};
typedef TreeNode<LPWSTR,Profile> ProfileNode;
class ProfileManager
{
public:
ProfileManager();
~ProfileManager();
void AddProfile(LPWSTR path, const Profile& p);
void ClearProfile();
void LoadProfile();
void SaveProfile();
void DeleteProfile(int index);
void DeleteProfile(LPWSTR path);
void RefreshProfileAddr(UINT_PTR pid,LPWSTR path);
void SetProfileEngine(LPWSTR path, UINT_PTR type);
bool IsPathProfile(LPWSTR path);
ProfileNode* GetProfile(LPWSTR path);
ProfileNode* GetProfile(int index);
ProfileNode* BeginProfile();
ProfileNode* EndProfile();
private:
AVLTree<WCHAR,Profile,WCMP,WCPY,WLEN> pftree;
HANDLE hMonitorThread;
};
void GetCode(const HookParam& hp, LPWSTR buffer, UINT_PTR pid=0);
void GetThreadString(ThreadParam* tp, LPWSTR str);