ReactOS 0.4.17-dev-573-g8315b8c
userinit.c
Go to the documentation of this file.
1/*
2 * ReactOS applications
3 * Copyright (C) 2001, 2002 ReactOS Team
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License along
16 * with this program; if not, write to the Free Software Foundation, Inc.,
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18 */
19/*
20 * COPYRIGHT: See COPYING in the top level directory
21 * PROJECT: ReactOS Userinit Logon Application
22 * FILE: base/system/userinit/userinit.c
23 * PROGRAMMERS: Thomas Weidenmueller (w3seek@users.sourceforge.net)
24 * Hervé Poussineau (hpoussin@reactos.org)
25 */
26
27#include "userinit.h"
28#include <userenv.h>
29
30#define CMP_MAGIC 0x01234567
31
32/* GLOBALS ******************************************************************/
33
35
36/* FUNCTIONS ****************************************************************/
37
38LONG
40 IN HKEY hKey,
41 IN LPCWSTR pszKey,
43{
44 LONG rc;
45 DWORD dwType;
46 DWORD cbData = 0;
48
49 rc = RegQueryValueExW(hKey, pszKey, NULL, &dwType, NULL, &cbData);
50 if (rc != ERROR_SUCCESS)
51 {
52 WARN("RegQueryValueEx(%s) failed with error %lu\n", debugstr_w(pszKey), rc);
53 return rc;
54 }
55 if (dwType != REG_SZ)
56 {
57 WARN("Wrong registry data type (%u vs %u)\n", dwType, REG_SZ);
59 }
60 Value = (WCHAR*) HeapAlloc(GetProcessHeap(), 0, cbData + sizeof(WCHAR));
61 if (!Value)
62 {
63 WARN("No memory\n");
65 }
66 rc = RegQueryValueExW(hKey, pszKey, NULL, NULL, (LPBYTE)Value, &cbData);
67 if (rc != ERROR_SUCCESS)
68 {
69 WARN("RegQueryValueEx(%s) failed with error %lu\n", debugstr_w(pszKey), rc);
71 return rc;
72 }
73 /* NULL-terminate the string */
74 Value[cbData / sizeof(WCHAR)] = L'\0';
75
76 *pValue = Value;
77 return ERROR_SUCCESS;
78}
79
80static BOOL
82{
83 HKEY ControlKey = NULL;
84 LPWSTR SystemStartOptions = NULL;
85 LPWSTR CurrentOption, NextOption; /* Pointers into SystemStartOptions */
86 LONG rc;
87 BOOL ret = FALSE;
88
91 0,
93 &ControlKey);
94 if (rc != ERROR_SUCCESS)
95 {
96 WARN("RegOpenKeyEx() failed with error %lu\n", rc);
97 goto cleanup;
98 }
99
100 rc = ReadRegSzKey(ControlKey, L"SystemStartOptions", &SystemStartOptions);
101 if (rc != ERROR_SUCCESS)
102 {
103 WARN("ReadRegSzKey() failed with error %lu\n", rc);
104 goto cleanup;
105 }
106
107 /* Check for CONSOLE switch in SystemStartOptions */
108 CurrentOption = SystemStartOptions;
109 while (CurrentOption)
110 {
111 NextOption = wcschr(CurrentOption, L' ');
112 if (NextOption)
113 *NextOption = L'\0';
114 if (_wcsicmp(CurrentOption, L"CONSOLE") == 0)
115 {
116 TRACE("Found 'CONSOLE' boot option\n");
117 ret = TRUE;
118 goto cleanup;
119 }
120 CurrentOption = NextOption ? NextOption + 1 : NULL;
121 }
122
123cleanup:
124 if (ControlKey != NULL)
125 RegCloseKey(ControlKey);
126 HeapFree(GetProcessHeap(), 0, SystemStartOptions);
127
128 TRACE("IsConsoleShell() returning %u\n", ret);
129 return ret;
130}
131
132static BOOL
134 OUT WCHAR *CommandLine, /* must be at least MAX_PATH long */
135 IN HKEY hRootKey)
136{
137 HKEY hKey;
138 DWORD Type, Size;
140 BOOL ConsoleShell = IsConsoleShell();
141 LONG rc;
142
143 rc = RegOpenKeyExW(hRootKey, L"Software\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon",
144 0, KEY_QUERY_VALUE, &hKey);
145 if (rc != ERROR_SUCCESS)
146 {
147 WARN("RegOpenKeyEx() failed with error %lu\n", rc);
148 return FALSE;
149 }
150
151 Size = sizeof(Shell);
153 ConsoleShell ? L"ConsoleShell" : L"Shell",
154 NULL,
155 &Type,
156 (LPBYTE)Shell,
157 &Size);
159
160 if (rc != ERROR_SUCCESS)
161 {
162 WARN("RegQueryValueEx() failed with error %lu\n", rc);
163 return FALSE;
164 }
165
166 if ((Type == REG_SZ) || (Type == REG_EXPAND_SZ))
167 {
168 TRACE("Found command line %s\n", debugstr_w(Shell));
169 wcscpy(CommandLine, Shell);
170 return TRUE;
171 }
172 else
173 {
174 WARN("Wrong type %lu (expected %u or %u)\n", Type, REG_SZ, REG_EXPAND_SZ);
175 return FALSE;
176 }
177}
178
179static BOOL
181 _In_ PCWSTR CommandLine,
182 _In_opt_ PVOID pEnvironment)
183{
186 WCHAR ExpandedCmdLine[MAX_PATH], ProfilePath[MAX_PATH];
187 HANDLE hToken;
189
190 ExpandEnvironmentStringsW(CommandLine, ExpandedCmdLine, ARRAYSIZE(ExpandedCmdLine));
191
192 ZeroMemory(&si, sizeof(si));
193 si.cb = sizeof(si);
194 si.dwFlags = STARTF_USESHOWWINDOW;
195 si.wShowWindow = SW_SHOWNORMAL;
196 ZeroMemory(&pi, sizeof(pi));
197
199 {
200 DWORD PathSize = _countof(ProfilePath);
201 if (GetUserProfileDirectoryW(hToken, ProfilePath, &PathSize))
202 WorkingDir = ProfilePath;
203 CloseHandle(hToken);
204 }
205
206 if (!CreateProcessW(NULL,
207 ExpandedCmdLine,
208 NULL,
209 NULL,
210 FALSE,
212 pEnvironment,
214 &si,
215 &pi))
216 {
217 WARN("CreateProcessW() failed with error %lu\n", GetLastError());
218 return FALSE;
219 }
220
223 return TRUE;
224}
225
226static BOOL
228 _In_opt_ PVOID pEnvironment)
229{
230 DWORD Type, Size;
231 DWORD Value = 0;
232 LONG rc;
233 HKEY hKey;
236
237 /* Safe Mode shell run */
239 L"SYSTEM\\CurrentControlSet\\Control\\SafeBoot\\Option",
240 0, KEY_QUERY_VALUE, &hKey);
241 if (rc == ERROR_SUCCESS)
242 {
243 Size = sizeof(Value);
244 rc = RegQueryValueExW(hKey, L"UseAlternateShell", NULL,
245 &Type, (LPBYTE)&Value, &Size);
247
248 if (rc == ERROR_SUCCESS)
249 {
250 if (Type == REG_DWORD)
251 {
252 if (Value)
253 {
254 /* Safe Mode Alternate Shell required */
256 L"SYSTEM\\CurrentControlSet\\Control\\SafeBoot",
257 0, KEY_READ, &hKey);
258 if (rc == ERROR_SUCCESS)
259 {
260 Size = sizeof(Shell);
261 rc = RegQueryValueExW(hKey, L"AlternateShell", NULL,
262 &Type, (LPBYTE)Shell, &Size);
264
265 if (rc == ERROR_SUCCESS)
266 {
267 if ((Type == REG_SZ) || (Type == REG_EXPAND_SZ))
268 {
269 TRACE("Key located - %s\n", debugstr_w(Shell));
270
271 /* Try to run alternate shell */
272 if (StartProcess(Shell, pEnvironment))
273 {
274 TRACE("Alternate shell started (Safe Mode)\n");
275 return TRUE;
276 }
277 }
278 else
279 {
280 WARN("Wrong type %lu (expected %u or %u)\n",
282 }
283 }
284 else
285 {
286 WARN("Alternate shell in Safe Mode required but not specified.\n");
287 }
288 }
289 }
290 }
291 else
292 {
293 WARN("Wrong type %lu (expected %u)\n", Type, REG_DWORD);
294 }
295 }
296 }
297
298 /* Try to run shell in user key */
299 if (GetShell(Shell, HKEY_CURRENT_USER) && StartProcess(Shell, pEnvironment))
300 {
301 TRACE("Started shell from HKEY_CURRENT_USER\n");
302 return TRUE;
303 }
304
305 /* Try to run shell in local machine key */
306 if (GetShell(Shell, HKEY_LOCAL_MACHINE) && StartProcess(Shell, pEnvironment))
307 {
308 TRACE("Started shell from HKEY_LOCAL_MACHINE\n");
309 return TRUE;
310 }
311
312 /* Try default shell */
313 if (IsConsoleShell())
314 {
318 StringCchCatW(Shell, ARRAYSIZE(Shell), L"cmd.exe");
319 }
320 else
321 {
325 StringCchCatW(Shell, ARRAYSIZE(Shell), L"explorer.exe");
326 }
327
328 if (StartProcess(Shell, pEnvironment))
329 return TRUE;
330
331 /* We failed, display an error message and quit */
332 ERR("Failed to start default shell '%s'\n", debugstr_w(Shell));
334 MessageBoxW(NULL, szMsg, NULL, MB_OK);
335 return FALSE;
336}
337
338const WCHAR g_RegColorNames[][32] = {
339 L"Scrollbar", /* 00 = COLOR_SCROLLBAR */
340 L"Background", /* 01 = COLOR_DESKTOP */
341 L"ActiveTitle", /* 02 = COLOR_ACTIVECAPTION */
342 L"InactiveTitle", /* 03 = COLOR_INACTIVECAPTION */
343 L"Menu", /* 04 = COLOR_MENU */
344 L"Window", /* 05 = COLOR_WINDOW */
345 L"WindowFrame", /* 06 = COLOR_WINDOWFRAME */
346 L"MenuText", /* 07 = COLOR_MENUTEXT */
347 L"WindowText", /* 08 = COLOR_WINDOWTEXT */
348 L"TitleText", /* 09 = COLOR_CAPTIONTEXT */
349 L"ActiveBorder", /* 10 = COLOR_ACTIVEBORDER */
350 L"InactiveBorder", /* 11 = COLOR_INACTIVEBORDER */
351 L"AppWorkSpace", /* 12 = COLOR_APPWORKSPACE */
352 L"Hilight", /* 13 = COLOR_HIGHLIGHT */
353 L"HilightText", /* 14 = COLOR_HIGHLIGHTTEXT */
354 L"ButtonFace", /* 15 = COLOR_BTNFACE */
355 L"ButtonShadow", /* 16 = COLOR_BTNSHADOW */
356 L"GrayText", /* 17 = COLOR_GRAYTEXT */
357 L"ButtonText", /* 18 = COLOR_BTNTEXT */
358 L"InactiveTitleText", /* 19 = COLOR_INACTIVECAPTIONTEXT */
359 L"ButtonHilight", /* 20 = COLOR_BTNHIGHLIGHT */
360 L"ButtonDkShadow", /* 21 = COLOR_3DDKSHADOW */
361 L"ButtonLight", /* 22 = COLOR_3DLIGHT */
362 L"InfoText", /* 23 = COLOR_INFOTEXT */
363 L"InfoWindow", /* 24 = COLOR_INFOBK */
364 L"ButtonAlternateFace", /* 25 = COLOR_ALTERNATEBTNFACE */
365 L"HotTrackingColor", /* 26 = COLOR_HOTLIGHT */
366 L"GradientActiveTitle", /* 27 = COLOR_GRADIENTACTIVECAPTION */
367 L"GradientInactiveTitle", /* 28 = COLOR_GRADIENTINACTIVECAPTION */
368 L"MenuHilight", /* 29 = COLOR_MENUHILIGHT */
369 L"MenuBar" /* 30 = COLOR_MENUBAR */
370};
371
372static COLORREF
374 IN LPWSTR lpszCol)
375{
376 BYTE rgb[3];
377
378 rgb[0] = (BYTE)wcstoul(lpszCol, &lpszCol, 10);
379 rgb[1] = (BYTE)wcstoul(lpszCol, &lpszCol, 10);
380 rgb[2] = (BYTE)wcstoul(lpszCol, &lpszCol, 10);
381 return RGB(rgb[0], rgb[1], rgb[2]);
382}
383
384static VOID
386{
387 HKEY hKey;
388 INT i;
389 WCHAR szColor[25];
390 DWORD Type, Size;
391 COLORREF crColor;
392 LONG rc;
393
395 0, KEY_QUERY_VALUE, &hKey);
396 if (rc != ERROR_SUCCESS)
397 {
398 WARN("RegOpenKeyEx() failed with error %lu\n", rc);
399 return;
400 }
401
402 for (i = 0; i < ARRAYSIZE(g_RegColorNames); i++)
403 {
404 Size = sizeof(szColor);
406 (LPBYTE)szColor, &Size);
407 if (rc == ERROR_SUCCESS && Type == REG_SZ)
408 {
409 crColor = StrToColorref(szColor);
410 SetSysColors(1, &i, &crColor);
411 }
412 else
413 {
414 WARN("RegQueryValueEx(%s) failed with error %lu\n",
416 }
417 }
418
420}
421
422static VOID
424{
425 HKEY hKey;
426 DWORD Type, Size;
427 WCHAR szWallpaper[MAX_PATH + 1];
428 LONG rc;
429
431 0, KEY_QUERY_VALUE, &hKey);
432 if (rc != ERROR_SUCCESS)
433 {
434 WARN("RegOpenKeyEx() failed with error %lu\n", rc);
435 return;
436 }
437
438 Size = sizeof(szWallpaper);
440 L"Wallpaper",
441 NULL,
442 &Type,
443 (LPBYTE)szWallpaper,
444 &Size);
446
447 if (rc == ERROR_SUCCESS && Type == REG_SZ)
448 {
449 ExpandEnvironmentStringsW(szWallpaper, szWallpaper, ARRAYSIZE(szWallpaper));
450 TRACE("Using wallpaper %s\n", debugstr_w(szWallpaper));
451
452 /* Load and change the wallpaper */
454 }
455 else
456 {
457 /* Remove the wallpaper */
458 TRACE("No wallpaper set in registry (error %lu)\n", rc);
460 }
461}
462
463static VOID
465{
469}
470
472
473static VOID
475{
478
479 hModule = LoadLibraryW(L"setupapi.dll");
480 if (!hModule)
481 {
482 WARN("LoadLibrary() failed with error %lu\n", GetLastError());
483 return;
484 }
485
489 else
490 WARN("GetProcAddress() failed\n");
491
493}
494
495static BOOL
497{
498 extern WCHAR Installer[MAX_PATH]; // In livecd.c
500
501 /* If we have found the ReactOS Installer, start it */
503 return TRUE;
504
505 /* We failed, display an error message and quit */
506 ERR("Failed to start the installer '%s'\n", debugstr_w(Installer));
508 MessageBoxW(NULL, szMsg, NULL, MB_OK);
509 return FALSE;
510}
511
512/* Used to get the shutdown privilege */
513static BOOL
514EnablePrivilege(LPCWSTR lpszPrivilegeName, BOOL bEnablePrivilege)
515{
517 HANDLE hToken;
519
522 &hToken);
523 if (!Success) return Success;
524
526 lpszPrivilegeName,
527 &tp.Privileges[0].Luid);
528 if (!Success) goto Quit;
529
530 tp.PrivilegeCount = 1;
531 tp.Privileges[0].Attributes = (bEnablePrivilege ? SE_PRIVILEGE_ENABLED : 0);
532
533 Success = AdjustTokenPrivileges(hToken, FALSE, &tp, 0, NULL, NULL);
534
535Quit:
536 CloseHandle(hToken);
537 return Success;
538}
539
540
541int WINAPI
543 IN HINSTANCE hPrevInstance,
544 IN LPWSTR lpszCmdLine,
545 IN int nCmdShow)
546{
547 BOOL bIsLiveCD, Success = TRUE;
548 STATE State;
549
551
552 bIsLiveCD = IsMiniNT();
553
554Restart:
556
557 if (bIsLiveCD)
558 {
559 State.NextPage = LOCALEPAGE;
560 State.Run = SHELL;
561 }
562 else
563 {
564 State.NextPage = DONE;
565 State.Run = SHELL;
566 }
567
568 if (State.NextPage != DONE) // && bIsLiveCD
569 {
571 }
572
573 switch (State.Run)
574 {
575 case SHELL:
576 {
577 /* In LiveCD mode, create a suitable environment block for the
578 * shell; otherwise, use the current one (built by WinLogon) */
579 PVOID pEnvironment = NULL;
580 if (bIsLiveCD && /* In LiveCD mode we run under the LocalSystem account */
581 !CreateEnvironmentBlock(&pEnvironment, NULL, TRUE))
582 {
583 WARN("CreateEnvironmentBlock() failed, fall back to default (error %lu)\n",
584 GetLastError());
585 }
586 Success = StartShell(pEnvironment);
587 if (pEnvironment)
588 DestroyEnvironmentBlock(pEnvironment);
589 if (Success)
590 NotifyLogon();
591 break;
592 }
593
594 case INSTALLER:
596 break;
597
598 case REBOOT:
599 {
603 Success = TRUE;
604 break;
605 }
606
607 default:
608 Success = FALSE;
609 break;
610 }
611
612 /*
613 * In LiveCD mode, go back to the main menu if we failed
614 * to either start the shell or the installer.
615 */
616 if (bIsLiveCD && !Success)
617 goto Restart;
618
619 return 0;
620}
621
622/* EOF */
DWORD WINAPI UpdatePerUserSystemParameters(DWORD dw1, DWORD dw2)
Type
Definition: Type.h:7
#define RC_STRING_MAX_SIZE
Definition: resource.h:3
#define WARN(fmt,...)
Definition: precomp.h:61
#define ERR(fmt,...)
Definition: precomp.h:57
#define IDS_SHELL_FAIL
Definition: resource.h:28
#define IDS_INSTALLER_FAIL
Definition: resource.h:29
#define RegCloseKey(hKey)
Definition: registry.h:49
CONFIGRET WINAPI CMP_Report_LogOn(_In_ DWORD dwMagic, _In_ DWORD dwProcessId)
Definition: cfgmgr.c:739
#define ERROR_NOT_ENOUGH_MEMORY
Definition: dderror.h:7
#define ERROR_SUCCESS
Definition: deptool.c:10
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define ARRAYSIZE(array)
Definition: filtermapper.c:47
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
Definition: reg.c:3333
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
Definition: reg.c:4103
BOOL WINAPI LookupPrivilegeValueW(LPCWSTR lpSystemName, LPCWSTR lpPrivilegeName, PLUID lpLuid)
Definition: misc.c:782
BOOL WINAPI AdjustTokenPrivileges(HANDLE TokenHandle, BOOL DisableAllPrivileges, PTOKEN_PRIVILEGES NewState, DWORD BufferLength, PTOKEN_PRIVILEGES PreviousState, PDWORD ReturnLength)
Definition: security.c:374
BOOL WINAPI OpenProcessToken(HANDLE ProcessHandle, DWORD DesiredAccess, PHANDLE TokenHandle)
Definition: security.c:294
HMODULE hModule
Definition: animate.c:44
#define CloseHandle
Definition: compat.h:739
#define wcschr
Definition: compat.h:17
#define GetProcessHeap()
Definition: compat.h:736
#define GetProcAddress(x, y)
Definition: compat.h:753
#define HeapAlloc
Definition: compat.h:733
#define FreeLibrary(x)
Definition: compat.h:748
#define GetCurrentProcess()
Definition: compat.h:759
#define MAX_PATH
Definition: compat.h:34
#define HeapFree(x, y, z)
Definition: compat.h:735
#define LoadLibraryW(x)
Definition: compat.h:747
static void cleanup(void)
Definition: main.c:1335
DWORD WINAPI ExpandEnvironmentStringsW(IN LPCWSTR lpSrc, IN LPWSTR lpDst, IN DWORD nSize)
Definition: environ.c:492
UINT WINAPI GetSystemDirectoryW(OUT LPWSTR lpBuffer, IN UINT uSize)
Definition: path.c:2232
UINT WINAPI GetSystemWindowsDirectoryW(OUT LPWSTR lpBuffer, IN UINT uSize)
Definition: path.c:2316
BOOL WINAPI DECLSPEC_HOTPATCH CreateProcessW(LPCWSTR lpApplicationName, LPWSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCWSTR lpCurrentDirectory, LPSTARTUPINFOW lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation)
Definition: proc.c:4441
_ACRTIMP __msvcrt_ulong __cdecl wcstoul(const wchar_t *, wchar_t **, int)
Definition: wcs.c:2917
_ACRTIMP int __cdecl _wcsicmp(const wchar_t *, const wchar_t *)
Definition: wcs.c:164
static const WCHAR WorkingDir[]
Definition: install.c:50
BOOL WINAPI DestroyEnvironmentBlock(IN LPVOID lpEnvironment)
Definition: environment.c:725
BOOL WINAPI CreateEnvironmentBlock(OUT LPVOID *lpEnvironment, IN HANDLE hToken, IN BOOL bInherit)
Definition: environment.c:503
BOOL WINAPI GetUserProfileDirectoryW(_In_ HANDLE hToken, _Out_opt_ LPWSTR lpProfileDir, _Inout_ LPDWORD lpcchSize)
Definition: profile.c:1792
#define RGB(r, g, b)
Definition: precomp.h:67
return ret
Definition: mutex.c:146
#define L(x)
Definition: resources.c:13
_In_ uint64_t _In_ uint64_t _In_ uint64_t _In_opt_ traverse_ptr * tp
Definition: btrfs.c:2996
HINSTANCE hInst
Definition: dxdiag.c:13
@ Success
Definition: eventcreate.c:712
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
FxAutoRegKey hKey
PWCHAR pValue
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define debugstr_w
Definition: kernel32.h:32
#define REG_SZ
Definition: layer.c:22
VOID RunLiveCD(PSTATE pState)
Definition: livecd.c:978
WCHAR Installer[MAX_PATH]
Definition: livecd.c:14
#define ZeroMemory
Definition: minwinbase.h:31
static char * NextOption(const char *const ostr)
Definition: getopt.c:31
#define ERROR_FILE_NOT_FOUND
Definition: disk.h:79
static PROCESS_INFORMATION pi
Definition: debugger.c:2303
static SYSTEM_INFO si
Definition: virtual.c:39
#define _In_
Definition: no_sal2.h:158
#define _In_opt_
Definition: no_sal2.h:212
#define KEY_READ
Definition: nt_native.h:1026
#define KEY_QUERY_VALUE
Definition: nt_native.h:1019
#define DWORD
Definition: nt_native.h:44
#define REG_EXPAND_SZ
Definition: nt_native.h:1497
#define UNICODE_NULL
short WCHAR
Definition: pedump.c:58
long LONG
Definition: pedump.c:60
_In_opt_ _In_opt_ _In_ _In_ DWORD cbData
Definition: shlwapi.h:761
#define REGSTR_PATH_DESKTOP
Definition: regstr.h:659
#define REGSTR_PATH_CURRENT_CONTROL_SET
Definition: regstr.h:564
#define REGSTR_PATH_COLORS
Definition: regstr.h:662
#define DONE
Definition: rnr20lib.h:14
@ Restart
Definition: sacdrv.h:269
#define REG_DWORD
Definition: sdbapi.c:615
wcscpy
#define LoadStringW
Definition: utils.h:64
#define _countof(array)
Definition: sndvol32.h:70
#define TRACE(s)
Definition: solgame.cpp:4
STRSAFEAPI StringCchCatW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:325
Definition: userinit.h:57
const uint16_t * PCWSTR
Definition: typedefs.h:57
const uint16_t * LPCWSTR
Definition: typedefs.h:57
unsigned char * LPBYTE
Definition: typedefs.h:53
uint16_t * LPWSTR
Definition: typedefs.h:56
int32_t INT
Definition: typedefs.h:58
#define IN
Definition: typedefs.h:39
uint16_t * PWCHAR
Definition: typedefs.h:56
#define OUT
Definition: typedefs.h:40
static BOOL IsMiniNT(VOID)
Check whether we are running in MiniNT mode (e.g. live medium).
Definition: umpnpmgr.c:208
static BOOL GetShell(OUT WCHAR *CommandLine, IN HKEY hRootKey)
Definition: userinit.c:133
static VOID SetUserSettings(VOID)
Definition: userinit.c:464
static BOOL EnablePrivilege(LPCWSTR lpszPrivilegeName, BOOL bEnablePrivilege)
Definition: userinit.c:514
DWORD(WINAPI * PCMP_REPORT_LOGON)(DWORD, DWORD)
Definition: userinit.c:471
static BOOL StartInstaller(VOID)
Definition: userinit.c:496
static BOOL StartShell(_In_opt_ PVOID pEnvironment)
Definition: userinit.c:227
HINSTANCE hInstance
Definition: userinit.c:34
#define CMP_MAGIC
Definition: userinit.c:30
static VOID NotifyLogon(VOID)
Definition: userinit.c:474
const WCHAR g_RegColorNames[][32]
Definition: userinit.c:338
static VOID SetUserWallpaper(VOID)
Definition: userinit.c:423
static BOOL IsConsoleShell(VOID)
Definition: userinit.c:81
LONG ReadRegSzKey(IN HKEY hKey, IN LPCWSTR pszKey, OUT LPWSTR *pValue)
Definition: userinit.c:39
static VOID SetUserSysColors(VOID)
Definition: userinit.c:385
int WINAPI wWinMain(IN HINSTANCE hInst, IN HINSTANCE hPrevInstance, IN LPWSTR lpszCmdLine, IN int nCmdShow)
Definition: userinit.c:542
static COLORREF StrToColorref(IN LPWSTR lpszCol)
Definition: userinit.c:373
static BOOL StartProcess(_In_ PCWSTR CommandLine, _In_opt_ PVOID pEnvironment)
Definition: userinit.c:180
@ REBOOT
Definition: userinit.h:44
@ INSTALLER
Definition: userinit.h:43
@ SHELL
Definition: userinit.h:42
@ LOCALEPAGE
Definition: userinit.h:35
static int Shell(const char **args)
Definition: vfdcmd.c:1020
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
Definition: wdfdevice.h:4539
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
Definition: wdfregistry.h:413
#define NORMAL_PRIORITY_CLASS
Definition: winbase.h:186
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
#define STARTF_USESHOWWINDOW
Definition: winbase.h:468
#define CREATE_UNICODE_ENVIRONMENT
Definition: winbase.h:191
DWORD WINAPI GetCurrentProcessId(void)
Definition: proc.c:1155
#define GetModuleHandle
Definition: winbase.h:3548
_In_ ULONG _In_ ULONG rgb
Definition: winddi.h:3521
DWORD COLORREF
Definition: windef.h:100
#define WINAPI
Definition: msvc.h:6
#define SE_SHUTDOWN_NAME
Definition: winnt_old.h:427
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12
#define HKEY_CURRENT_USER
Definition: winreg.h:11
#define SW_SHOWNORMAL
Definition: winuser.h:781
#define SPI_SETDESKWALLPAPER
Definition: winuser.h:1380
BOOL WINAPI SetSysColors(_In_ int cElements, _In_reads_(cElements) CONST INT *lpaElements, _In_reads_(cElements) CONST COLORREF *lpaRgbValues)
int WINAPI MessageBoxW(_In_opt_ HWND hWnd, _In_opt_ LPCWSTR lpText, _In_opt_ LPCWSTR lpCaption, _In_ UINT uType)
#define SPIF_SENDCHANGE
Definition: winuser.h:1600
#define EWX_REBOOT
Definition: winuser.h:646
#define MB_OK
Definition: winuser.h:801
BOOL WINAPI SystemParametersInfoW(_In_ UINT uiAction, _In_ UINT uiParam, _Inout_opt_ PVOID pvParam, _In_ UINT fWinIni)
BOOL WINAPI ExitWindowsEx(_In_ UINT, _In_ DWORD)
#define TOKEN_ADJUST_PRIVILEGES
Definition: setypes.h:942
#define TOKEN_QUERY
Definition: setypes.h:940
#define SE_PRIVILEGE_ENABLED
Definition: setypes.h:63
unsigned char BYTE
Definition: xxhash.c:193