source: trunk/tools/install/odininst.cpp

Last change on this file was 22023, checked in by dmik, 13 years ago

odininst: Register DLLs that require registration.

Do what regsvr32 does on a real Win32 machine. Necessary for
some DLLs (e.g. RSAENH.DLL that must add some Registry entries
for proper operation).

This fixes playback of some Flash content for Flash versions starting
from 10.1.

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