source: trunk/tools/install/odininst.cpp@ 6496

Last change on this file since 6496 was 6399, checked in by sandervl, 24 years ago

* empty log message *

File size: 37.4 KB
Line 
1/* $Id: odininst.cpp,v 1.8 2001-07-28 18:48:10 sandervl Exp $ */
2/*
3 * Odin WarpIn installation app
4 *
5 * Creates:
6 * - SYSTEMDIR\drivers
7 * - SYSTEMDIR\drivers\etc
8 * - WINDOWSDIR\SYSTEM
9 * - WINDOWSDIR\AppData
10 * - WINDOWSDIR\Cache
11 * - WINDOWSDIR\Cookies
12 * - WINDOWSDIR\Desktop
13 * - WINDOWSDIR\Favorites
14 * - WINDOWSDIR\Fonts
15 * - WINDOWSDIR\History
16 * - WINDOWSDIR\NetHood
17 * - WINDOWSDIR\My Documents
18 * - WINDOWSDIR\PrintHood
19 * - WINDOWSDIR\Recent
20 * - WINDOWSDIR\SendTo
21 * - WINDOWSDIR\Start Menu
22 * - WINDOWSDIR\Start Menu\Programs
23 * - WINDOWSDIR\Start Menu\Programs\Startup
24 * - WINDOWSDIR\ShellNew
25 * - x:\Program Files
26 * - x:\Program Files\Common Files
27 * - WINDOWSDIR\Temp
28 * - and a minimal system registry
29 *
30 * Copyright 1999-2001 Sander van Leeuwen (sandervl@xs4all.nl)
31 *
32 * Project Odin Software License can be found in LICENSE.TXT
33 *
34 */
35#include <os2win.h>
36#include <string.h>
37#include <stdio.h>
38#include <ctype.h>
39#include "winreg.h"
40#include "global.h"
41#include "winnt.h"
42#include "winerror.h"
43#include "winreg.h"
44#include "winnls.h"
45#include "debugtools.h"
46#include <odininst.h>
47#include <win\options.h>
48#include <versionos2.h>
49#include <time.h>
50
51BOOL CreateSystemDirectories();
52BOOL SetupControlPanelKeys();
53BOOL InitSystemAndRegistry();
54
55//******************************************************************************
56//******************************************************************************
57//[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Windows]
58//"Directory"=hex(2):25,53,79,73,74,65,6d,52,6f,6f,74,25,00
59//"SystemDirectory"=hex(2):25,53,79,73,74,65,6d,52,6f,6f,74,25,5c,73,79,73,74,65,\
60// 6d,33,32,00
61//"ErrorMode"=dword:00000000
62//"NoInteractiveServices"=dword:00000000
63//"CSDVersion"=dword:00000300
64BYTE ShutdownTime[] = {0x44,0x5e,0xf2,0xbb,0x84,0x41,0xbf,0x01};
65
66static char DIR_Windows[260];
67static char DIR_System[260];
68
69//******************************************************************************
70//******************************************************************************
71int main(int argc, char *argv[])
72{
73 InitSystemAndRegistry();
74 CreateSystemDirectories();
75 SetupControlPanelKeys();
76 return 0;
77}
78//******************************************************************************
79//******************************************************************************
80char *InternalGetWindowsDirectory()
81{
82 static char fInit = FALSE;
83
84 if(fInit == FALSE) {
85 GetWindowsDirectory(DIR_Windows, sizeof(DIR_Windows)-1);
86 fInit = TRUE;
87 }
88 return DIR_Windows;
89}
90//******************************************************************************
91//******************************************************************************
92char *InternalGetSystemDirectory()
93{
94 static char fInit = FALSE;
95
96 if(fInit == FALSE) {
97 GetSystemDirectory(DIR_System, sizeof(DIR_System)-1);
98 fInit = TRUE;
99 }
100 return DIR_System;
101}
102//******************************************************************************
103//******************************************************************************
104BOOL InitSystemAndRegistry()
105{
106 HKEY hkey, hkey1;
107 char *buf;
108 DWORD val;
109 char digbuf[16];
110 char shellpath[260];
111
112 if(RegCreateKey(HKEY_LOCAL_MACHINE,"SYSTEM\\CurrentControlSet\\Control\\Windows",&hkey)!=ERROR_SUCCESS) {
113 dprintf(("InitRegistry: Unable to register system information\n"));
114 return FALSE;
115 }
116 buf = InternalGetWindowsDirectory();
117 RegSetValueEx(hkey,"Directory",0,REG_BINARY, (LPBYTE)buf, strlen(buf)+1);
118 buf = InternalGetSystemDirectory();
119 RegSetValueEx(hkey,"SystemDirectory",0,REG_BINARY, (LPBYTE)buf, strlen(buf)+1);
120 val = 0;
121 RegSetValueEx(hkey,"ErrorMode",0,REG_DWORD, (LPBYTE)&val, sizeof(DWORD));
122 val = 0;
123 RegSetValueEx(hkey,"NoInteractiveServices",0,REG_DWORD, (LPBYTE)&val, sizeof(DWORD));
124 val = ODINNT_BUILD_NR;
125 RegSetValueEx(hkey,"CSDVersion",0,REG_DWORD, (LPBYTE)&val, sizeof(DWORD));
126 RegSetValueEx(hkey,"ShutdownTime",0,REG_DWORD, (LPBYTE)ShutdownTime, sizeof(ShutdownTime));
127 RegCloseKey(hkey);
128
129 //Software\Microsoft\Windows\CurrentVersion\RunOnce
130 if(RegCreateKey(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\Windows\\CurrentVersion\\RunOnce",&hkey)!=ERROR_SUCCESS) {
131 dprintf(("InitRegistry: Unable to register system information (2)"));
132 return FALSE;
133 }
134 RegCloseKey(hkey);
135
136 //System\CurrentControlSet\Control\Session Manager
137 if(RegCreateKey(HKEY_LOCAL_MACHINE,"System\\CurrentControlSet\\Control\\Session Manager",&hkey)!=ERROR_SUCCESS) {
138 dprintf(("InitRegistry: Unable to register system information (2)"));
139 return FALSE;
140 }
141 RegCloseKey(hkey);
142
143 if(RegCreateKey(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\Windows\\CurrentVersion\\App Paths\\iexplore.exe",&hkey)!=ERROR_SUCCESS) {
144 dprintf(("InitRegistry: Unable to register system information (2)"));
145 return FALSE;
146 }
147 strcpy(shellpath, InternalGetWindowsDirectory());
148 strcat(shellpath, "\\IEXPLORE.EXE");
149 RegSetValueEx(hkey, "", 0, REG_SZ, (LPBYTE)shellpath, strlen(shellpath)+1);
150 RegCloseKey(hkey);
151
152
153 if(RegCreateKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion",&hkey)!=ERROR_SUCCESS) {
154 dprintf(("InitRegistry: Unable to register system information (2)"));
155 return FALSE;
156 }
157 buf = InternalGetSystemDirectory();
158 RegSetValueEx(hkey,"SystemRoot",0,REG_SZ, (LPBYTE)buf, strlen(buf)+1);
159 RegSetValueEx(hkey,"PathName",0,REG_SZ, (LPBYTE)buf, strlen(buf)+1);
160 sprintf(digbuf, "%d", ODINNT_BUILD_NR);
161 RegSetValueEx(hkey,"CurrentBuildNumber",0,REG_SZ, (LPBYTE)digbuf, strlen(digbuf)+1);
162 RegSetValueEx(hkey,"CurrentType",0,REG_SZ, (LPBYTE)ODINNT_OSTYPE_UNI, sizeof(ODINNT_OSTYPE_UNI));
163 RegSetValueEx(hkey,"CSDVersion",0,REG_SZ, (LPBYTE)ODINNT_CSDVERSION, sizeof(ODINNT_CSDVERSION));
164 RegSetValueEx(hkey,"SoftwareType",0,REG_SZ, (LPBYTE)ODINNT_SOFTWARE_TYPE, sizeof(ODINNT_SOFTWARE_TYPE));
165
166 sprintf(digbuf, "%d.%d", ODINNT_MAJOR_VERSION, ODINNT_MINOR_VERSION);
167 RegSetValueEx(hkey,"CurrentVersion",0,REG_SZ, (LPBYTE)digbuf, strlen(digbuf)+1);
168
169 val = (DWORD)time(NULL); //todo: Correct format???
170 RegSetValueEx(hkey,"InstallDate",0,REG_DWORD, (LPBYTE)&val, sizeof(DWORD));
171
172 RegCloseKey(hkey);
173 //todo: productid, registered org/owner, sourcepath,
174
175 //Shell32 & IE related keys
176 //[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{00021400-0000-0000-C000-000000000046}]
177 //@="Desktop"
178 //[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{00021400-0000-0000-C000-000000000046}\InProcServer32]
179 //@="shell32.dll"
180 //ThreadingModel="Apartment"
181 if(RegCreateKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\Classes\\CLSID\\{00021400-0000-0000-C000-000000000046}",&hkey)!=ERROR_SUCCESS) {
182 goto initreg_error;
183 }
184 RegSetValueEx(hkey, "", 0, REG_SZ, (LPBYTE)CLASS_DESKTOP, sizeof(CLASS_DESKTOP));
185 RegCloseKey(hkey);
186 if(RegCreateKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\Classes\\CLSID\\{00021400-0000-0000-C000-000000000046}\\InProcServer32",&hkey)!=ERROR_SUCCESS) {
187 goto initreg_error;
188 }
189 RegSetValueEx(hkey, "", 0, REG_SZ, (LPBYTE)CLASS_SHELL32DLL, sizeof(CLASS_SHELL32DLL));
190 RegSetValueEx(hkey, COM_THREADMODEL, 0, REG_SZ, (LPBYTE)COM_THREAD_APARTMENT, sizeof(COM_THREAD_APARTMENT));
191 RegCloseKey(hkey);
192 //[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{00021401-0000-0000-C000-000000000046}]
193 //@="Shortcut"
194 //[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{00021401-0000-0000-C000-000000000046}\InProcServer32]
195 //@="shell32.dll"
196 //"ThreadingModel"="Apartment"
197 //[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{00021401-0000-0000-C000-000000000046}\shellex\MayChangeDefaultMenu]
198 //@=""
199 if(RegCreateKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\Classes\\CLSID\\{00021401-0000-0000-C000-000000000046}",&hkey)!=ERROR_SUCCESS) {
200 goto initreg_error;
201 }
202 RegSetValueEx(hkey, "", 0, REG_SZ, (LPBYTE)CLASS_SHORTCUT, sizeof(CLASS_SHORTCUT));
203 RegCloseKey(hkey);
204 if(RegCreateKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\Classes\\CLSID\\{00021401-0000-0000-C000-000000000046}\\InProcServer32",&hkey)!=ERROR_SUCCESS) {
205 goto initreg_error;
206 }
207 RegSetValueEx(hkey, "", 0, REG_SZ, (LPBYTE)CLASS_SHELL32DLL, sizeof(CLASS_SHELL32DLL));
208 RegSetValueEx(hkey, COM_THREADMODEL, 0, REG_SZ, (LPBYTE)COM_THREAD_APARTMENT, sizeof(COM_THREAD_APARTMENT));
209 RegCloseKey(hkey);
210 if(RegCreateKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\Classes\\CLSID\\{00021401-0000-0000-C000-000000000046}\\shellex\\MayChangeDefaultMenu",&hkey)!=ERROR_SUCCESS) {
211 goto initreg_error;
212 }
213 RegSetValueEx(hkey, "", 0, REG_SZ, (LPBYTE)"", 0);
214 RegCloseKey(hkey);
215
216 //# Entries for IWebBrowser
217 //# Used by Internet Explorer HTML-rendering control
218 //[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{8856f961-340a-11d0-a96b-00c04fd705a2}]
219 //@="Shortcut"
220 //[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{8856f961-340a-11d0-a96b-00c04fd705a2}\InProcServer32]
221 //@="shdocvw.dll"
222 //"ThreadingModel"="Apartment"
223 //[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{8856f961-340a-11d0-a96b-00c04fd705a2}\shellex\MayChangeDefaultMenu]
224 //@=""
225
226 if(RegCreateKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\Classes\\CLSID\\{8856f961-340a-11d0-a96b-00c04fd705a2}",&hkey)!=ERROR_SUCCESS) {
227 goto initreg_error;
228 }
229 RegSetValueEx(hkey, "", 0, REG_SZ, (LPBYTE)CLASS_SHORTCUT, sizeof(CLASS_SHORTCUT));
230 RegCloseKey(hkey);
231
232 if(RegCreateKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\Classes\\CLSID\\{8856f961-340a-11d0-a96b-00c04fd705a2}\\InProcServer32",&hkey)!=ERROR_SUCCESS) {
233 goto initreg_error;
234 }
235 RegSetValueEx(hkey, "", 0, REG_SZ, (LPBYTE)CLASS_SHDOCVW, sizeof(CLASS_SHDOCVW));
236 RegSetValueEx(hkey, COM_THREADMODEL, 0, REG_SZ, (LPBYTE)COM_THREAD_APARTMENT, sizeof(COM_THREAD_APARTMENT));
237 RegCloseKey(hkey);
238
239 if(RegCreateKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\Classes\\CLSID\\{8856f961-340a-11d0-a96b-00c04fd705a2}\\shellex\\MayChangeDefaultMenu",&hkey)!=ERROR_SUCCESS) {
240 goto initreg_error;
241 }
242 RegSetValueEx(hkey, "", 0, REG_SZ, (LPBYTE)"", 1);
243 RegCloseKey(hkey);
244
245 //Now the Ddraw & dsound registry keys:
246 //HKEY_CLASSES_ROOT\DirectDraw = DirectDraw Object
247 //HKEY_CLASSES_ROOT\DirectDraw\CLSID = {D7B70EE0-4340-11CF-B063-0020AFC2CD35}
248 //HKEY_CLASSES_ROOT\CLSID\{D7B70EE0-4340-11CF-B063-0020AFC2CD35} = DirectDraw Object
249 //HKEY_CLASSES_ROOT\CLSID\{D7B70EE0-4340-11CF-B063-0020AFC2CD35}\InprocServer32 = ddraw.dll
250 if(RegCreateKey(HKEY_CLASSES_ROOT,"DirectDraw",&hkey)!=ERROR_SUCCESS) {
251 goto initreg_error;
252 }
253 RegSetValueEx(hkey, "", 0, REG_SZ, (LPBYTE)DDRAW_DEFAULT, sizeof(DDRAW_DEFAULT));
254 if(RegCreateKey(hkey,COM_CLASS_ID,&hkey1)!=ERROR_SUCCESS) {
255 RegCloseKey(hkey);
256 goto initreg_error;
257 }
258 RegSetValueEx(hkey1,"",0,REG_SZ, (LPBYTE)DDRAW_CLASSID, sizeof(DDRAW_CLASSID));
259 RegCloseKey(hkey1);
260 RegCloseKey(hkey);
261
262 if(RegCreateKey(HKEY_CLASSES_ROOT, COM_CLASS_ID"\\"DDRAW_CLASSID ,&hkey)!=ERROR_SUCCESS) {
263 goto initreg_error;
264 }
265 RegSetValueEx(hkey,"",0,REG_SZ, (LPBYTE)DDRAW_DEFAULT, sizeof(DDRAW_DEFAULT));
266 if(RegCreateKey(hkey,COM_INPROCSERVER, &hkey1)!=ERROR_SUCCESS) {
267 RegCloseKey(hkey);
268 goto initreg_error;
269 }
270 RegSetValueEx(hkey1,"",0,REG_SZ, (LPBYTE)DDRAW_DLL, sizeof(DDRAW_DLL));
271 RegSetValueEx(hkey1, COM_THREADMODEL, 0,REG_SZ, (LPBYTE)THREAD_BOTH, sizeof(THREAD_BOTH));
272 RegCloseKey(hkey1);
273 RegCloseKey(hkey);
274
275 //HKEY_CLASSES_ROOT\DirectDrawClipper = DirectDraw Clipper Object
276 //HKEY_CLASSES_ROOT\DirectDrawClipper\CLSID = {593817A0-7DB3-11CF-A2DE-00AA00B93356}
277 //HKEY_CLASSES_ROOT\CLSID\{593817A0-7DB3-11CF-A2DE-00AA00B93356} = DirectDraw Clipper Object
278 //HKEY_CLASSES_ROOT\CLSID\{593817A0-7DB3-11CF-A2DE-00AA00B93356}\InprocServer32 = ddraw.dll
279 if(RegCreateKey(HKEY_CLASSES_ROOT,"DirectDrawClipper",&hkey)!=ERROR_SUCCESS) {
280 goto initreg_error;
281 }
282 RegSetValueEx(hkey,"",0,REG_SZ, (LPBYTE)DDRAW_CLIPPER_DEFAULT, sizeof(DDRAW_CLIPPER_DEFAULT));
283 if(RegCreateKey(hkey,COM_CLASS_ID,&hkey1)!=ERROR_SUCCESS) {
284 RegCloseKey(hkey);
285 goto initreg_error;
286 }
287 RegSetValueEx(hkey1,"",0,REG_SZ, (LPBYTE)DDRAW_CLIPPER_CLASSID, sizeof(DDRAW_CLIPPER_CLASSID));
288 RegCloseKey(hkey1);
289 RegCloseKey(hkey);
290
291 if(RegCreateKey(HKEY_CLASSES_ROOT, COM_CLASS_ID"\\"DDRAW_CLIPPER_CLASSID,&hkey)!=ERROR_SUCCESS) {
292 goto initreg_error;
293 }
294 RegSetValueEx(hkey,"",0,REG_SZ, (LPBYTE)DDRAW_CLIPPER_DEFAULT, sizeof(DDRAW_CLIPPER_DEFAULT));
295 if(RegCreateKey(hkey,COM_INPROCSERVER, &hkey1)!=ERROR_SUCCESS) {
296 RegCloseKey(hkey);
297 goto initreg_error;
298 }
299 RegSetValueEx(hkey1,"",0,REG_SZ, (LPBYTE)DDRAW_DLL, sizeof(DDRAW_DLL));
300 RegSetValueEx(hkey1, COM_THREADMODEL, 0,REG_SZ, (LPBYTE)THREAD_BOTH, sizeof(THREAD_BOTH));
301 RegCloseKey(hkey1);
302 RegCloseKey(hkey);
303
304 //HKEY_CLASSES_ROOT\DirectSound = DirectSound Object
305 //HKEY_CLASSES_ROOT\DirectSound\CLSID = {47D4D946-62E8-11cf-93BC-444553540000}
306 //HKEY_CLASSES_ROOT\CLSID\{47D4D946-62E8-11cf-93BC-444553540000} = DirectSound Object
307 //HKEY_CLASSES_ROOT\CLSID\{47D4D946-62E8-11cf-93BC-444553540000}\InprocServer32 = dsound.dll
308 if(RegCreateKey(HKEY_CLASSES_ROOT,"DirectSound",&hkey)!=ERROR_SUCCESS) {
309 goto initreg_error;
310 }
311 RegSetValueEx(hkey,"",0,REG_SZ, (LPBYTE)DSOUND_DEFAULT, sizeof(DSOUND_DEFAULT));
312 if(RegCreateKey(hkey,COM_CLASS_ID,&hkey1)!=ERROR_SUCCESS) {
313 RegCloseKey(hkey);
314 goto initreg_error;
315 }
316 RegSetValueEx(hkey1,"",0,REG_SZ, (LPBYTE)DSOUND_CLASSID, sizeof(DSOUND_CLASSID));
317 RegCloseKey(hkey1);
318 RegCloseKey(hkey);
319
320 if(RegCreateKey(HKEY_CLASSES_ROOT, COM_CLASS_ID"\\"DSOUND_CLASSID ,&hkey)!=ERROR_SUCCESS) {
321 goto initreg_error;
322 }
323 RegSetValueEx(hkey,"",0,REG_SZ, (LPBYTE)DSOUND_DEFAULT, sizeof(DSOUND_DEFAULT));
324 if(RegCreateKey(hkey,COM_INPROCSERVER, &hkey1)!=ERROR_SUCCESS) {
325 RegCloseKey(hkey);
326 goto initreg_error;
327 }
328 RegSetValueEx(hkey1,"",0,REG_SZ, (LPBYTE)DSOUND_DLL, sizeof(DSOUND_DLL));
329 RegSetValueEx(hkey1, COM_THREADMODEL, 0,REG_SZ, (LPBYTE)THREAD_BOTH, sizeof(THREAD_BOTH));
330 RegCloseKey(hkey1);
331 RegCloseKey(hkey);
332
333 //DirectPlay
334 if(RegCreateKey(HKEY_LOCAL_MACHINE, "Software\\CLASSES\\CLSID\\"DPLAYX_CLASSID ,&hkey)!=ERROR_SUCCESS) {
335 goto initreg_error;
336 }
337 RegSetValueEx(hkey,"",0,REG_SZ, (LPBYTE)DPLAYX_DEFAULT, sizeof(DPLAYX_DEFAULT));
338 if(RegCreateKey(hkey,COM_INPROCSERVER, &hkey1)!=ERROR_SUCCESS) {
339 RegCloseKey(hkey);
340 goto initreg_error;
341 }
342 RegSetValueEx(hkey1,"",0,REG_SZ, (LPBYTE)DPLAYX_DLL, sizeof(DPLAYX_DLL));
343 RegSetValueEx(hkey1, COM_THREADMODEL, 0,REG_SZ, (LPBYTE)THREAD_BOTH, sizeof(THREAD_BOTH));
344 RegCloseKey(hkey1);
345 RegCloseKey(hkey);
346
347 //DirectPlay Lobby
348 if(RegCreateKey(HKEY_LOCAL_MACHINE, "Software\\CLASSES\\CLSID\\"DPLAYX_LOBBY_CLASSID ,&hkey)!=ERROR_SUCCESS) {
349 goto initreg_error;
350 }
351 RegSetValueEx(hkey,"",0,REG_SZ, (LPBYTE)DPLAYX_LOBBY_DEFAULT, sizeof(DPLAYX_LOBBY_DEFAULT));
352 if(RegCreateKey(hkey,COM_INPROCSERVER, &hkey1)!=ERROR_SUCCESS) {
353 RegCloseKey(hkey);
354 goto initreg_error;
355 }
356 RegSetValueEx(hkey1,"",0,REG_SZ, (LPBYTE)DPLAYX_LOBBY_DLL, sizeof(DPLAYX_LOBBY_DLL));
357 RegSetValueEx(hkey1, COM_THREADMODEL, 0,REG_SZ, (LPBYTE)THREAD_BOTH, sizeof(THREAD_BOTH));
358 RegCloseKey(hkey1);
359 RegCloseKey(hkey);
360
361 //Quartz.dll keys
362 //[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{CDA42200-BD88-11d0-BD4E-00A0C911CE86}]
363 //@="Filter Mapper2"
364 //[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{CDA42200-BD88-11d0-BD4E-00A0C911CE86}\InprocServer32]
365 //@="G:\\WINNT\\System32\\quartz.dll"
366 //"ThreadingModel"="Both"
367 if(RegCreateKey(HKEY_LOCAL_MACHINE, "Software\\CLASSES\\CLSID\\"QUARTZ_FILTER_CLASSID ,&hkey)!=ERROR_SUCCESS) {
368 goto initreg_error;
369 }
370 RegSetValueEx(hkey,"",0,REG_SZ, (LPBYTE)QUARTZ_FILTER_DEFAULT, sizeof(QUARTZ_FILTER_DEFAULT));
371 if(RegCreateKey(hkey,COM_INPROCSERVER, &hkey1)!=ERROR_SUCCESS) {
372 RegCloseKey(hkey);
373 goto initreg_error;
374 }
375 RegSetValueEx(hkey1,"",0,REG_SZ, (LPBYTE)QUARTZ_DLL, sizeof(QUARTZ_DLL));
376 RegSetValueEx(hkey1, COM_THREADMODEL, 0,REG_SZ, (LPBYTE)THREAD_BOTH, sizeof(THREAD_BOTH));
377 RegCloseKey(hkey1);
378 RegCloseKey(hkey);
379
380 //[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{CDBD8D00-C193-11D0-BD4E-00A0C911CE86}]
381 //@="CMediaPropertyBag"
382 //
383 //[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{CDBD8D00-C193-11D0-BD4E-00A0C911CE86}\InprocServer32]
384 //@="G:\\WINNT\\System32\\quartz.dll"
385 //"ThreadingModel"="Both"
386 if(RegCreateKey(HKEY_LOCAL_MACHINE, "Software\\CLASSES\\CLSID\\"QUARTZ_MEDIAPROP_CLASSID ,&hkey)!=ERROR_SUCCESS) {
387 goto initreg_error;
388 }
389 RegSetValueEx(hkey,"",0,REG_SZ, (LPBYTE)QUARTZ_MEDIAPROP_DEFAULT, sizeof(QUARTZ_MEDIAPROP_DEFAULT));
390 if(RegCreateKey(hkey,COM_INPROCSERVER, &hkey1)!=ERROR_SUCCESS) {
391 RegCloseKey(hkey);
392 goto initreg_error;
393 }
394 RegSetValueEx(hkey1,"",0,REG_SZ, (LPBYTE)QUARTZ_DLL, sizeof(QUARTZ_DLL));
395 RegSetValueEx(hkey1, COM_THREADMODEL, 0,REG_SZ, (LPBYTE)THREAD_BOTH, sizeof(THREAD_BOTH));
396 RegCloseKey(hkey1);
397 RegCloseKey(hkey);
398
399 //[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{79376820-07D0-11CF-A24D-0020AFD79767}]
400 //@="DirectSound Audio Renderer"
401 //
402 //[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{79376820-07D0-11CF-A24D-0020AFD79767}\InprocServer32]
403 //@="G:\\WINNT\\System32\\quartz.dll"
404 //"ThreadingModel"="Both"
405 if(RegCreateKey(HKEY_LOCAL_MACHINE, "Software\\CLASSES\\CLSID\\"QUARTZ_DSOUNDREND_CLASSID ,&hkey)!=ERROR_SUCCESS) {
406 goto initreg_error;
407 }
408 RegSetValueEx(hkey,"",0,REG_SZ, (LPBYTE)QUARTZ_DSOUNDREND_DEFAULT, sizeof(QUARTZ_DSOUNDREND_DEFAULT));
409 if(RegCreateKey(hkey,COM_INPROCSERVER, &hkey1)!=ERROR_SUCCESS) {
410 RegCloseKey(hkey);
411 goto initreg_error;
412 }
413 RegSetValueEx(hkey1,"",0,REG_SZ, (LPBYTE)QUARTZ_DLL, sizeof(QUARTZ_DLL));
414 RegSetValueEx(hkey1, COM_THREADMODEL, 0,REG_SZ, (LPBYTE)THREAD_BOTH, sizeof(THREAD_BOTH));
415 RegCloseKey(hkey1);
416 RegCloseKey(hkey);
417
418 //[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{e436ebb4-524f-11ce-9f53-0020af0ba770}]
419 //@="Filter Graph Control Plug In Distributor"
420 //[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{e436ebb4-524f-11ce-9f53-0020af0ba770}\InprocServer32]
421 //@="G:\\WINNT\\System32\\quartz.dll"
422 //"ThreadingModel"="Both"
423 if(RegCreateKey(HKEY_LOCAL_MACHINE, "Software\\CLASSES\\CLSID\\"QUARTZ_FILTERGRAPHDIST_CLASSID ,&hkey)!=ERROR_SUCCESS) {
424 goto initreg_error;
425 }
426 RegSetValueEx(hkey,"",0,REG_SZ, (LPBYTE)QUARTZ_FILTERGRAPHDIST_DEFAULT, sizeof(QUARTZ_FILTERGRAPHDIST_DEFAULT));
427 if(RegCreateKey(hkey,COM_INPROCSERVER, &hkey1)!=ERROR_SUCCESS) {
428 RegCloseKey(hkey);
429 goto initreg_error;
430 }
431 RegSetValueEx(hkey1,"",0,REG_SZ, (LPBYTE)QUARTZ_DLL, sizeof(QUARTZ_DLL));
432 RegSetValueEx(hkey1, COM_THREADMODEL, 0,REG_SZ, (LPBYTE)THREAD_BOTH, sizeof(THREAD_BOTH));
433 RegCloseKey(hkey1);
434 RegCloseKey(hkey);
435
436 //[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion]
437 //"ProgramFilesDir"="C:\Program Files"
438 //"CommonFilesDir"="C:\Program Files\Common Files"
439 //# This is intended for a centrally managed (server) directory where system files and e.g. fonts can reside. Most installs have this set to C:\WINDOWS, though.
440 //"SharedDir"="C:\WINDOWS"
441 if(RegCreateKey(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\Windows\\CurrentVersion",&hkey)!=ERROR_SUCCESS) {
442 goto initreg_error;
443 }
444 //Create x:\Program Files directory
445 strcpy(shellpath, InternalGetWindowsDirectory());
446 shellpath[2] = 0; //get drive
447 strcat(shellpath, "\\Program Files");
448 CreateDirectory(shellpath, NULL);
449 RegSetValueEx(hkey, DIR_PROGRAM, 0,REG_SZ, (LPBYTE)shellpath, strlen(shellpath)+1);
450
451 //Create x:\Program Files\Common Files directory
452 strcat(shellpath, "\\Common Files");
453 CreateDirectory(shellpath, NULL);
454 RegSetValueEx(hkey, DIR_PROGRAM_COMMON, 0,REG_SZ, (LPBYTE)shellpath, strlen(shellpath)+1);
455
456 strcpy(shellpath, InternalGetWindowsDirectory());
457 RegSetValueEx(hkey, DIR_SHARED, 0,REG_SZ, (LPBYTE)shellpath, strlen(shellpath)+1);
458
459 RegCloseKey(hkey);
460
461 //[HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\VIDEO]
462 //"\\Device\\Video0"="\\REGISTRY\\Machine\\System\\ControlSet001\\Services\\mga64\\Device0"
463 //"\\Device\\Video1"="\\REGISTRY\\Machine\\System\\ControlSet001\\Services\\VgaSave\\Device0"
464 //"VgaCompatible"="\\Device\\Video1"
465 if(RegCreateKey(HKEY_LOCAL_MACHINE,"HARDWARE\\DEVICEMAP\\VIDEO",&hkey)!=ERROR_SUCCESS) {
466 goto initreg_error;
467 }
468 RegSetValueEx(hkey,"\\Device\\Video0",0,REG_SZ, (LPBYTE)HARDWARE_VIDEO_GRADD, sizeof(HARDWARE_VIDEO_GRADD));
469 RegSetValueEx(hkey,"\\Device\\Video1",0,REG_SZ, (LPBYTE)HARDWARE_VIDEO_VGA, sizeof(HARDWARE_VIDEO_VGA));
470 RegSetValueEx(hkey, "VgaCompatible", 0,REG_SZ, (LPBYTE)HARDWARE_VIDEO_COMPATIBLE, sizeof(HARDWARE_VIDEO_COMPATIBLE));
471 RegCloseKey(hkey);
472
473 if(RegCreateKey(HKEY_LOCAL_MACHINE,"SYSTEM\\CurrentControlSet\\Services\\Gradd\\Device0",&hkey)!=ERROR_SUCCESS) {
474 goto initreg_error;
475 }
476 RegSetValueEx(hkey,"Device Description", 0, REG_SZ, (LPBYTE)HARDWARE_VIDEO_GRADD_DESCRIPTION, sizeof(HARDWARE_VIDEO_GRADD_DESCRIPTION));
477 RegCloseKey(hkey);
478
479 if(RegCreateKey(HKEY_LOCAL_MACHINE,"SYSTEM\\CurrentControlSet\\Services\\VgaSave\\Device0",&hkey)!=ERROR_SUCCESS) {
480 goto initreg_error;
481 }
482 RegSetValueEx(hkey,"Device Description", 0, REG_SZ, (LPBYTE)HARDWARE_VIDEO_VGA_DESCRIPTION, sizeof(HARDWARE_VIDEO_VGA_DESCRIPTION));
483 RegCloseKey(hkey);
484
485 //Software\Microsoft\Multimedia\Sound Mapper
486 if(RegCreateKey(HKEY_CURRENT_USER,"Software\\Microsoft\\Multimedia\\Sound Mapper",&hkey)!=ERROR_SUCCESS) {
487 goto initreg_error;
488 }
489 RegSetValueEx(hkey,"Playback", 0, REG_SZ, (LPBYTE)ODIN_WINMM_PLAYBACK, sizeof(ODIN_WINMM_PLAYBACK));
490 RegSetValueEx(hkey,"Record", 0, REG_SZ, (LPBYTE)ODIN_WINMM_RECORD, sizeof(ODIN_WINMM_RECORD));
491 RegCloseKey(hkey);
492
493 //Software\Microsoft\DirectX
494 if(RegCreateKey(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\DirectX",&hkey)!=ERROR_SUCCESS) {
495 goto initreg_error;
496 }
497 RegSetValueEx(hkey,"",0,REG_SZ, (LPBYTE)"", 0);
498 RegSetValueEx(hkey, "RC", 0,REG_SZ, (LPBYTE)DIRECTX_RC, sizeof(DIRECTX_RC));
499 RegSetValueEx(hkey, "Version", 0,REG_SZ, (LPBYTE)DIRECTX_VERSION, sizeof(DIRECTX_VERSION));
500 val = DIRECTX_INSTALLED_VERSION;
501 RegSetValueEx(hkey, "InstalledVersion", 0,REG_BINARY, (LPBYTE)&val, sizeof(DWORD));
502 RegCloseKey(hkey);
503
504 if(RegCreateKey(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\DirectDraw",&hkey)!=ERROR_SUCCESS) {
505 goto initreg_error;
506 }
507 //todo
508 RegCloseKey(hkey);
509
510 if(RegCreateKey(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\Direct3D",&hkey)!=ERROR_SUCCESS) {
511 goto initreg_error;
512 }
513 //todo
514 RegCloseKey(hkey);
515
516 if(RegCreateKey(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\DirectPlay",&hkey)!=ERROR_SUCCESS) {
517 goto initreg_error;
518 }
519 //todo
520 RegCloseKey(hkey);
521
522#if 0
523 if(RegCreateKey(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\DirectMusic",&hkey)!=ERROR_SUCCESS) {
524 goto initreg_error;
525 }
526 //todo
527 RegCloseKey(hkey);
528#endif
529
530// [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Cdfs]
531// "Type"=dword:00000002
532// "Start"=dword:00000004
533// "Group"="File system"
534// "ErrorControl"=dword:00000001
535// "DependOnGroup"=hex(7):53,43,53,49,20,43,44,52,4f,4d,20,43,6c,61,73,73,00,00
536
537 if(RegCreateKey(HKEY_LOCAL_MACHINE,"SYSTEM\\CurrentControlSet\\Services\\Cdfs",&hkey)!=ERROR_SUCCESS) {
538 goto initreg_error;
539 }
540 val = 0x2;
541 RegSetValueEx(hkey, KEY_DEVICE_TYPE,0,REG_DWORD, (LPBYTE)&val, sizeof(DWORD));
542 val = 0x4;
543 RegSetValueEx(hkey, KEY_DEVICE_START,0,REG_DWORD, (LPBYTE)&val, sizeof(DWORD));
544 val = 0x1;
545 RegSetValueEx(hkey, KEY_DEVICE_ERRORCONTROL,0,REG_DWORD, (LPBYTE)&val, sizeof(DWORD));
546 RegSetValueEx(hkey, KEY_DEVICE_GROUP,0,REG_SZ, (LPBYTE)DEVICE_GROUP_FILESYSTEM, sizeof(DEVICE_GROUP_FILESYSTEM));
547 //todo dependongroup
548 RegCloseKey(hkey);
549
550
551/*
552// [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Cdfs\Enum]
553// "0"="Root\\LEGACY_CDFS\\0000"
554// "Count"=dword:00000001
555// "NextInstance"=dword:00000001
556*/
557// [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Cdrom]
558// "Type"=dword:00000001
559// "Start"=dword:00000001
560// "Group"="SCSI CDROM Class"
561// "ErrorControl"=dword:00000000
562// "Tag"=dword:00000002
563// "DependOnGroup"=hex(7):53,43,53,49,20,6d,69,6e,69,70,6f,72,74,00,00
564// "Autorun"=dword:00000001
565
566 if(RegCreateKey(HKEY_LOCAL_MACHINE,"SYSTEM\\CurrentControlSet\\Services\\Cdrom",&hkey)!=ERROR_SUCCESS) {
567 goto initreg_error;
568 }
569 val = 0x1;
570 RegSetValueEx(hkey, KEY_DEVICE_TYPE,0,REG_DWORD, (LPBYTE)&val, sizeof(DWORD));
571 val = 0x1;
572 RegSetValueEx(hkey, KEY_DEVICE_START,0,REG_DWORD, (LPBYTE)&val, sizeof(DWORD));
573 val = 0x0;
574 RegSetValueEx(hkey, KEY_DEVICE_ERRORCONTROL,0,REG_DWORD, (LPBYTE)&val, sizeof(DWORD));
575 val = 0x2;
576 RegSetValueEx(hkey, KEY_DEVICE_TAG,0,REG_DWORD, (LPBYTE)&val, sizeof(DWORD));
577 val = 0x0;
578 RegSetValueEx(hkey, KEY_DEVICE_AUTORUN,0,REG_DWORD, (LPBYTE)&val, sizeof(DWORD));
579 RegSetValueEx(hkey, KEY_DEVICE_GROUP,0,REG_SZ, (LPBYTE)DEVICE_GROUP_SCSICDROM, sizeof(DEVICE_GROUP_SCSICDROM));
580 //todo dependongroup
581 RegCloseKey(hkey);
582
583/*
584[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Cdrom\Enum]
585"0"="Root\\LEGACY_CDROM\\0000"
586"Count"=dword:00000001
587"NextInstance"=dword:00000001
588*/
589
590 //[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Control\FileSystem]
591 //"Win31FileSystem"=dword:00000000
592 //"NtfsDisable8dot3NameCreation"=dword:00000000
593 //"Win95TruncatedExtensions"=dword:00000001
594 if(RegCreateKey(HKEY_LOCAL_MACHINE,"SYSTEM\\CurrentControlSet\\Control\\FileSystem",&hkey)!=ERROR_SUCCESS) {
595 goto initreg_error;
596 }
597 val = 0x0;
598 RegSetValueEx(hkey, "Win31FileSystem",0,REG_DWORD, (LPBYTE)&val, sizeof(DWORD));
599 val = 0x0;
600 RegSetValueEx(hkey, "NtfsDisable8dot3NameCreation",0,REG_DWORD, (LPBYTE)&val, sizeof(DWORD));
601 val = 0x1;
602 RegSetValueEx(hkey, "Win95TruncatedExtensions",0,REG_DWORD, (LPBYTE)&val, sizeof(DWORD));
603 RegCloseKey(hkey);
604
605//[HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM]
606//"Serial1"="COM2"
607//// if(RegCreateKey(HKEY_LOCAL_MACHINE,"HARDWARE\\DEVICEMAP\\SERIALCOMM",&hkey)!=ERROR_SUCCESS) {
608//// goto initreg_error;
609//// }
610//// RegSetValueEx(hkey, "Serial1",0,REG_SZ, (LPBYTE)"COM2", 5);
611//// RegCloseKey(hkey);
612
613
614//[HKEY_LOCAL_MACHINE\Software\Microsoft\OLE]
615//# allow cross-machine calls (RPC) (default Y)
616//"EnableDCOM"="Y"
617//# allow incoming connections ? (def. N)
618//"EnableRemoteConnect"="N"
619 if(RegCreateKey(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\OLE",&hkey)!=ERROR_SUCCESS) {
620 goto initreg_error;
621 }
622 digbuf[0] = 'Y';
623 digbuf[1] = 0;
624 RegSetValueEx(hkey, "EnableDCOM",0,REG_SZ, (LPBYTE)digbuf, 2);
625 digbuf[0] = 'N';
626 digbuf[1] = 0;
627 RegSetValueEx(hkey, "EnableRemoteConnect",0,REG_SZ, (LPBYTE)digbuf, 2);
628 RegCloseKey(hkey);
629
630 //Add MS Sans Serif to WarpSans font conversion entry
631 char temp;
632 if(PROFILE_GetOdinIniString(ODINFONTSECTION, "MS Sans Serif", "", &temp,
633 0) <= 1)
634 {
635 PROFILE_SetOdinIniString(ODINFONTSECTION, "MS Sans Serif", "WarpSans");
636 }
637 //Create system.ini with [mci] section
638 strcpy(shellpath, InternalGetWindowsDirectory());
639 strcat(shellpath, "\\system.ini");
640
641 if(GetPrivateProfileStringA(szMci, szCDAudio, szMciCDA, &temp, 0, shellpath) <= 1) {
642 WritePrivateProfileStringA(szMci, szCDAudio, szMciCDA, shellpath);
643 }
644
645 //Font registry keys (not complete)
646 //[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts]
647 //"Courier 10,12,15 (VGA res)"="COURE.FON"
648 //"MS Sans Serif 8,10,12,14,18,24 (VGA res)"="SSERIFE.FON"
649 //"MS Serif 8,10,12,14,18,24 (VGA res)"="SERIFE.FON"
650
651
652 if(RegCreateKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Fonts",&hkey)!=ERROR_SUCCESS) {
653 goto initreg_error;
654 }
655 #define FONT_COURIER "COURE.FON"
656 #define FONT_SANSSERIF "SSERIFE.FON"
657 #define FONT_SERIF "SERIFE.FON"
658 RegSetValueEx(hkey, "Courier 10,12,15 (VGA res)",0,REG_SZ, (LPBYTE)FONT_COURIER, sizeof(FONT_COURIER));
659 RegSetValueEx(hkey, "MS Sans Serif 8,10,12,14,18,24 (VGA res)",0,REG_SZ, (LPBYTE)FONT_SANSSERIF, sizeof(FONT_SANSSERIF));
660 RegSetValueEx(hkey, "MS Serif 8,10,12,14,18,24 (VGA res)",0,REG_SZ, (LPBYTE)FONT_SERIF, sizeof(FONT_SERIF));
661 RegCloseKey(hkey);
662
663 if(RegCreateKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Fonts",&hkey)!=ERROR_SUCCESS) {
664 goto initreg_error;
665 }
666 RegSetValueEx(hkey, "Courier 10,12,15 (VGA res)",0,REG_SZ, (LPBYTE)FONT_COURIER, sizeof(FONT_COURIER));
667 RegSetValueEx(hkey, "MS Sans Serif 8,10,12,14,18,24 (VGA res)",0,REG_SZ, (LPBYTE)FONT_SANSSERIF, sizeof(FONT_SANSSERIF));
668 RegSetValueEx(hkey, "MS Serif 8,10,12,14,18,24 (VGA res)",0,REG_SZ, (LPBYTE)FONT_SERIF, sizeof(FONT_SERIF));
669 RegCloseKey(hkey);
670 return TRUE;
671
672initreg_error:
673 dprintf((INITREG_ERROR));
674 return FALSE;
675}
676//******************************************************************************
677//******************************************************************************
678BOOL CreateSystemDirectories()
679{
680 char dirname[260];
681 HKEY hkey;
682
683 //Create Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders keys
684 //"Favorites"="C:\WINDOWS\Favorites"
685 //"StartUp"="C:\WINDOWS\Start Menu\Programs\Startup"
686 //"Desktop"="C:\WINDOWS\Desktop"
687 //"Programs"="C:\WINDOWS\Start Menu\Programs"
688 //"Fonts"="C:\WINDOWS\Fonts"
689 //"SendTo"="C:\WINDOWS\SendTo"
690 //"Start Menu"="C:\WINDOWS\Start Menu"
691 //"Templates"="C:\WINDOWS\ShellNew"
692 //"Recent"="C:\WINDOWS\Recent"
693 //"NetHood"="C:\WINDOWS\NetHood"
694 //"Personal"="C:\My Documents"
695
696 if(RegCreateKey(HKEY_CURRENT_USER,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders",&hkey)!=ERROR_SUCCESS) {
697 dprintf(("InitRegistry: Unable to register system information (3)"));
698 return FALSE;
699 }
700 //system32\drivers dir
701 strcpy(dirname, InternalGetSystemDirectory());
702 strcat(dirname, "\\Drivers");
703 CreateDirectory(dirname, NULL);
704 strcat(dirname, "\\etc");
705 CreateDirectory(dirname, NULL);
706
707 //SYSTEM dir
708 strcpy(dirname, InternalGetWindowsDirectory());
709 strcat(dirname, "\\SYSTEM");
710 CreateDirectory(dirname, NULL);
711
712 //AppData
713 strcpy(dirname, InternalGetWindowsDirectory());
714 strcat(dirname, "\\Application Data");
715 CreateDirectory(dirname, NULL);
716 RegSetValueEx(hkey,"AppData",0,REG_SZ, (LPBYTE)dirname, strlen(dirname)+1);
717 //Cache
718 strcpy(dirname, InternalGetWindowsDirectory());
719 strcat(dirname, "\\Temporary Internet Files");
720 CreateDirectory(dirname, NULL);
721 RegSetValueEx(hkey,"Cache",0,REG_SZ, (LPBYTE)dirname, strlen(dirname)+1);
722 //Cookies
723 strcpy(dirname, InternalGetWindowsDirectory());
724 strcat(dirname, "\\Cookies");
725 CreateDirectory(dirname, NULL);
726 RegSetValueEx(hkey,"Cookies",0,REG_SZ, (LPBYTE)dirname, strlen(dirname)+1);
727 //Desktop
728 strcpy(dirname, InternalGetWindowsDirectory());
729 strcat(dirname, "\\Desktop");
730 CreateDirectory(dirname, NULL);
731 RegSetValueEx(hkey,"Desktop",0,REG_SZ, (LPBYTE)dirname, strlen(dirname)+1);
732 //Favorites
733 strcpy(dirname, InternalGetWindowsDirectory());
734 strcat(dirname, "\\Favorites");
735 CreateDirectory(dirname, NULL);
736 RegSetValueEx(hkey,"Favorites",0,REG_SZ, (LPBYTE)dirname, strlen(dirname)+1);
737 //Fonts
738 strcpy(dirname, InternalGetWindowsDirectory());
739 strcat(dirname, "\\Fonts");
740 CreateDirectory(dirname, NULL);
741 RegSetValueEx(hkey,"Fonts",0,REG_SZ, (LPBYTE)dirname, strlen(dirname)+1);
742 //History
743 strcpy(dirname, InternalGetWindowsDirectory());
744 strcat(dirname, "\\History");
745 CreateDirectory(dirname, NULL);
746 RegSetValueEx(hkey,"History",0,REG_SZ, (LPBYTE)dirname, strlen(dirname)+1);
747 //NetHood
748 strcpy(dirname, InternalGetWindowsDirectory());
749 strcat(dirname, "\\NetHood");
750 CreateDirectory(dirname, NULL);
751 RegSetValueEx(hkey,"NetHood",0,REG_SZ, (LPBYTE)dirname, strlen(dirname)+1);
752 //Personal
753 strcpy(dirname, InternalGetWindowsDirectory());
754 strcat(dirname, "\\My Documents");
755 CreateDirectory(dirname, NULL);
756 RegSetValueEx(hkey,"Personal",0,REG_SZ, (LPBYTE)dirname, strlen(dirname)+1);
757 //PrintHood
758 strcpy(dirname, InternalGetWindowsDirectory());
759 strcat(dirname, "\\PrintHood");
760 CreateDirectory(dirname, NULL);
761 RegSetValueEx(hkey,"PrintHood",0,REG_SZ, (LPBYTE)dirname, strlen(dirname)+1);
762 //Recent
763 strcpy(dirname, InternalGetWindowsDirectory());
764 strcat(dirname, "\\Recent");
765 CreateDirectory(dirname, NULL);
766 RegSetValueEx(hkey,"Recent",0,REG_SZ, (LPBYTE)dirname, strlen(dirname)+1);
767 //SendTo
768 strcpy(dirname, InternalGetWindowsDirectory());
769 strcat(dirname, "\\SendTo");
770 CreateDirectory(dirname, NULL);
771 RegSetValueEx(hkey,"SendTo",0,REG_SZ, (LPBYTE)dirname, strlen(dirname)+1);
772 //Start Menu
773 strcpy(dirname, InternalGetWindowsDirectory());
774 strcat(dirname, "\\Start Menu");
775 CreateDirectory(dirname, NULL);
776 RegSetValueEx(hkey,"Start Menu",0,REG_SZ, (LPBYTE)dirname, strlen(dirname)+1);
777
778 //Temp directory
779 strcpy(dirname, InternalGetWindowsDirectory());
780 strcat(dirname, "\\Temp");
781 CreateDirectory(dirname, NULL);
782
783 //Programs
784 strcpy(dirname, InternalGetWindowsDirectory());
785 strcat(dirname, "\\Start Menu\\Programs");
786 CreateDirectory(dirname, NULL);
787 RegSetValueEx(hkey,"Programs",0,REG_SZ, (LPBYTE)dirname, strlen(dirname)+1);
788 //Startup
789 strcat(dirname, "\\Startup");
790 CreateDirectory(dirname, NULL);
791 RegSetValueEx(hkey,"Startup",0,REG_SZ, (LPBYTE)dirname, strlen(dirname)+1);
792 //ShellNew
793 strcpy(dirname, InternalGetWindowsDirectory());
794 strcat(dirname, "\\ShellNew");
795 CreateDirectory(dirname, NULL);
796 RegSetValueEx(hkey,"Templates",0,REG_SZ, (LPBYTE)dirname, strlen(dirname)+1);
797 RegCloseKey(hkey);
798
799 return TRUE;
800}
801//******************************************************************************
802//Example:
803//[HKEY_USERS\.DEFAULT\Control Panel\International]
804//"Locale"="00000409"
805//"sLanguage"="ENU"
806//"sCountry"="United States"
807//"iCountry"="1"
808//"sList"=","
809//"iMeasure"="1"
810//"sDecimal"="."
811//"sThousand"=","
812//"iDigits"="2"
813//"iLZero"="1"
814//"sCurrency"="$"
815//"iCurrDigits"="2"
816//"iCurrency"="0"
817//"iNegCurr"="0"
818//"sDate"="/"
819//"sTime"=":"
820//"sShortDate"="M/d/yy"
821//"sLongDate"="dddd, MMMM dd, yyyy"
822//"iDate"="0"
823//"iTime"="0"
824//"iTLZero"="0"
825//"s1159"="AM"
826//"s2359"="PM"
827//******************************************************************************
828BOOL SetupControlPanelKeys()
829{
830 HKEY hkey;
831 LCID lcid;
832 char tmp[128];
833
834 if(RegCreateKey(HKEY_CURRENT_USER,"Control Panel\\International",&hkey)!=ERROR_SUCCESS) {
835 dprintf(("SetupControlPanelKeys: Unable to create key"));
836 return FALSE;
837 }
838 lcid = GetUserDefaultLCID();
839 sprintf(tmp, "%08X", lcid);
840 RegSetValueEx(hkey,"Locale",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
841
842 GetLocaleInfo(lcid, LOCALE_SLANGUAGE, tmp, sizeof(tmp)-1);
843 RegSetValueEx(hkey,"sLanguage",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
844
845 GetLocaleInfo(lcid, LOCALE_SCOUNTRY, tmp, sizeof(tmp)-1);
846 RegSetValueEx(hkey,"sCountry",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
847
848 GetLocaleInfo(lcid, LOCALE_ICOUNTRY, tmp, sizeof(tmp)-1);
849 RegSetValueEx(hkey,"iCountry",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
850
851 GetLocaleInfo(lcid, LOCALE_SLIST, tmp, sizeof(tmp)-1);
852 RegSetValueEx(hkey,"sList",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
853
854 GetLocaleInfo(lcid, LOCALE_IMEASURE, tmp, sizeof(tmp)-1);
855 RegSetValueEx(hkey,"sMeasure",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
856
857 GetLocaleInfo(lcid, LOCALE_SDECIMAL, tmp, sizeof(tmp)-1);
858 RegSetValueEx(hkey,"sDecimal",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
859
860 GetLocaleInfo(lcid, LOCALE_STHOUSAND, tmp, sizeof(tmp)-1);
861 RegSetValueEx(hkey,"sThousand",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
862
863 GetLocaleInfo(lcid, LOCALE_IDIGITS, tmp, sizeof(tmp)-1);
864 RegSetValueEx(hkey,"iDigits",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
865
866 GetLocaleInfo(lcid, LOCALE_ILZERO, tmp, sizeof(tmp)-1);
867 RegSetValueEx(hkey,"iLZero",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
868
869 GetLocaleInfo(lcid, LOCALE_SCURRENCY, tmp, sizeof(tmp)-1);
870 RegSetValueEx(hkey,"sCurrency",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
871
872 GetLocaleInfo(lcid, LOCALE_ICURRDIGITS, tmp, sizeof(tmp)-1);
873 RegSetValueEx(hkey,"iCurrDigits",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
874
875 GetLocaleInfo(lcid, LOCALE_ICURRENCY, tmp, sizeof(tmp)-1);
876 RegSetValueEx(hkey,"iCurrency",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
877
878 GetLocaleInfo(lcid, LOCALE_INEGCURR, tmp, sizeof(tmp)-1);
879 RegSetValueEx(hkey,"iNegCurr",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
880
881 GetLocaleInfo(lcid, LOCALE_SDATE, tmp, sizeof(tmp)-1);
882 RegSetValueEx(hkey,"sDate",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
883
884 GetLocaleInfo(lcid, LOCALE_STIME, tmp, sizeof(tmp)-1);
885 RegSetValueEx(hkey,"sTime",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
886
887 GetLocaleInfo(lcid, LOCALE_SSHORTDATE, tmp, sizeof(tmp)-1);
888 RegSetValueEx(hkey,"sShortDate",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
889
890 GetLocaleInfo(lcid, LOCALE_SLONGDATE, tmp, sizeof(tmp)-1);
891 RegSetValueEx(hkey,"sLongDate",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
892
893 GetLocaleInfo(lcid, LOCALE_IDATE, tmp, sizeof(tmp)-1);
894 RegSetValueEx(hkey,"iDate",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
895
896 GetLocaleInfo(lcid, LOCALE_ITIME, tmp, sizeof(tmp)-1);
897 RegSetValueEx(hkey,"iTime",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
898
899 GetLocaleInfo(lcid, LOCALE_ITLZERO, tmp, sizeof(tmp)-1);
900 RegSetValueEx(hkey,"iTLZero",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
901
902 GetLocaleInfo(lcid, LOCALE_S1159, tmp, sizeof(tmp)-1);
903 RegSetValueEx(hkey,"s1159",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
904
905 GetLocaleInfo(lcid, LOCALE_S2359, tmp, sizeof(tmp)-1);
906 RegSetValueEx(hkey,"s2359",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
907
908 GetLocaleInfo(lcid, LOCALE_ICALENDARTYPE, tmp, sizeof(tmp)-1);
909 RegSetValueEx(hkey,"iCalendarType",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
910
911 RegCloseKey(hkey);
912
913 if(RegCreateKey(HKEY_CURRENT_USER,"Control Panel\\International\\Sorting Order",&hkey)!=ERROR_SUCCESS) {
914 dprintf(("SetupControlPanelKeys: Unable to create key"));
915 return FALSE;
916 }
917 RegCloseKey(hkey);
918 return TRUE;
919}
Note: See TracBrowser for help on using the repository browser.