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

Last change on this file since 21679 was 21679, checked in by dmik, 14 years ago

odininst: Create "Program Files" in WINDOWSDIR instead of drive root.

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