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

Last change on this file since 8683 was 8683, checked in by sandervl, 23 years ago

add ms shell dlg -> warpsans conversion

File size: 43.8 KB
Line 
1/* $Id: odininst.cpp,v 1.12 2002-06-15 12:33:46 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//#
473//# Entries for quartz.dll
474//#
475
476 //Quartz.dll keys
477 //[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{CDA42200-BD88-11d0-BD4E-00A0C911CE86}]
478 //@="Filter Mapper2"
479 //[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{CDA42200-BD88-11d0-BD4E-00A0C911CE86}\InprocServer32]
480 //@="G:\\WINNT\\System32\\quartz.dll"
481 //"ThreadingModel"="Both"
482 if(RegCreateKey(HKEY_LOCAL_MACHINE, "Software\\CLASSES\\CLSID\\"QUARTZ_FILTER_CLASSID ,&hkey)!=ERROR_SUCCESS) {
483 goto initreg_error;
484 }
485 RegSetValueEx(hkey,"",0,REG_SZ, (LPBYTE)QUARTZ_FILTER_DEFAULT, sizeof(QUARTZ_FILTER_DEFAULT));
486 if(RegCreateKey(hkey,COM_INPROCSERVER, &hkey1)!=ERROR_SUCCESS) {
487 RegCloseKey(hkey);
488 goto initreg_error;
489 }
490 RegSetValueEx(hkey1,"",0,REG_SZ, (LPBYTE)QUARTZ_DLL, sizeof(QUARTZ_DLL));
491 RegSetValueEx(hkey1, COM_THREADMODEL, 0,REG_SZ, (LPBYTE)THREAD_BOTH, sizeof(THREAD_BOTH));
492 RegCloseKey(hkey1);
493 RegCloseKey(hkey);
494
495 //[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{CDBD8D00-C193-11D0-BD4E-00A0C911CE86}]
496 //@="CMediaPropertyBag"
497 //
498 //[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{CDBD8D00-C193-11D0-BD4E-00A0C911CE86}\InprocServer32]
499 //@="G:\\WINNT\\System32\\quartz.dll"
500 //"ThreadingModel"="Both"
501 if(RegCreateKey(HKEY_LOCAL_MACHINE, "Software\\CLASSES\\CLSID\\"QUARTZ_MEDIAPROP_CLASSID ,&hkey)!=ERROR_SUCCESS) {
502 goto initreg_error;
503 }
504 RegSetValueEx(hkey,"",0,REG_SZ, (LPBYTE)QUARTZ_MEDIAPROP_DEFAULT, sizeof(QUARTZ_MEDIAPROP_DEFAULT));
505 if(RegCreateKey(hkey,COM_INPROCSERVER, &hkey1)!=ERROR_SUCCESS) {
506 RegCloseKey(hkey);
507 goto initreg_error;
508 }
509 RegSetValueEx(hkey1,"",0,REG_SZ, (LPBYTE)QUARTZ_DLL, sizeof(QUARTZ_DLL));
510 RegSetValueEx(hkey1, COM_THREADMODEL, 0,REG_SZ, (LPBYTE)THREAD_BOTH, sizeof(THREAD_BOTH));
511 RegCloseKey(hkey1);
512 RegCloseKey(hkey);
513
514 //[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{79376820-07D0-11CF-A24D-0020AFD79767}]
515 //@="DirectSound Audio Renderer"
516 //
517 //[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{79376820-07D0-11CF-A24D-0020AFD79767}\InprocServer32]
518 //@="G:\\WINNT\\System32\\quartz.dll"
519 //"ThreadingModel"="Both"
520 if(RegCreateKey(HKEY_LOCAL_MACHINE, "Software\\CLASSES\\CLSID\\"QUARTZ_DSOUNDREND_CLASSID ,&hkey)!=ERROR_SUCCESS) {
521 goto initreg_error;
522 }
523 RegSetValueEx(hkey,"",0,REG_SZ, (LPBYTE)QUARTZ_DSOUNDREND_DEFAULT, sizeof(QUARTZ_DSOUNDREND_DEFAULT));
524 if(RegCreateKey(hkey,COM_INPROCSERVER, &hkey1)!=ERROR_SUCCESS) {
525 RegCloseKey(hkey);
526 goto initreg_error;
527 }
528 RegSetValueEx(hkey1,"",0,REG_SZ, (LPBYTE)QUARTZ_DLL, sizeof(QUARTZ_DLL));
529 RegSetValueEx(hkey1, COM_THREADMODEL, 0,REG_SZ, (LPBYTE)THREAD_BOTH, sizeof(THREAD_BOTH));
530 RegCloseKey(hkey1);
531 RegCloseKey(hkey);
532
533 //[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{e436ebb4-524f-11ce-9f53-0020af0ba770}]
534 //@="Filter Graph Control Plug In Distributor"
535 //[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{e436ebb4-524f-11ce-9f53-0020af0ba770}\InprocServer32]
536 //@="G:\\WINNT\\System32\\quartz.dll"
537 //"ThreadingModel"="Both"
538 if(RegCreateKey(HKEY_LOCAL_MACHINE, "Software\\CLASSES\\CLSID\\"QUARTZ_FILTERGRAPHDIST_CLASSID ,&hkey)!=ERROR_SUCCESS) {
539 goto initreg_error;
540 }
541 RegSetValueEx(hkey,"",0,REG_SZ, (LPBYTE)QUARTZ_FILTERGRAPHDIST_DEFAULT, sizeof(QUARTZ_FILTERGRAPHDIST_DEFAULT));
542 if(RegCreateKey(hkey,COM_INPROCSERVER, &hkey1)!=ERROR_SUCCESS) {
543 RegCloseKey(hkey);
544 goto initreg_error;
545 }
546 RegSetValueEx(hkey1,"",0,REG_SZ, (LPBYTE)QUARTZ_DLL, sizeof(QUARTZ_DLL));
547 RegSetValueEx(hkey1, COM_THREADMODEL, 0,REG_SZ, (LPBYTE)THREAD_BOTH, sizeof(THREAD_BOTH));
548 RegCloseKey(hkey1);
549 RegCloseKey(hkey);
550
551
552#if 0
553 if(RegCreateKey(HKEY_LOCAL_MACHINE, "Software\\CLASSES\\CLSID\\E436EBB3-524F-11CE-9F53-0020AF0BA770" ,&hkey)!=ERROR_SUCCESS) {
554 goto initreg_error;
555 }
556 RegSetValueEx(hkey,"",0,REG_SZ, (LPBYTE)QUARTZ_FILTERGRAPHDIST_DEFAULT, sizeof(QUARTZ_FILTERGRAPHDIST_DEFAULT));
557 if(RegCreateKey(hkey,COM_INPROCSERVER, &hkey1)!=ERROR_SUCCESS) {
558 RegCloseKey(hkey);
559 goto initreg_error;
560 }
561 RegSetValueEx(hkey1,"",0,REG_SZ, (LPBYTE)QUARTZ_DLL, sizeof(QUARTZ_DLL));
562 RegSetValueEx(hkey1, COM_THREADMODEL, 0,REG_SZ, (LPBYTE)THREAD_BOTH, sizeof(THREAD_BOTH));
563 RegCloseKey(hkey1);
564 RegCloseKey(hkey);
565
566# CLSID_FilterGraph
567[HKEY_CLASSES_ROOT\CLSID\{E436EBB3-524F-11CE-9F53-0020AF0BA770}\InprocServer32]
568@="quartz.dll"
569"ThreadingModel"="Both"
570
571# CLSID_SystemClock
572[HKEY_CLASSES_ROOT\CLSID\{E436EBB1-524F-11CE-9F53-0020AF0BA770}\InprocServer32]
573@="quartz.dll"
574"ThreadingModel"="Both"
575
576# CLSID_MemoryAllocator
577[HKEY_CLASSES_ROOT\CLSID\{1E651CC0-B199-11D0-8212-00C04FC32C45}\InprocServer32]
578@="quartz.dll"
579"ThreadingModel"="Both"
580#endif
581
582 //[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion]
583 //"ProgramFilesDir"="C:\Program Files"
584 //"CommonFilesDir"="C:\Program Files\Common Files"
585 //# 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.
586 //"SharedDir"="C:\WINDOWS"
587 if(RegCreateKey(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\Windows\\CurrentVersion",&hkey)!=ERROR_SUCCESS) {
588 goto initreg_error;
589 }
590 //Create x:\Program Files directory
591 strcpy(shellpath, InternalGetWindowsDirectory());
592 shellpath[2] = 0; //get drive
593 strcat(shellpath, "\\Program Files");
594 CreateDirectory(shellpath, NULL);
595 RegSetValueEx(hkey, DIR_PROGRAM, 0,REG_SZ, (LPBYTE)shellpath, strlen(shellpath)+1);
596
597 //Create x:\Program Files\Common Files directory
598 strcat(shellpath, "\\Common Files");
599 CreateDirectory(shellpath, NULL);
600 RegSetValueEx(hkey, DIR_PROGRAM_COMMON, 0,REG_SZ, (LPBYTE)shellpath, strlen(shellpath)+1);
601
602 strcpy(shellpath, InternalGetWindowsDirectory());
603 RegSetValueEx(hkey, DIR_SHARED, 0,REG_SZ, (LPBYTE)shellpath, strlen(shellpath)+1);
604
605 RegCloseKey(hkey);
606
607 //[HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\VIDEO]
608 //"\\Device\\Video0"="\\REGISTRY\\Machine\\System\\ControlSet001\\Services\\mga64\\Device0"
609 //"\\Device\\Video1"="\\REGISTRY\\Machine\\System\\ControlSet001\\Services\\VgaSave\\Device0"
610 //"VgaCompatible"="\\Device\\Video1"
611 if(RegCreateKey(HKEY_LOCAL_MACHINE,"HARDWARE\\DEVICEMAP\\VIDEO",&hkey)!=ERROR_SUCCESS) {
612 goto initreg_error;
613 }
614 RegSetValueEx(hkey,"\\Device\\Video0",0,REG_SZ, (LPBYTE)HARDWARE_VIDEO_GRADD, sizeof(HARDWARE_VIDEO_GRADD));
615 RegSetValueEx(hkey,"\\Device\\Video1",0,REG_SZ, (LPBYTE)HARDWARE_VIDEO_VGA, sizeof(HARDWARE_VIDEO_VGA));
616 RegSetValueEx(hkey, "VgaCompatible", 0,REG_SZ, (LPBYTE)HARDWARE_VIDEO_COMPATIBLE, sizeof(HARDWARE_VIDEO_COMPATIBLE));
617 RegCloseKey(hkey);
618
619 if(RegCreateKey(HKEY_LOCAL_MACHINE,"SYSTEM\\CurrentControlSet\\Services\\Gradd\\Device0",&hkey)!=ERROR_SUCCESS) {
620 goto initreg_error;
621 }
622 RegSetValueEx(hkey,"Device Description", 0, REG_SZ, (LPBYTE)HARDWARE_VIDEO_GRADD_DESCRIPTION, sizeof(HARDWARE_VIDEO_GRADD_DESCRIPTION));
623 RegCloseKey(hkey);
624
625 if(RegCreateKey(HKEY_LOCAL_MACHINE,"SYSTEM\\CurrentControlSet\\Services\\VgaSave\\Device0",&hkey)!=ERROR_SUCCESS) {
626 goto initreg_error;
627 }
628 RegSetValueEx(hkey,"Device Description", 0, REG_SZ, (LPBYTE)HARDWARE_VIDEO_VGA_DESCRIPTION, sizeof(HARDWARE_VIDEO_VGA_DESCRIPTION));
629 RegCloseKey(hkey);
630
631 //Software\Microsoft\Multimedia\Sound Mapper
632 if(RegCreateKey(HKEY_CURRENT_USER,"Software\\Microsoft\\Multimedia\\Sound Mapper",&hkey)!=ERROR_SUCCESS) {
633 goto initreg_error;
634 }
635 RegSetValueEx(hkey,"Playback", 0, REG_SZ, (LPBYTE)ODIN_WINMM_PLAYBACK, sizeof(ODIN_WINMM_PLAYBACK));
636 RegSetValueEx(hkey,"Record", 0, REG_SZ, (LPBYTE)ODIN_WINMM_RECORD, sizeof(ODIN_WINMM_RECORD));
637 RegCloseKey(hkey);
638
639 //Software\Microsoft\DirectX
640 if(RegCreateKey(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\DirectX",&hkey)!=ERROR_SUCCESS) {
641 goto initreg_error;
642 }
643 RegSetValueEx(hkey,"",0,REG_SZ, (LPBYTE)"", 0);
644 RegSetValueEx(hkey, "RC", 0,REG_SZ, (LPBYTE)DIRECTX_RC, sizeof(DIRECTX_RC));
645 RegSetValueEx(hkey, "Version", 0,REG_SZ, (LPBYTE)DIRECTX_VERSION, sizeof(DIRECTX_VERSION));
646 val = DIRECTX_INSTALLED_VERSION;
647 RegSetValueEx(hkey, "InstalledVersion", 0,REG_BINARY, (LPBYTE)&val, sizeof(DWORD));
648 RegCloseKey(hkey);
649
650 if(RegCreateKey(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\DirectDraw",&hkey)!=ERROR_SUCCESS) {
651 goto initreg_error;
652 }
653 //todo
654 RegCloseKey(hkey);
655
656 if(RegCreateKey(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\Direct3D",&hkey)!=ERROR_SUCCESS) {
657 goto initreg_error;
658 }
659 //todo
660 RegCloseKey(hkey);
661
662 if(RegCreateKey(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\DirectPlay",&hkey)!=ERROR_SUCCESS) {
663 goto initreg_error;
664 }
665 //todo
666 RegCloseKey(hkey);
667
668#if 0
669 if(RegCreateKey(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\DirectMusic",&hkey)!=ERROR_SUCCESS) {
670 goto initreg_error;
671 }
672 //todo
673 RegCloseKey(hkey);
674#endif
675
676// [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Cdfs]
677// "Type"=dword:00000002
678// "Start"=dword:00000004
679// "Group"="File system"
680// "ErrorControl"=dword:00000001
681// "DependOnGroup"=hex(7):53,43,53,49,20,43,44,52,4f,4d,20,43,6c,61,73,73,00,00
682
683 if(RegCreateKey(HKEY_LOCAL_MACHINE,"SYSTEM\\CurrentControlSet\\Services\\Cdfs",&hkey)!=ERROR_SUCCESS) {
684 goto initreg_error;
685 }
686 val = 0x2;
687 RegSetValueEx(hkey, KEY_DEVICE_TYPE,0,REG_DWORD, (LPBYTE)&val, sizeof(DWORD));
688 val = 0x4;
689 RegSetValueEx(hkey, KEY_DEVICE_START,0,REG_DWORD, (LPBYTE)&val, sizeof(DWORD));
690 val = 0x1;
691 RegSetValueEx(hkey, KEY_DEVICE_ERRORCONTROL,0,REG_DWORD, (LPBYTE)&val, sizeof(DWORD));
692 RegSetValueEx(hkey, KEY_DEVICE_GROUP,0,REG_SZ, (LPBYTE)DEVICE_GROUP_FILESYSTEM, sizeof(DEVICE_GROUP_FILESYSTEM));
693 //todo dependongroup
694 RegCloseKey(hkey);
695
696
697/*
698// [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Cdfs\Enum]
699// "0"="Root\\LEGACY_CDFS\\0000"
700// "Count"=dword:00000001
701// "NextInstance"=dword:00000001
702*/
703// [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Cdrom]
704// "Type"=dword:00000001
705// "Start"=dword:00000001
706// "Group"="SCSI CDROM Class"
707// "ErrorControl"=dword:00000000
708// "Tag"=dword:00000002
709// "DependOnGroup"=hex(7):53,43,53,49,20,6d,69,6e,69,70,6f,72,74,00,00
710// "Autorun"=dword:00000001
711
712 if(RegCreateKey(HKEY_LOCAL_MACHINE,"SYSTEM\\CurrentControlSet\\Services\\Cdrom",&hkey)!=ERROR_SUCCESS) {
713 goto initreg_error;
714 }
715 val = 0x1;
716 RegSetValueEx(hkey, KEY_DEVICE_TYPE,0,REG_DWORD, (LPBYTE)&val, sizeof(DWORD));
717 val = 0x1;
718 RegSetValueEx(hkey, KEY_DEVICE_START,0,REG_DWORD, (LPBYTE)&val, sizeof(DWORD));
719 val = 0x0;
720 RegSetValueEx(hkey, KEY_DEVICE_ERRORCONTROL,0,REG_DWORD, (LPBYTE)&val, sizeof(DWORD));
721 val = 0x2;
722 RegSetValueEx(hkey, KEY_DEVICE_TAG,0,REG_DWORD, (LPBYTE)&val, sizeof(DWORD));
723 val = 0x0;
724 RegSetValueEx(hkey, KEY_DEVICE_AUTORUN,0,REG_DWORD, (LPBYTE)&val, sizeof(DWORD));
725 RegSetValueEx(hkey, KEY_DEVICE_GROUP,0,REG_SZ, (LPBYTE)DEVICE_GROUP_SCSICDROM, sizeof(DEVICE_GROUP_SCSICDROM));
726 //todo dependongroup
727 RegCloseKey(hkey);
728
729/*
730[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Cdrom\Enum]
731"0"="Root\\LEGACY_CDROM\\0000"
732"Count"=dword:00000001
733"NextInstance"=dword:00000001
734*/
735
736 //[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Control\FileSystem]
737 //"Win31FileSystem"=dword:00000000
738 //"NtfsDisable8dot3NameCreation"=dword:00000000
739 //"Win95TruncatedExtensions"=dword:00000001
740 if(RegCreateKey(HKEY_LOCAL_MACHINE,"SYSTEM\\CurrentControlSet\\Control\\FileSystem",&hkey)!=ERROR_SUCCESS) {
741 goto initreg_error;
742 }
743 val = 0x0;
744 RegSetValueEx(hkey, "Win31FileSystem",0,REG_DWORD, (LPBYTE)&val, sizeof(DWORD));
745 val = 0x0;
746 RegSetValueEx(hkey, "NtfsDisable8dot3NameCreation",0,REG_DWORD, (LPBYTE)&val, sizeof(DWORD));
747 val = 0x1;
748 RegSetValueEx(hkey, "Win95TruncatedExtensions",0,REG_DWORD, (LPBYTE)&val, sizeof(DWORD));
749 RegCloseKey(hkey);
750
751//[HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM]
752//"Serial1"="COM2"
753//// if(RegCreateKey(HKEY_LOCAL_MACHINE,"HARDWARE\\DEVICEMAP\\SERIALCOMM",&hkey)!=ERROR_SUCCESS) {
754//// goto initreg_error;
755//// }
756//// RegSetValueEx(hkey, "Serial1",0,REG_SZ, (LPBYTE)"COM2", 5);
757//// RegCloseKey(hkey);
758
759
760//[HKEY_LOCAL_MACHINE\Software\Microsoft\OLE]
761//# allow cross-machine calls (RPC) (default Y)
762//"EnableDCOM"="Y"
763//# allow incoming connections ? (def. N)
764//"EnableRemoteConnect"="N"
765 if(RegCreateKey(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\OLE",&hkey)!=ERROR_SUCCESS) {
766 goto initreg_error;
767 }
768 digbuf[0] = 'Y';
769 digbuf[1] = 0;
770 RegSetValueEx(hkey, "EnableDCOM",0,REG_SZ, (LPBYTE)digbuf, 2);
771 digbuf[0] = 'N';
772 digbuf[1] = 0;
773 RegSetValueEx(hkey, "EnableRemoteConnect",0,REG_SZ, (LPBYTE)digbuf, 2);
774 RegCloseKey(hkey);
775
776 //Add MS Sans Serif to WarpSans font conversion entry
777 char temp;
778 if(PROFILE_GetOdinIniString(ODINFONTSECTION, "MS Sans Serif", "", &temp,
779 0) <= 1)
780 {
781 PROFILE_SetOdinIniString(ODINFONTSECTION, "MS Sans Serif", "WarpSans");
782 }
783 //Add MS Shell Dlg
784 if(PROFILE_GetOdinIniString(ODINFONTSECTION, "MS Shell Dlg", "", &temp,
785 0) <= 1)
786 {
787 PROFILE_SetOdinIniString(ODINFONTSECTION, "MS Shell Dlg", "WarpSans");
788 }
789 //Add MS Shell Dlg 2 (win2k and up) too
790 if(PROFILE_GetOdinIniString(ODINFONTSECTION, "MS Shell Dlg 2", "", &temp,
791 0) <= 1)
792 {
793 PROFILE_SetOdinIniString(ODINFONTSECTION, "MS Shell Dlg 2", "WarpSans");
794 }
795
796 //Create system.ini with [mci] section
797 strcpy(shellpath, InternalGetWindowsDirectory());
798 strcat(shellpath, "\\system.ini");
799
800 if(GetPrivateProfileStringA(szMci, szCDAudio, szMciCDA, &temp, 0, shellpath) <= 1) {
801 WritePrivateProfileStringA(szMci, szCDAudio, szMciCDA, shellpath);
802 }
803
804 //Font registry keys (not complete)
805 //[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts]
806 //"Courier 10,12,15 (VGA res)"="COURE.FON"
807 //"MS Sans Serif 8,10,12,14,18,24 (VGA res)"="SSERIFE.FON"
808 //"MS Serif 8,10,12,14,18,24 (VGA res)"="SERIFE.FON"
809
810
811 if(RegCreateKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Fonts",&hkey)!=ERROR_SUCCESS) {
812 goto initreg_error;
813 }
814 #define FONT_COURIER "COURE.FON"
815 #define FONT_SANSSERIF "SSERIFE.FON"
816 #define FONT_SERIF "SERIFE.FON"
817 RegSetValueEx(hkey, "Courier 10,12,15 (VGA res)",0,REG_SZ, (LPBYTE)FONT_COURIER, sizeof(FONT_COURIER));
818 RegSetValueEx(hkey, "MS Sans Serif 8,10,12,14,18,24 (VGA res)",0,REG_SZ, (LPBYTE)FONT_SANSSERIF, sizeof(FONT_SANSSERIF));
819 RegSetValueEx(hkey, "MS Serif 8,10,12,14,18,24 (VGA res)",0,REG_SZ, (LPBYTE)FONT_SERIF, sizeof(FONT_SERIF));
820 RegCloseKey(hkey);
821
822 if(RegCreateKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Fonts",&hkey)!=ERROR_SUCCESS) {
823 goto initreg_error;
824 }
825 RegSetValueEx(hkey, "Courier 10,12,15 (VGA res)",0,REG_SZ, (LPBYTE)FONT_COURIER, sizeof(FONT_COURIER));
826 RegSetValueEx(hkey, "MS Sans Serif 8,10,12,14,18,24 (VGA res)",0,REG_SZ, (LPBYTE)FONT_SANSSERIF, sizeof(FONT_SANSSERIF));
827 RegSetValueEx(hkey, "MS Serif 8,10,12,14,18,24 (VGA res)",0,REG_SZ, (LPBYTE)FONT_SERIF, sizeof(FONT_SERIF));
828 RegCloseKey(hkey);
829 return TRUE;
830
831initreg_error:
832 dprintf((INITREG_ERROR));
833 return FALSE;
834}
835//******************************************************************************
836//******************************************************************************
837BOOL CreateSystemDirectories()
838{
839 char dirname[260];
840 HKEY hkey;
841
842 //Create Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders keys
843 //"Favorites"="C:\WINDOWS\Favorites"
844 //"StartUp"="C:\WINDOWS\Start Menu\Programs\Startup"
845 //"Desktop"="C:\WINDOWS\Desktop"
846 //"Programs"="C:\WINDOWS\Start Menu\Programs"
847 //"Fonts"="C:\WINDOWS\Fonts"
848 //"SendTo"="C:\WINDOWS\SendTo"
849 //"Start Menu"="C:\WINDOWS\Start Menu"
850 //"Templates"="C:\WINDOWS\ShellNew"
851 //"Recent"="C:\WINDOWS\Recent"
852 //"NetHood"="C:\WINDOWS\NetHood"
853 //"Personal"="C:\My Documents"
854
855 if(RegCreateKey(HKEY_CURRENT_USER,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders",&hkey)!=ERROR_SUCCESS) {
856 dprintf(("InitRegistry: Unable to register system information (3)"));
857 return FALSE;
858 }
859 //system32\drivers dir
860 strcpy(dirname, InternalGetSystemDirectory());
861 strcat(dirname, "\\Drivers");
862 CreateDirectory(dirname, NULL);
863 strcat(dirname, "\\etc");
864 CreateDirectory(dirname, NULL);
865
866 //SYSTEM dir
867 strcpy(dirname, InternalGetWindowsDirectory());
868 strcat(dirname, "\\SYSTEM");
869 CreateDirectory(dirname, NULL);
870
871 //AppData
872 strcpy(dirname, InternalGetWindowsDirectory());
873 strcat(dirname, "\\Application Data");
874 CreateDirectory(dirname, NULL);
875 RegSetValueEx(hkey,"AppData",0,REG_SZ, (LPBYTE)dirname, strlen(dirname)+1);
876 //Cache
877 strcpy(dirname, InternalGetWindowsDirectory());
878 strcat(dirname, "\\Temporary Internet Files");
879 CreateDirectory(dirname, NULL);
880 RegSetValueEx(hkey,"Cache",0,REG_SZ, (LPBYTE)dirname, strlen(dirname)+1);
881 //Cookies
882 strcpy(dirname, InternalGetWindowsDirectory());
883 strcat(dirname, "\\Cookies");
884 CreateDirectory(dirname, NULL);
885 RegSetValueEx(hkey,"Cookies",0,REG_SZ, (LPBYTE)dirname, strlen(dirname)+1);
886 //Desktop
887 strcpy(dirname, InternalGetWindowsDirectory());
888 strcat(dirname, "\\Desktop");
889 CreateDirectory(dirname, NULL);
890 RegSetValueEx(hkey,"Desktop",0,REG_SZ, (LPBYTE)dirname, strlen(dirname)+1);
891 //Favorites
892 strcpy(dirname, InternalGetWindowsDirectory());
893 strcat(dirname, "\\Favorites");
894 CreateDirectory(dirname, NULL);
895 RegSetValueEx(hkey,"Favorites",0,REG_SZ, (LPBYTE)dirname, strlen(dirname)+1);
896 //Fonts
897 strcpy(dirname, InternalGetWindowsDirectory());
898 strcat(dirname, "\\Fonts");
899 CreateDirectory(dirname, NULL);
900 RegSetValueEx(hkey,"Fonts",0,REG_SZ, (LPBYTE)dirname, strlen(dirname)+1);
901 //History
902 strcpy(dirname, InternalGetWindowsDirectory());
903 strcat(dirname, "\\History");
904 CreateDirectory(dirname, NULL);
905 RegSetValueEx(hkey,"History",0,REG_SZ, (LPBYTE)dirname, strlen(dirname)+1);
906 //NetHood
907 strcpy(dirname, InternalGetWindowsDirectory());
908 strcat(dirname, "\\NetHood");
909 CreateDirectory(dirname, NULL);
910 RegSetValueEx(hkey,"NetHood",0,REG_SZ, (LPBYTE)dirname, strlen(dirname)+1);
911 //Personal
912 strcpy(dirname, InternalGetWindowsDirectory());
913 strcat(dirname, "\\My Documents");
914 CreateDirectory(dirname, NULL);
915 RegSetValueEx(hkey,"Personal",0,REG_SZ, (LPBYTE)dirname, strlen(dirname)+1);
916 //PrintHood
917 strcpy(dirname, InternalGetWindowsDirectory());
918 strcat(dirname, "\\PrintHood");
919 CreateDirectory(dirname, NULL);
920 RegSetValueEx(hkey,"PrintHood",0,REG_SZ, (LPBYTE)dirname, strlen(dirname)+1);
921 //Recent
922 strcpy(dirname, InternalGetWindowsDirectory());
923 strcat(dirname, "\\Recent");
924 CreateDirectory(dirname, NULL);
925 RegSetValueEx(hkey,"Recent",0,REG_SZ, (LPBYTE)dirname, strlen(dirname)+1);
926 //SendTo
927 strcpy(dirname, InternalGetWindowsDirectory());
928 strcat(dirname, "\\SendTo");
929 CreateDirectory(dirname, NULL);
930 RegSetValueEx(hkey,"SendTo",0,REG_SZ, (LPBYTE)dirname, strlen(dirname)+1);
931 //Start Menu
932 strcpy(dirname, InternalGetWindowsDirectory());
933 strcat(dirname, "\\Start Menu");
934 CreateDirectory(dirname, NULL);
935 RegSetValueEx(hkey,"Start Menu",0,REG_SZ, (LPBYTE)dirname, strlen(dirname)+1);
936
937 //Temp directory
938 strcpy(dirname, InternalGetWindowsDirectory());
939 strcat(dirname, "\\Temp");
940 CreateDirectory(dirname, NULL);
941
942 //Programs
943 strcpy(dirname, InternalGetWindowsDirectory());
944 strcat(dirname, "\\Start Menu\\Programs");
945 CreateDirectory(dirname, NULL);
946 RegSetValueEx(hkey,"Programs",0,REG_SZ, (LPBYTE)dirname, strlen(dirname)+1);
947 //Startup
948 strcat(dirname, "\\Startup");
949 CreateDirectory(dirname, NULL);
950 RegSetValueEx(hkey,"Startup",0,REG_SZ, (LPBYTE)dirname, strlen(dirname)+1);
951 //ShellNew
952 strcpy(dirname, InternalGetWindowsDirectory());
953 strcat(dirname, "\\ShellNew");
954 CreateDirectory(dirname, NULL);
955 RegSetValueEx(hkey,"Templates",0,REG_SZ, (LPBYTE)dirname, strlen(dirname)+1);
956 RegCloseKey(hkey);
957
958 return TRUE;
959}
960//******************************************************************************
961//Example:
962//[HKEY_USERS\.DEFAULT\Control Panel\International]
963//"Locale"="00000409"
964//"sLanguage"="ENU"
965//"sCountry"="United States"
966//"iCountry"="1"
967//"sList"=","
968//"iMeasure"="1"
969//"sDecimal"="."
970//"sThousand"=","
971//"iDigits"="2"
972//"iLZero"="1"
973//"sCurrency"="$"
974//"iCurrDigits"="2"
975//"iCurrency"="0"
976//"iNegCurr"="0"
977//"sDate"="/"
978//"sTime"=":"
979//"sShortDate"="M/d/yy"
980//"sLongDate"="dddd, MMMM dd, yyyy"
981//"iDate"="0"
982//"iTime"="0"
983//"iTLZero"="0"
984//"s1159"="AM"
985//"s2359"="PM"
986//******************************************************************************
987BOOL SetupControlPanelKeys()
988{
989 HKEY hkey;
990 LCID lcid;
991 char tmp[128];
992
993 if(RegCreateKey(HKEY_CURRENT_USER,"Control Panel\\International",&hkey)!=ERROR_SUCCESS) {
994 dprintf(("SetupControlPanelKeys: Unable to create key"));
995 return FALSE;
996 }
997 lcid = GetUserDefaultLCID();
998 sprintf(tmp, "%08X", lcid);
999 RegSetValueEx(hkey,"Locale",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
1000
1001 GetLocaleInfo(lcid, LOCALE_SLANGUAGE, tmp, sizeof(tmp)-1);
1002 RegSetValueEx(hkey,"sLanguage",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
1003
1004 GetLocaleInfo(lcid, LOCALE_SCOUNTRY, tmp, sizeof(tmp)-1);
1005 RegSetValueEx(hkey,"sCountry",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
1006
1007 GetLocaleInfo(lcid, LOCALE_ICOUNTRY, tmp, sizeof(tmp)-1);
1008 RegSetValueEx(hkey,"iCountry",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
1009
1010 GetLocaleInfo(lcid, LOCALE_SLIST, tmp, sizeof(tmp)-1);
1011 RegSetValueEx(hkey,"sList",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
1012
1013 GetLocaleInfo(lcid, LOCALE_IMEASURE, tmp, sizeof(tmp)-1);
1014 RegSetValueEx(hkey,"sMeasure",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
1015
1016 GetLocaleInfo(lcid, LOCALE_SDECIMAL, tmp, sizeof(tmp)-1);
1017 RegSetValueEx(hkey,"sDecimal",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
1018
1019 GetLocaleInfo(lcid, LOCALE_STHOUSAND, tmp, sizeof(tmp)-1);
1020 RegSetValueEx(hkey,"sThousand",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
1021
1022 GetLocaleInfo(lcid, LOCALE_IDIGITS, tmp, sizeof(tmp)-1);
1023 RegSetValueEx(hkey,"iDigits",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
1024
1025 GetLocaleInfo(lcid, LOCALE_ILZERO, tmp, sizeof(tmp)-1);
1026 RegSetValueEx(hkey,"iLZero",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
1027
1028 GetLocaleInfo(lcid, LOCALE_SCURRENCY, tmp, sizeof(tmp)-1);
1029 RegSetValueEx(hkey,"sCurrency",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
1030
1031 GetLocaleInfo(lcid, LOCALE_ICURRDIGITS, tmp, sizeof(tmp)-1);
1032 RegSetValueEx(hkey,"iCurrDigits",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
1033
1034 GetLocaleInfo(lcid, LOCALE_ICURRENCY, tmp, sizeof(tmp)-1);
1035 RegSetValueEx(hkey,"iCurrency",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
1036
1037 GetLocaleInfo(lcid, LOCALE_INEGCURR, tmp, sizeof(tmp)-1);
1038 RegSetValueEx(hkey,"iNegCurr",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
1039
1040 GetLocaleInfo(lcid, LOCALE_SDATE, tmp, sizeof(tmp)-1);
1041 RegSetValueEx(hkey,"sDate",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
1042
1043 GetLocaleInfo(lcid, LOCALE_STIME, tmp, sizeof(tmp)-1);
1044 RegSetValueEx(hkey,"sTime",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
1045
1046 GetLocaleInfo(lcid, LOCALE_SSHORTDATE, tmp, sizeof(tmp)-1);
1047 RegSetValueEx(hkey,"sShortDate",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
1048
1049 GetLocaleInfo(lcid, LOCALE_SLONGDATE, tmp, sizeof(tmp)-1);
1050 RegSetValueEx(hkey,"sLongDate",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
1051
1052 GetLocaleInfo(lcid, LOCALE_IDATE, tmp, sizeof(tmp)-1);
1053 RegSetValueEx(hkey,"iDate",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
1054
1055 GetLocaleInfo(lcid, LOCALE_ITIME, tmp, sizeof(tmp)-1);
1056 RegSetValueEx(hkey,"iTime",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
1057
1058 GetLocaleInfo(lcid, LOCALE_ITLZERO, tmp, sizeof(tmp)-1);
1059 RegSetValueEx(hkey,"iTLZero",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
1060
1061 GetLocaleInfo(lcid, LOCALE_S1159, tmp, sizeof(tmp)-1);
1062 RegSetValueEx(hkey,"s1159",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
1063
1064 GetLocaleInfo(lcid, LOCALE_S2359, tmp, sizeof(tmp)-1);
1065 RegSetValueEx(hkey,"s2359",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
1066
1067 GetLocaleInfo(lcid, LOCALE_ICALENDARTYPE, tmp, sizeof(tmp)-1);
1068 RegSetValueEx(hkey,"iCalendarType",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
1069
1070 RegCloseKey(hkey);
1071
1072 if(RegCreateKey(HKEY_CURRENT_USER,"Control Panel\\International\\Sorting Order",&hkey)!=ERROR_SUCCESS) {
1073 dprintf(("SetupControlPanelKeys: Unable to create key"));
1074 return FALSE;
1075 }
1076 RegCloseKey(hkey);
1077 return TRUE;
1078}
Note: See TracBrowser for help on using the repository browser.