Mercurial > mm7
comparison Engine/Registry.cpp @ 2499:68cdef6879a0
engine folder
author | Ritor1 |
---|---|
date | Fri, 19 Sep 2014 02:57:42 +0600 |
parents | |
children | 160e12614310 |
comparison
equal
deleted
inserted
replaced
2498:92eeeb5200f2 | 2499:68cdef6879a0 |
---|---|
1 #define _CRTDBG_MAP_ALLOC | |
2 #include <stdlib.h> | |
3 #include <crtdbg.h> | |
4 | |
5 #define _CRT_SECURE_NO_WARNINGS | |
6 #include <stdio.h> | |
7 #include <array> | |
8 #include <windows.h> | |
9 | |
10 #include "Registry.h" | |
11 #include "Engine/ErrorHandling.h" | |
12 | |
13 //----- (004649EF) -------------------------------------------------------- | |
14 int __fastcall ReadWindowsRegistryInt(const char *pKey, int uDefValue) | |
15 { | |
16 DWORD cbData; // [sp+8h] [bp-20h]@1 | |
17 LPCSTR lpValueName; // [sp+Ch] [bp-1Ch]@1 | |
18 DWORD dwDisposition; // [sp+10h] [bp-18h]@2 | |
19 BYTE Data[4]; // [sp+14h] [bp-14h]@5 | |
20 HKEY hKey; // [sp+18h] [bp-10h]@1 | |
21 HKEY phkResult; // [sp+1Ch] [bp-Ch]@1 | |
22 HKEY v10; // [sp+20h] [bp-8h]@1 | |
23 HKEY v11; // [sp+24h] [bp-4h]@1 | |
24 | |
25 lpValueName = pKey; | |
26 v11 = 0; | |
27 v10 = 0; | |
28 hKey = 0; | |
29 phkResult = 0; | |
30 cbData = 4; | |
31 if ( !RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE", 0, KEY_READ|KEY_WOW64_32KEY, &hKey) )// for 64 bit | |
32 { | |
33 if ( !RegCreateKeyExA(hKey, "New World Computing", 0, "", 0, KEY_ALL_ACCESS, 0, &phkResult, &dwDisposition) ) | |
34 { | |
35 if ( !RegCreateKeyExA(phkResult, "Might and Magic VII", 0, "", 0, KEY_ALL_ACCESS, 0, &v10, &dwDisposition) ) | |
36 { | |
37 if ( !RegCreateKeyExA(v10, "1.0", 0, "", 0, KEY_ALL_ACCESS, 0, &v11, &dwDisposition) ) | |
38 { | |
39 LSTATUS status; | |
40 if ( status = RegQueryValueExA(v11, lpValueName, 0, 0, Data, &cbData) ) | |
41 { | |
42 status; | |
43 GetLastError(); | |
44 | |
45 *(int *)Data = uDefValue; | |
46 RegSetValueExA(v11, lpValueName, 0, 4, Data, 4); | |
47 } | |
48 RegCloseKey(v11); | |
49 } | |
50 RegCloseKey(v10); | |
51 } | |
52 RegCloseKey(phkResult); | |
53 } | |
54 RegCloseKey(hKey); | |
55 } | |
56 return *(int *)Data; | |
57 } | |
58 | |
59 //----- (00464B02) -------------------------------------------------------- | |
60 void __fastcall WriteWindowsRegistryString(const char *pKey, const char *pString) | |
61 { | |
62 size_t v2; // eax@5 | |
63 const char *lpValueName; // [sp+4h] [bp-1Ch]@1 | |
64 const char *Str; // [sp+8h] [bp-18h]@1 | |
65 DWORD dwDisposition; // [sp+Ch] [bp-14h]@2 | |
66 HKEY hKey; // [sp+10h] [bp-10h]@1 | |
67 HKEY phkResult; // [sp+14h] [bp-Ch]@1 | |
68 HKEY v8; // [sp+18h] [bp-8h]@1 | |
69 HKEY v9; // [sp+1Ch] [bp-4h]@1 | |
70 | |
71 Str = pString; | |
72 lpValueName = pKey; | |
73 v9 = 0; | |
74 v8 = 0; | |
75 hKey = 0; | |
76 phkResult = 0; | |
77 if ( !RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE", 0, KEY_READ|KEY_WOW64_32KEY, &hKey) ) | |
78 { | |
79 if ( !RegCreateKeyExA(hKey, "New World Computing", 0, "", 0, KEY_ALL_ACCESS, 0, &phkResult, &dwDisposition) ) | |
80 { | |
81 if ( !RegCreateKeyExA(phkResult, "Might and Magic VII", 0, "", 0, KEY_ALL_ACCESS, 0, &v8, &dwDisposition) ) | |
82 { | |
83 if ( !RegCreateKeyExA(v8, "1.0", 0, "", 0, KEY_ALL_ACCESS, 0, &v9, &dwDisposition) ) | |
84 { | |
85 v2 = strlen(Str); | |
86 RegSetValueExA(v9, lpValueName, 0, 1, (const BYTE *)Str, v2 + 1); | |
87 RegCloseKey(v9); | |
88 } | |
89 RegCloseKey(v8); | |
90 } | |
91 RegCloseKey(phkResult); | |
92 } | |
93 RegCloseKey(hKey); | |
94 } | |
95 } | |
96 | |
97 //----- (00464BEF) -------------------------------------------------------- | |
98 void __fastcall ReadWindowsRegistryString(const char *pKeyName, char *pOutString, int uBufLen, const char *pDefaultValue) | |
99 { | |
100 LSTATUS (__stdcall *v4)(HKEY); // esi@1 | |
101 LSTATUS result; // eax@7 | |
102 DWORD Type; // [sp+Ch] [bp-24h]@5 | |
103 LPCSTR lpValueName; // [sp+10h] [bp-20h]@1 | |
104 DWORD cbData; // [sp+14h] [bp-1Ch]@1 | |
105 LPBYTE Dest; // [sp+18h] [bp-18h]@1 | |
106 DWORD dwDisposition; // [sp+1Ch] [bp-14h]@2 | |
107 HKEY phkResult; // [sp+20h] [bp-10h]@1 | |
108 HKEY hKey; // [sp+24h] [bp-Ch]@1 | |
109 HKEY v13; // [sp+28h] [bp-8h]@1 | |
110 HKEY v14; // [sp+2Ch] [bp-4h]@1 | |
111 | |
112 cbData = uBufLen; | |
113 Dest = (LPBYTE)pOutString; | |
114 lpValueName = pKeyName; | |
115 v14 = 0; | |
116 v13 = 0; | |
117 hKey = 0; | |
118 phkResult = 0; | |
119 v4 = RegCloseKey; | |
120 if ( RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE", 0, KEY_READ|KEY_WOW64_32KEY, &hKey) | |
121 || RegCreateKeyExA(hKey, "New World Computing", 0, "", 0, KEY_ALL_ACCESS, 0, &phkResult, &dwDisposition) | |
122 || RegCreateKeyExA(phkResult, "Might and Magic VII", 0, "", 0, KEY_ALL_ACCESS, 0, &v13, &dwDisposition) | |
123 || RegCreateKeyExA(v13, "1.0", 0, "", 0, KEY_ALL_ACCESS, 0, &v14, &dwDisposition) ) | |
124 { | |
125 result = (LSTATUS)strncpy((char *)Dest, pDefaultValue, uBufLen); | |
126 } | |
127 else if ( RegQueryValueExA(v14, lpValueName, 0, &Type, Dest, &cbData) ) | |
128 { | |
129 RegCloseKey(v14); | |
130 v14 = 0; | |
131 result = (LSTATUS)strncpy((char *)Dest, pDefaultValue, uBufLen); | |
132 } | |
133 else | |
134 { | |
135 v4 = RegCloseKey; | |
136 RegCloseKey(v14); | |
137 v14 = 0; | |
138 RegCloseKey(v13); | |
139 v13 = 0; | |
140 RegCloseKey(phkResult); | |
141 phkResult = 0; | |
142 result = RegCloseKey(hKey); | |
143 hKey = 0; | |
144 } | |
145 if ( v14 ) | |
146 result = v4(v14); | |
147 if ( v13 ) | |
148 result = v4(v13); | |
149 if ( hKey ) | |
150 result = v4(hKey); | |
151 if ( phkResult ) | |
152 result = v4(phkResult); | |
153 } | |
154 | |
155 //----- (00464D32) -------------------------------------------------------- | |
156 void __fastcall WriteWindowsRegistryInt(const char *pKey, int val) | |
157 { | |
158 const char *lpValueName; // [sp+4h] [bp-1Ch]@1 | |
159 BYTE Data[4]; // [sp+8h] [bp-18h]@1 | |
160 DWORD dwDisposition; // [sp+Ch] [bp-14h]@2 | |
161 HKEY hKey; // [sp+10h] [bp-10h]@1 | |
162 HKEY phkResult; // [sp+14h] [bp-Ch]@1 | |
163 HKEY v7; // [sp+18h] [bp-8h]@1 | |
164 HKEY v8; // [sp+1Ch] [bp-4h]@1 | |
165 | |
166 *(int *)Data = val; | |
167 lpValueName = pKey; | |
168 v8 = 0; | |
169 v7 = 0; | |
170 hKey = 0; | |
171 phkResult = 0; | |
172 if ( !RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE", 0, KEY_READ|KEY_WOW64_32KEY, &hKey) ) | |
173 { | |
174 if ( !RegCreateKeyExA(hKey, "New World Computing", 0, "", 0, KEY_ALL_ACCESS, 0, &phkResult, &dwDisposition) ) | |
175 { | |
176 if ( !RegCreateKeyExA(phkResult, "Might and Magic VII", 0, "", 0, KEY_ALL_ACCESS, 0, &v7, &dwDisposition) ) | |
177 { | |
178 if ( !RegCreateKeyExA(v7, "1.0", 0, "", 0, KEY_ALL_ACCESS, 0, &v8, &dwDisposition) ) | |
179 { | |
180 RegSetValueExA(v8, lpValueName, 0, 4, Data, 4); | |
181 RegCloseKey(v8); | |
182 } | |
183 RegCloseKey(v7); | |
184 } | |
185 RegCloseKey(phkResult); | |
186 } | |
187 RegCloseKey(hKey); | |
188 } | |
189 } |