-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.h
133 lines (116 loc) · 4.6 KB
/
main.h
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#define MAX_KEY_LENGTH 999
#define MAX_VALUE_NAME 32767
#define STR_MAX 999
typedef struct Road Road;
struct Road{
HKEY hive;
char shive[STR_MAX];// string hive
char str[STR_MAX];//string key
char richkey[STR_MAX];//string key enrichie "hive","key","security descriptor","last write time",
char lwt[16];
};
typedef struct KeyInfo KeyInfo;
struct KeyInfo{
HKEY key;
TCHAR achKey[MAX_KEY_LENGTH]; // buffer for subkey name
DWORD cbName; // size of name string
TCHAR achClass[MAX_PATH] ; // buffer for class name
DWORD cchClassName ; // size of class string
DWORD cSubKeys; // number of subkeys
DWORD cbMaxSubKey; // longest subkey size
DWORD cchMaxClass; // longest class string
DWORD cValues; // number of values for key
DWORD cchMaxValue; // longest value name
DWORD cbMaxValueData; // longest value data
DWORD cbSecurityDescriptor; // size of security descriptor
FILETIME ftLastWriteTime; // last write time
};
typedef struct KeyEnum KeyEnum;
struct KeyEnum{
HKEY key; //hive
DWORD dwIndex; //The index of the subkey to retrieve. This parameter should be zero for the first call to the RegEnumKeyEx function and then incremented for subsequent calls.
//TCHAR lpName[MAX_KEY_LENGTH]; //A pointer to a buffer that receives the name of the subkey, including the terminating null character
TCHAR *lpName; //A pointer to a buffer that receives the name of the subkey, including the terminating null character
LPDWORD lpcchName;
LPDWORD lpReserved; //This parameter is reserved and must be NULL.
LPSTR lpClass[MAX_PATH];; //A pointer to a buffer that receives the user-defined class of the enumerated subkey. This parameter can be NULL.
LPDWORD lpcchClass; //A pointer to a variable that specifies the size of the buffer specified by the lpClass parameter, in characters. The size should include the terminating null character. If the function succeeds, lpcClass contains the number of characters stored in the buffer, not including the terminating null character. This parameter can be NULL only if lpClass is NULL.
FILETIME lpftLastWriteTime;
};//ERROR_SUCCESS ERROR_NO_MORE_ITEMS ERROR_MORE_DATA
typedef struct EnumValue EnumValue;
struct EnumValue{
HKEY key;
DWORD dwIndex;
LPSTR *lpValueName;
LPDWORD lpcchValueName;
LPDWORD lpReserved;
LPDWORD lpType;
LPBYTE *lpData;
LPDWORD lpcbData;
};
/**
printf() entete du csv
**/
int print_title();
/**
Recois l'element de argv correspondant a -h
initialise la hkey road->hive
initialise une chaine de caratere correspondant road->shive
**/
int set_hive(char *argv, Road *road);
/**
Boucle sur les element de argv
appel set_hive()
initialise road->str si une clef a ete passer en argument (-k)
**/
int set_arg(int argc, char *argv[], Road *road);
/**
Ouvre la clé contenu dans road
Enumere les sous clé et recréer les chemin avec leur nom et road->str
Rappel get_all() avec chaque sous clé
Ferme la clé
**/
int get_subKeys(Road *road, KeyInfo *keyinfo);
/**
switch sur le Type de la value
printf de la value, du type et des data dans le bon format
**/
int print_data(EnumValue enumValue, char *rk);
/**
Converti un FILETIME en SYSTEMETIME
Passe de UTC a local
creer la clé enrichie dans road->richkey (hive,clé, nombre de value, lastwritetime, security descriptor, )
**/
int make_richkey(KeyInfo *keyinfo, Road *road);
/**
Recupere data et value de l'index dwIndex de la structure enumValue passé en parametre
**/
int get_data(EnumValue *enumValue);
/**
Converti un FILETIME en chaine de caractere au format local,"dd/mm/yyyy hhhmm"
**/
int flt_to_str(FILETIME *flt, char* str);
/**
Ouvre la clé contenu dans road
Recupere ses info(nbr subkeys, nbr values, taille max des nom et key, date de derniere modif... )
Ferme la clé
**/
int query_key(Road *road, KeyInfo *k);
/**
Recois une clé et un hive
Appel query_key() pour recuperer les info
recupere les value si il y en a
recupere les sous clé si il y en a
**/
int get_all(Road *road);
/**
Ecrit la clé
Ecrit sa date de derniere modification
Boucle sur les value contenu dans une clé et appel get_data()
appel print_data() pour ecrir le resultat
**/
int get_values(Road *road, KeyInfo *keyinfo);
/**
Construit une sous clé newroad->str avec la clé road.str et la sous clé key_enum.lpName
**/
int make_key(const Road road, const KeyEnum key_enum, Road *newRoad);