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

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

MS Shell Dlg 2 font mapping added

File size: 43.6 KB
Line 
1/* $Id: odininst.cpp,v 1.11 2001-12-08 15:36:30 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 2 (win2k and up) too
784 if(PROFILE_GetOdinIniString(ODINFONTSECTION, "MS Shell Dlg 2", "", &temp,
785 0) <= 1)
786 {
787 PROFILE_SetOdinIniString(ODINFONTSECTION, "MS Shell Dlg 2", "WarpSans");
788 }
789
790 //Create system.ini with [mci] section
791 strcpy(shellpath, InternalGetWindowsDirectory());
792 strcat(shellpath, "\\system.ini");
793
794 if(GetPrivateProfileStringA(szMci, szCDAudio, szMciCDA, &temp, 0, shellpath) <= 1) {
795 WritePrivateProfileStringA(szMci, szCDAudio, szMciCDA, shellpath);
796 }
797
798 //Font registry keys (not complete)
799 //[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts]
800 //"Courier 10,12,15 (VGA res)"="COURE.FON"
801 //"MS Sans Serif 8,10,12,14,18,24 (VGA res)"="SSERIFE.FON"
802 //"MS Serif 8,10,12,14,18,24 (VGA res)"="SERIFE.FON"
803
804
805 if(RegCreateKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Fonts",&hkey)!=ERROR_SUCCESS) {
806 goto initreg_error;
807 }
808 #define FONT_COURIER "COURE.FON"
809 #define FONT_SANSSERIF "SSERIFE.FON"
810 #define FONT_SERIF "SERIFE.FON"
811 RegSetValueEx(hkey, "Courier 10,12,15 (VGA res)",0,REG_SZ, (LPBYTE)FONT_COURIER, sizeof(FONT_COURIER));
812 RegSetValueEx(hkey, "MS Sans Serif 8,10,12,14,18,24 (VGA res)",0,REG_SZ, (LPBYTE)FONT_SANSSERIF, sizeof(FONT_SANSSERIF));
813 RegSetValueEx(hkey, "MS Serif 8,10,12,14,18,24 (VGA res)",0,REG_SZ, (LPBYTE)FONT_SERIF, sizeof(FONT_SERIF));
814 RegCloseKey(hkey);
815
816 if(RegCreateKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Fonts",&hkey)!=ERROR_SUCCESS) {
817 goto initreg_error;
818 }
819 RegSetValueEx(hkey, "Courier 10,12,15 (VGA res)",0,REG_SZ, (LPBYTE)FONT_COURIER, sizeof(FONT_COURIER));
820 RegSetValueEx(hkey, "MS Sans Serif 8,10,12,14,18,24 (VGA res)",0,REG_SZ, (LPBYTE)FONT_SANSSERIF, sizeof(FONT_SANSSERIF));
821 RegSetValueEx(hkey, "MS Serif 8,10,12,14,18,24 (VGA res)",0,REG_SZ, (LPBYTE)FONT_SERIF, sizeof(FONT_SERIF));
822 RegCloseKey(hkey);
823 return TRUE;
824
825initreg_error:
826 dprintf((INITREG_ERROR));
827 return FALSE;
828}
829//******************************************************************************
830//******************************************************************************
831BOOL CreateSystemDirectories()
832{
833 char dirname[260];
834 HKEY hkey;
835
836 //Create Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders keys
837 //"Favorites"="C:\WINDOWS\Favorites"
838 //"StartUp"="C:\WINDOWS\Start Menu\Programs\Startup"
839 //"Desktop"="C:\WINDOWS\Desktop"
840 //"Programs"="C:\WINDOWS\Start Menu\Programs"
841 //"Fonts"="C:\WINDOWS\Fonts"
842 //"SendTo"="C:\WINDOWS\SendTo"
843 //"Start Menu"="C:\WINDOWS\Start Menu"
844 //"Templates"="C:\WINDOWS\ShellNew"
845 //"Recent"="C:\WINDOWS\Recent"
846 //"NetHood"="C:\WINDOWS\NetHood"
847 //"Personal"="C:\My Documents"
848
849 if(RegCreateKey(HKEY_CURRENT_USER,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders",&hkey)!=ERROR_SUCCESS) {
850 dprintf(("InitRegistry: Unable to register system information (3)"));
851 return FALSE;
852 }
853 //system32\drivers dir
854 strcpy(dirname, InternalGetSystemDirectory());
855 strcat(dirname, "\\Drivers");
856 CreateDirectory(dirname, NULL);
857 strcat(dirname, "\\etc");
858 CreateDirectory(dirname, NULL);
859
860 //SYSTEM dir
861 strcpy(dirname, InternalGetWindowsDirectory());
862 strcat(dirname, "\\SYSTEM");
863 CreateDirectory(dirname, NULL);
864
865 //AppData
866 strcpy(dirname, InternalGetWindowsDirectory());
867 strcat(dirname, "\\Application Data");
868 CreateDirectory(dirname, NULL);
869 RegSetValueEx(hkey,"AppData",0,REG_SZ, (LPBYTE)dirname, strlen(dirname)+1);
870 //Cache
871 strcpy(dirname, InternalGetWindowsDirectory());
872 strcat(dirname, "\\Temporary Internet Files");
873 CreateDirectory(dirname, NULL);
874 RegSetValueEx(hkey,"Cache",0,REG_SZ, (LPBYTE)dirname, strlen(dirname)+1);
875 //Cookies
876 strcpy(dirname, InternalGetWindowsDirectory());
877 strcat(dirname, "\\Cookies");
878 CreateDirectory(dirname, NULL);
879 RegSetValueEx(hkey,"Cookies",0,REG_SZ, (LPBYTE)dirname, strlen(dirname)+1);
880 //Desktop
881 strcpy(dirname, InternalGetWindowsDirectory());
882 strcat(dirname, "\\Desktop");
883 CreateDirectory(dirname, NULL);
884 RegSetValueEx(hkey,"Desktop",0,REG_SZ, (LPBYTE)dirname, strlen(dirname)+1);
885 //Favorites
886 strcpy(dirname, InternalGetWindowsDirectory());
887 strcat(dirname, "\\Favorites");
888 CreateDirectory(dirname, NULL);
889 RegSetValueEx(hkey,"Favorites",0,REG_SZ, (LPBYTE)dirname, strlen(dirname)+1);
890 //Fonts
891 strcpy(dirname, InternalGetWindowsDirectory());
892 strcat(dirname, "\\Fonts");
893 CreateDirectory(dirname, NULL);
894 RegSetValueEx(hkey,"Fonts",0,REG_SZ, (LPBYTE)dirname, strlen(dirname)+1);
895 //History
896 strcpy(dirname, InternalGetWindowsDirectory());
897 strcat(dirname, "\\History");
898 CreateDirectory(dirname, NULL);
899 RegSetValueEx(hkey,"History",0,REG_SZ, (LPBYTE)dirname, strlen(dirname)+1);
900 //NetHood
901 strcpy(dirname, InternalGetWindowsDirectory());
902 strcat(dirname, "\\NetHood");
903 CreateDirectory(dirname, NULL);
904 RegSetValueEx(hkey,"NetHood",0,REG_SZ, (LPBYTE)dirname, strlen(dirname)+1);
905 //Personal
906 strcpy(dirname, InternalGetWindowsDirectory());
907 strcat(dirname, "\\My Documents");
908 CreateDirectory(dirname, NULL);
909 RegSetValueEx(hkey,"Personal",0,REG_SZ, (LPBYTE)dirname, strlen(dirname)+1);
910 //PrintHood
911 strcpy(dirname, InternalGetWindowsDirectory());
912 strcat(dirname, "\\PrintHood");
913 CreateDirectory(dirname, NULL);
914 RegSetValueEx(hkey,"PrintHood",0,REG_SZ, (LPBYTE)dirname, strlen(dirname)+1);
915 //Recent
916 strcpy(dirname, InternalGetWindowsDirectory());
917 strcat(dirname, "\\Recent");
918 CreateDirectory(dirname, NULL);
919 RegSetValueEx(hkey,"Recent",0,REG_SZ, (LPBYTE)dirname, strlen(dirname)+1);
920 //SendTo
921 strcpy(dirname, InternalGetWindowsDirectory());
922 strcat(dirname, "\\SendTo");
923 CreateDirectory(dirname, NULL);
924 RegSetValueEx(hkey,"SendTo",0,REG_SZ, (LPBYTE)dirname, strlen(dirname)+1);
925 //Start Menu
926 strcpy(dirname, InternalGetWindowsDirectory());
927 strcat(dirname, "\\Start Menu");
928 CreateDirectory(dirname, NULL);
929 RegSetValueEx(hkey,"Start Menu",0,REG_SZ, (LPBYTE)dirname, strlen(dirname)+1);
930
931 //Temp directory
932 strcpy(dirname, InternalGetWindowsDirectory());
933 strcat(dirname, "\\Temp");
934 CreateDirectory(dirname, NULL);
935
936 //Programs
937 strcpy(dirname, InternalGetWindowsDirectory());
938 strcat(dirname, "\\Start Menu\\Programs");
939 CreateDirectory(dirname, NULL);
940 RegSetValueEx(hkey,"Programs",0,REG_SZ, (LPBYTE)dirname, strlen(dirname)+1);
941 //Startup
942 strcat(dirname, "\\Startup");
943 CreateDirectory(dirname, NULL);
944 RegSetValueEx(hkey,"Startup",0,REG_SZ, (LPBYTE)dirname, strlen(dirname)+1);
945 //ShellNew
946 strcpy(dirname, InternalGetWindowsDirectory());
947 strcat(dirname, "\\ShellNew");
948 CreateDirectory(dirname, NULL);
949 RegSetValueEx(hkey,"Templates",0,REG_SZ, (LPBYTE)dirname, strlen(dirname)+1);
950 RegCloseKey(hkey);
951
952 return TRUE;
953}
954//******************************************************************************
955//Example:
956//[HKEY_USERS\.DEFAULT\Control Panel\International]
957//"Locale"="00000409"
958//"sLanguage"="ENU"
959//"sCountry"="United States"
960//"iCountry"="1"
961//"sList"=","
962//"iMeasure"="1"
963//"sDecimal"="."
964//"sThousand"=","
965//"iDigits"="2"
966//"iLZero"="1"
967//"sCurrency"="$"
968//"iCurrDigits"="2"
969//"iCurrency"="0"
970//"iNegCurr"="0"
971//"sDate"="/"
972//"sTime"=":"
973//"sShortDate"="M/d/yy"
974//"sLongDate"="dddd, MMMM dd, yyyy"
975//"iDate"="0"
976//"iTime"="0"
977//"iTLZero"="0"
978//"s1159"="AM"
979//"s2359"="PM"
980//******************************************************************************
981BOOL SetupControlPanelKeys()
982{
983 HKEY hkey;
984 LCID lcid;
985 char tmp[128];
986
987 if(RegCreateKey(HKEY_CURRENT_USER,"Control Panel\\International",&hkey)!=ERROR_SUCCESS) {
988 dprintf(("SetupControlPanelKeys: Unable to create key"));
989 return FALSE;
990 }
991 lcid = GetUserDefaultLCID();
992 sprintf(tmp, "%08X", lcid);
993 RegSetValueEx(hkey,"Locale",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
994
995 GetLocaleInfo(lcid, LOCALE_SLANGUAGE, tmp, sizeof(tmp)-1);
996 RegSetValueEx(hkey,"sLanguage",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
997
998 GetLocaleInfo(lcid, LOCALE_SCOUNTRY, tmp, sizeof(tmp)-1);
999 RegSetValueEx(hkey,"sCountry",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
1000
1001 GetLocaleInfo(lcid, LOCALE_ICOUNTRY, tmp, sizeof(tmp)-1);
1002 RegSetValueEx(hkey,"iCountry",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
1003
1004 GetLocaleInfo(lcid, LOCALE_SLIST, tmp, sizeof(tmp)-1);
1005 RegSetValueEx(hkey,"sList",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
1006
1007 GetLocaleInfo(lcid, LOCALE_IMEASURE, tmp, sizeof(tmp)-1);
1008 RegSetValueEx(hkey,"sMeasure",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
1009
1010 GetLocaleInfo(lcid, LOCALE_SDECIMAL, tmp, sizeof(tmp)-1);
1011 RegSetValueEx(hkey,"sDecimal",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
1012
1013 GetLocaleInfo(lcid, LOCALE_STHOUSAND, tmp, sizeof(tmp)-1);
1014 RegSetValueEx(hkey,"sThousand",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
1015
1016 GetLocaleInfo(lcid, LOCALE_IDIGITS, tmp, sizeof(tmp)-1);
1017 RegSetValueEx(hkey,"iDigits",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
1018
1019 GetLocaleInfo(lcid, LOCALE_ILZERO, tmp, sizeof(tmp)-1);
1020 RegSetValueEx(hkey,"iLZero",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
1021
1022 GetLocaleInfo(lcid, LOCALE_SCURRENCY, tmp, sizeof(tmp)-1);
1023 RegSetValueEx(hkey,"sCurrency",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
1024
1025 GetLocaleInfo(lcid, LOCALE_ICURRDIGITS, tmp, sizeof(tmp)-1);
1026 RegSetValueEx(hkey,"iCurrDigits",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
1027
1028 GetLocaleInfo(lcid, LOCALE_ICURRENCY, tmp, sizeof(tmp)-1);
1029 RegSetValueEx(hkey,"iCurrency",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
1030
1031 GetLocaleInfo(lcid, LOCALE_INEGCURR, tmp, sizeof(tmp)-1);
1032 RegSetValueEx(hkey,"iNegCurr",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
1033
1034 GetLocaleInfo(lcid, LOCALE_SDATE, tmp, sizeof(tmp)-1);
1035 RegSetValueEx(hkey,"sDate",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
1036
1037 GetLocaleInfo(lcid, LOCALE_STIME, tmp, sizeof(tmp)-1);
1038 RegSetValueEx(hkey,"sTime",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
1039
1040 GetLocaleInfo(lcid, LOCALE_SSHORTDATE, tmp, sizeof(tmp)-1);
1041 RegSetValueEx(hkey,"sShortDate",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
1042
1043 GetLocaleInfo(lcid, LOCALE_SLONGDATE, tmp, sizeof(tmp)-1);
1044 RegSetValueEx(hkey,"sLongDate",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
1045
1046 GetLocaleInfo(lcid, LOCALE_IDATE, tmp, sizeof(tmp)-1);
1047 RegSetValueEx(hkey,"iDate",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
1048
1049 GetLocaleInfo(lcid, LOCALE_ITIME, tmp, sizeof(tmp)-1);
1050 RegSetValueEx(hkey,"iTime",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
1051
1052 GetLocaleInfo(lcid, LOCALE_ITLZERO, tmp, sizeof(tmp)-1);
1053 RegSetValueEx(hkey,"iTLZero",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
1054
1055 GetLocaleInfo(lcid, LOCALE_S1159, tmp, sizeof(tmp)-1);
1056 RegSetValueEx(hkey,"s1159",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
1057
1058 GetLocaleInfo(lcid, LOCALE_S2359, tmp, sizeof(tmp)-1);
1059 RegSetValueEx(hkey,"s2359",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
1060
1061 GetLocaleInfo(lcid, LOCALE_ICALENDARTYPE, tmp, sizeof(tmp)-1);
1062 RegSetValueEx(hkey,"iCalendarType",0,REG_SZ, (LPBYTE)tmp, strlen(tmp)+1);
1063
1064 RegCloseKey(hkey);
1065
1066 if(RegCreateKey(HKEY_CURRENT_USER,"Control Panel\\International\\Sorting Order",&hkey)!=ERROR_SUCCESS) {
1067 dprintf(("SetupControlPanelKeys: Unable to create key"));
1068 return FALSE;
1069 }
1070 RegCloseKey(hkey);
1071 return TRUE;
1072}
Note: See TracBrowser for help on using the repository browser.