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

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

added reg keys for quartz.dll COM classes

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