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

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

add install date to odin.ini

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