ReactOS 0.4.15-dev-8021-g7ce96fd
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
29#define CMP_MAGIC 0x01234567
30
31/* GLOBALS ******************************************************************/
32
34
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 TRACE("(%p, %s, %p)\n", hKey, debugstr_w(pszKey), pValue);
50
51 rc = RegQueryValueExW(hKey, pszKey, NULL, &dwType, NULL, &cbData);
52 if (rc != ERROR_SUCCESS)
53 {
54 WARN("RegQueryValueEx(%s) failed with error %lu\n", debugstr_w(pszKey), rc);
55 return rc;
56 }
57 if (dwType != REG_SZ)
58 {
59 WARN("Wrong registry data type (%u vs %u)\n", dwType, REG_SZ);
61 }
62 Value = (WCHAR*) HeapAlloc(GetProcessHeap(), 0, cbData + sizeof(WCHAR));
63 if (!Value)
64 {
65 WARN("No memory\n");
67 }
68 rc = RegQueryValueExW(hKey, pszKey, NULL, NULL, (LPBYTE)Value, &cbData);
69 if (rc != ERROR_SUCCESS)
70 {
71 WARN("RegQueryValueEx(%s) failed with error %lu\n", debugstr_w(pszKey), rc);
73 return rc;
74 }
75 /* NULL-terminate the string */
76 Value[cbData / sizeof(WCHAR)] = L'\0';
77
78 *pValue = Value;
79 return ERROR_SUCCESS;
80}
81
82static BOOL
84{
85 HKEY ControlKey = NULL;
86 LPWSTR SystemStartOptions = NULL;
87 LPWSTR CurrentOption, NextOption; /* Pointers into SystemStartOptions */
88 LONG rc;
89 BOOL ret = FALSE;
90
91 TRACE("()\n");
92
93 rc = RegOpenKeyEx(
96 0,
98 &ControlKey);
99 if (rc != ERROR_SUCCESS)
100 {
101 WARN("RegOpenKeyEx() failed with error %lu\n", rc);
102 goto cleanup;
103 }
104
105 rc = ReadRegSzKey(ControlKey, L"SystemStartOptions", &SystemStartOptions);
106 if (rc != ERROR_SUCCESS)
107 {
108 WARN("ReadRegSzKey() failed with error %lu\n", rc);
109 goto cleanup;
110 }
111
112 /* Check for CONSOLE switch in SystemStartOptions */
113 CurrentOption = SystemStartOptions;
114 while (CurrentOption)
115 {
116 NextOption = wcschr(CurrentOption, L' ');
117 if (NextOption)
118 *NextOption = L'\0';
119 if (_wcsicmp(CurrentOption, L"CONSOLE") == 0)
120 {
121 TRACE("Found 'CONSOLE' boot option\n");
122 ret = TRUE;
123 goto cleanup;
124 }
125 CurrentOption = NextOption ? NextOption + 1 : NULL;
126 }
127
128cleanup:
129 if (ControlKey != NULL)
130 RegCloseKey(ControlKey);
131 HeapFree(GetProcessHeap(), 0, SystemStartOptions);
132 TRACE("IsConsoleShell() returning %d\n", ret);
133 return ret;
134}
135
136static BOOL
138 OUT WCHAR *CommandLine, /* must be at least MAX_PATH long */
139 IN HKEY hRootKey)
140{
141 HKEY hKey;
142 DWORD Type, Size;
144 BOOL ConsoleShell = IsConsoleShell();
145 LONG rc;
146
147 TRACE("(%p, %p)\n", CommandLine, hRootKey);
148
149 rc = RegOpenKeyExW(hRootKey, L"Software\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon",
150 0, KEY_QUERY_VALUE, &hKey);
151 if (rc != ERROR_SUCCESS)
152 {
153 WARN("RegOpenKeyEx() failed with error %lu\n", rc);
154 return FALSE;
155 }
156
157 Size = sizeof(Shell);
159 ConsoleShell ? L"ConsoleShell" : L"Shell",
160 NULL,
161 &Type,
162 (LPBYTE)Shell,
163 &Size);
165
166 if (rc != ERROR_SUCCESS)
167 {
168 WARN("RegQueryValueEx() failed with error %lu\n", rc);
169 return FALSE;
170 }
171
172 if ((Type == REG_SZ) || (Type == REG_EXPAND_SZ))
173 {
174 TRACE("Found command line %s\n", debugstr_w(Shell));
175 wcscpy(CommandLine, Shell);
176 return TRUE;
177 }
178 else
179 {
180 WARN("Wrong type %lu (expected %u or %u)\n", Type, REG_SZ, REG_EXPAND_SZ);
181 return FALSE;
182 }
183}
184
185static BOOL
187 IN LPCWSTR CommandLine)
188{
189 STARTUPINFO si;
191 WCHAR ExpandedCmdLine[MAX_PATH];
192
193 TRACE("(%s)\n", debugstr_w(CommandLine));
194
195 ExpandEnvironmentStringsW(CommandLine, ExpandedCmdLine, ARRAYSIZE(ExpandedCmdLine));
196
197 ZeroMemory(&si, sizeof(si));
198 si.cb = sizeof(si);
201 ZeroMemory(&pi, sizeof(pi));
202
203 if (!CreateProcessW(NULL,
204 ExpandedCmdLine,
205 NULL,
206 NULL,
207 FALSE,
209 NULL,
210 NULL,
211 &si,
212 &pi))
213 {
214 WARN("CreateProcessW() failed with error %lu\n", GetLastError());
215 return FALSE;
216 }
217
218 CloseHandle(pi.hProcess);
219 CloseHandle(pi.hThread);
220 return TRUE;
221}
222
223static BOOL
225{
228 DWORD Type, Size;
229 DWORD Value = 0;
230 LONG rc;
231 HKEY hKey;
232
233 TRACE("()\n");
234
235 /* Safe Mode shell run */
237 L"SYSTEM\\CurrentControlSet\\Control\\SafeBoot\\Option",
238 0, KEY_QUERY_VALUE, &hKey);
239 if (rc == ERROR_SUCCESS)
240 {
241 Size = sizeof(Value);
242 rc = RegQueryValueExW(hKey, L"UseAlternateShell", NULL,
243 &Type, (LPBYTE)&Value, &Size);
245
246 if (rc == ERROR_SUCCESS)
247 {
248 if (Type == REG_DWORD)
249 {
250 if (Value)
251 {
252 /* Safe Mode Alternate Shell required */
254 L"SYSTEM\\CurrentControlSet\\Control\\SafeBoot",
255 0, KEY_READ, &hKey);
256 if (rc == ERROR_SUCCESS)
257 {
258 Size = sizeof(Shell);
259 rc = RegQueryValueExW(hKey, L"AlternateShell", NULL,
260 &Type, (LPBYTE)Shell, &Size);
262
263 if (rc == ERROR_SUCCESS)
264 {
265 if ((Type == REG_SZ) || (Type == REG_EXPAND_SZ))
266 {
267 TRACE("Key located - %s\n", debugstr_w(Shell));
268
269 /* Try to run alternate shell */
270 if (StartProcess(Shell))
271 {
272 TRACE("Alternate shell started (Safe Mode)\n");
273 return TRUE;
274 }
275 }
276 else
277 {
278 WARN("Wrong type %lu (expected %u or %u)\n",
280 }
281 }
282 else
283 {
284 WARN("Alternate shell in Safe Mode required but not specified.\n");
285 }
286 }
287 }
288 }
289 else
290 {
291 WARN("Wrong type %lu (expected %u)\n", Type, REG_DWORD);
292 }
293 }
294 }
295
296 /* Try to run shell in user key */
298 {
299 TRACE("Started shell from HKEY_CURRENT_USER\n");
300 return TRUE;
301 }
302
303 /* Try to run shell in local machine key */
305 {
306 TRACE("Started shell from HKEY_LOCAL_MACHINE\n");
307 return TRUE;
308 }
309
310 /* Try default shell */
311 if (IsConsoleShell())
312 {
316 StringCchCatW(Shell, ARRAYSIZE(Shell), L"cmd.exe");
317 }
318 else
319 {
323 StringCchCatW(Shell, ARRAYSIZE(Shell), L"explorer.exe");
324 }
325
326 if (!StartProcess(Shell))
327 {
328 WARN("Failed to start default shell '%s'\n", debugstr_w(Shell));
330 MessageBoxW(NULL, szMsg, NULL, MB_OK);
331 return FALSE;
332 }
333 return TRUE;
334}
335
336const WCHAR g_RegColorNames[][32] = {
337 L"Scrollbar", /* 00 = COLOR_SCROLLBAR */
338 L"Background", /* 01 = COLOR_DESKTOP */
339 L"ActiveTitle", /* 02 = COLOR_ACTIVECAPTION */
340 L"InactiveTitle", /* 03 = COLOR_INACTIVECAPTION */
341 L"Menu", /* 04 = COLOR_MENU */
342 L"Window", /* 05 = COLOR_WINDOW */
343 L"WindowFrame", /* 06 = COLOR_WINDOWFRAME */
344 L"MenuText", /* 07 = COLOR_MENUTEXT */
345 L"WindowText", /* 08 = COLOR_WINDOWTEXT */
346 L"TitleText", /* 09 = COLOR_CAPTIONTEXT */
347 L"ActiveBorder", /* 10 = COLOR_ACTIVEBORDER */
348 L"InactiveBorder", /* 11 = COLOR_INACTIVEBORDER */
349 L"AppWorkSpace", /* 12 = COLOR_APPWORKSPACE */
350 L"Hilight", /* 13 = COLOR_HIGHLIGHT */
351 L"HilightText", /* 14 = COLOR_HIGHLIGHTTEXT */
352 L"ButtonFace", /* 15 = COLOR_BTNFACE */
353 L"ButtonShadow", /* 16 = COLOR_BTNSHADOW */
354 L"GrayText", /* 17 = COLOR_GRAYTEXT */
355 L"ButtonText", /* 18 = COLOR_BTNTEXT */
356 L"InactiveTitleText", /* 19 = COLOR_INACTIVECAPTIONTEXT */
357 L"ButtonHilight", /* 20 = COLOR_BTNHIGHLIGHT */
358 L"ButtonDkShadow", /* 21 = COLOR_3DDKSHADOW */
359 L"ButtonLight", /* 22 = COLOR_3DLIGHT */
360 L"InfoText", /* 23 = COLOR_INFOTEXT */
361 L"InfoWindow", /* 24 = COLOR_INFOBK */
362 L"ButtonAlternateFace", /* 25 = COLOR_ALTERNATEBTNFACE */
363 L"HotTrackingColor", /* 26 = COLOR_HOTLIGHT */
364 L"GradientActiveTitle", /* 27 = COLOR_GRADIENTACTIVECAPTION */
365 L"GradientInactiveTitle", /* 28 = COLOR_GRADIENTINACTIVECAPTION */
366 L"MenuHilight", /* 29 = COLOR_MENUHILIGHT */
367 L"MenuBar" /* 30 = COLOR_MENUBAR */
368};
369
370static COLORREF
372 IN LPWSTR lpszCol)
373{
374 BYTE rgb[3];
375
376 TRACE("(%s)\n", debugstr_w(lpszCol));
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
394 TRACE("()\n");
395
397 0, KEY_QUERY_VALUE, &hKey);
398 if (rc != ERROR_SUCCESS)
399 {
400 WARN("RegOpenKeyEx() failed with error %lu\n", rc);
401 return;
402 }
403
404 for (i = 0; i < ARRAYSIZE(g_RegColorNames); i++)
405 {
406 Size = sizeof(szColor);
408 (LPBYTE)szColor, &Size);
409 if (rc == ERROR_SUCCESS && Type == REG_SZ)
410 {
411 crColor = StrToColorref(szColor);
412 SetSysColors(1, &i, &crColor);
413 }
414 else
415 {
416 WARN("RegQueryValueEx(%s) failed with error %lu\n",
418 }
419 }
420
422}
423
424static VOID
426{
427 HKEY hKey;
428 DWORD Type, Size;
429 WCHAR szWallpaper[MAX_PATH + 1];
430 LONG rc;
431
432 TRACE("()\n");
433
435 0, KEY_QUERY_VALUE, &hKey);
436 if (rc != ERROR_SUCCESS)
437 {
438 WARN("RegOpenKeyEx() failed with error %lu\n", rc);
439 return;
440 }
441
442 Size = sizeof(szWallpaper);
444 L"Wallpaper",
445 NULL,
446 &Type,
447 (LPBYTE)szWallpaper,
448 &Size);
450
451 if (rc == ERROR_SUCCESS && Type == REG_SZ)
452 {
453 ExpandEnvironmentStringsW(szWallpaper, szWallpaper, ARRAYSIZE(szWallpaper));
454 TRACE("Using wallpaper %s\n", debugstr_w(szWallpaper));
455
456 /* Load and change the wallpaper */
458 }
459 else
460 {
461 /* Remove the wallpaper */
462 TRACE("No wallpaper set in registry (error %lu)\n", rc);
464 }
465}
466
467static VOID
469{
470 TRACE("()\n");
471
475}
476
478
479static VOID
481{
484
485 TRACE("()\n");
486
487 hModule = LoadLibraryW(L"setupapi.dll");
488 if (!hModule)
489 {
490 WARN("LoadLibrary() failed with error %lu\n", GetLastError());
491 return;
492 }
493
497 else
498 WARN("GetProcAddress() failed\n");
499
501}
502
503static BOOL
504StartInstaller(IN LPCTSTR lpInstallerName)
505{
506 SYSTEM_INFO SystemInfo;
507 SIZE_T cchInstallerNameLen;
508 PWSTR ptr;
509 DWORD dwAttribs;
510 WCHAR Installer[MAX_PATH];
512
513 cchInstallerNameLen = wcslen(lpInstallerName);
514 if (ARRAYSIZE(Installer) < cchInstallerNameLen)
515 {
516 /* The buffer is not large enough to contain the installer file name */
517 return FALSE;
518 }
519
520 /*
521 * First, try to find the installer using the default drive, under
522 * the directory whose name corresponds to the currently-running
523 * CPU architecture.
524 */
525 GetSystemInfo(&SystemInfo);
526
527 *Installer = UNICODE_NULL;
528 /* Alternatively one can use SharedUserData->NtSystemRoot */
529 GetSystemWindowsDirectoryW(Installer, ARRAYSIZE(Installer) - cchInstallerNameLen - 1);
530 ptr = wcschr(Installer, L'\\');
531 if (ptr)
532 *++ptr = UNICODE_NULL;
533 else
534 *Installer = UNICODE_NULL;
535
536 /* Append the corresponding CPU architecture */
537 switch (SystemInfo.wProcessorArchitecture)
538 {
540 StringCchCatW(Installer, ARRAYSIZE(Installer), L"I386");
541 break;
542
544 StringCchCatW(Installer, ARRAYSIZE(Installer), L"MIPS");
545 break;
546
548 StringCchCatW(Installer, ARRAYSIZE(Installer), L"ALPHA");
549 break;
550
552 StringCchCatW(Installer, ARRAYSIZE(Installer), L"PPC");
553 break;
554
556 StringCchCatW(Installer, ARRAYSIZE(Installer), L"SHX");
557 break;
558
560 StringCchCatW(Installer, ARRAYSIZE(Installer), L"ARM");
561 break;
562
564 StringCchCatW(Installer, ARRAYSIZE(Installer), L"IA64");
565 break;
566
568 StringCchCatW(Installer, ARRAYSIZE(Installer), L"ALPHA64");
569 break;
570
572 StringCchCatW(Installer, ARRAYSIZE(Installer), L"AMD64");
573 break;
574
575 // case PROCESSOR_ARCHITECTURE_MSIL: /* .NET CPU-independent code */
577 default:
578 WARN("Unknown processor architecture %lu\n", SystemInfo.wProcessorArchitecture);
580 break;
581 }
582
584 StringCchCatW(Installer, ARRAYSIZE(Installer), L"\\");
585 StringCchCatW(Installer, ARRAYSIZE(Installer), lpInstallerName);
586
587 dwAttribs = GetFileAttributesW(Installer);
588 if ((dwAttribs != INVALID_FILE_ATTRIBUTES) &&
589 !(dwAttribs & FILE_ATTRIBUTE_DIRECTORY))
590 {
591 /* We have found the installer */
592 if (StartProcess(Installer))
593 return TRUE;
594 }
595
596 ERR("Failed to start the installer '%s', trying alternative.\n", debugstr_w(Installer));
597
598 /*
599 * We failed. Try to find the installer from either the current
600 * ReactOS installation directory, or from our current directory.
601 */
602 *Installer = UNICODE_NULL;
603 /* Alternatively one can use SharedUserData->NtSystemRoot */
604 if (GetSystemWindowsDirectoryW(Installer, ARRAYSIZE(Installer) - cchInstallerNameLen - 1))
605 StringCchCatW(Installer, ARRAYSIZE(Installer), L"\\");
606 StringCchCatW(Installer, ARRAYSIZE(Installer), lpInstallerName);
607
608 dwAttribs = GetFileAttributesW(Installer);
609 if ((dwAttribs != INVALID_FILE_ATTRIBUTES) &&
610 !(dwAttribs & FILE_ATTRIBUTE_DIRECTORY))
611 {
612 /* We have found the installer */
613 if (StartProcess(Installer))
614 return TRUE;
615 }
616
617 /* We failed. Display an error message and quit. */
618 ERR("Failed to start the installer '%s'.\n", debugstr_w(Installer));
620 MessageBoxW(NULL, szMsg, NULL, MB_OK);
621 return FALSE;
622}
623
624/* Used to get the shutdown privilege */
625static BOOL
626EnablePrivilege(LPCWSTR lpszPrivilegeName, BOOL bEnablePrivilege)
627{
629 HANDLE hToken;
631
634 &hToken);
635 if (!Success) return Success;
636
638 lpszPrivilegeName,
639 &tp.Privileges[0].Luid);
640 if (!Success) goto Quit;
641
642 tp.PrivilegeCount = 1;
643 tp.Privileges[0].Attributes = (bEnablePrivilege ? SE_PRIVILEGE_ENABLED : 0);
644
645 Success = AdjustTokenPrivileges(hToken, FALSE, &tp, 0, NULL, NULL);
646
647Quit:
648 CloseHandle(hToken);
649 return Success;
650}
651
652
653int WINAPI
655 IN HINSTANCE hPrevInstance,
656 IN LPWSTR lpszCmdLine,
657 IN int nCmdShow)
658{
659 BOOL bIsLiveCD, Success = TRUE;
660 STATE State;
661
663
664 bIsLiveCD = IsLiveCD();
665
666Restart:
668
669 if (bIsLiveCD)
670 {
671 State.NextPage = LOCALEPAGE;
672 State.Run = SHELL;
673 }
674 else
675 {
676 State.NextPage = DONE;
677 State.Run = SHELL;
678 }
679
680 if (State.NextPage != DONE) // && bIsLiveCD
681 {
683 }
684
685 switch (State.Run)
686 {
687 case SHELL:
689 if (Success)
690 NotifyLogon();
691 break;
692
693 case INSTALLER:
694 Success = StartInstaller(L"reactos.exe");
695 break;
696
697 case REBOOT:
698 {
702 Success = TRUE;
703 break;
704 }
705
706 default:
707 Success = FALSE;
708 break;
709 }
710
711 /*
712 * In LiveCD mode, go back to the main menu if we failed
713 * to either start the shell or the installer.
714 */
715 if (bIsLiveCD && !Success)
716 goto Restart;
717
718 return 0;
719}
720
721/* EOF */
DWORD WINAPI UpdatePerUserSystemParameters(DWORD dw1, DWORD dw2)
Type
Definition: Type.h:7
#define RC_STRING_MAX_SIZE
Definition: resource.h:3
#define IDS_SHELL_FAIL
Definition: resource.h:28
#define IDS_INSTALLER_FAIL
Definition: resource.h:29
#define WARN(fmt,...)
Definition: debug.h:112
#define ERR(fmt,...)
Definition: debug.h:110
#define RegCloseKey(hKey)
Definition: registry.h:49
CONFIGRET WINAPI CMP_Report_LogOn(_In_ DWORD dwMagic, _In_ DWORD dwProcessId)
Definition: cfgmgr.c:710
#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:519
DWORD WINAPI GetFileAttributesW(LPCWSTR lpFileName)
Definition: fileinfo.c:652
UINT WINAPI GetSystemDirectoryW(OUT LPWSTR lpBuffer, IN UINT uSize)
Definition: path.c:2313
UINT WINAPI GetSystemWindowsDirectoryW(OUT LPWSTR lpBuffer, IN UINT uSize)
Definition: path.c:2397
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:4592
VOID WINAPI GetSystemInfo(IN LPSYSTEM_INFO lpSystemInfo)
Definition: sysinfo.c:143
#define RGB(r, g, b)
Definition: precomp.h:71
_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
_Check_return_ unsigned long __cdecl wcstoul(_In_z_ const wchar_t *_Str, _Out_opt_ _Deref_post_z_ wchar_t **_EndPtr, _In_ int _Radix)
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define debugstr_w
Definition: kernel32.h:32
#define REG_SZ
Definition: layer.c:22
BOOL IsLiveCD(VOID)
Definition: livecd.c:106
VOID RunLiveCD(PSTATE pState)
Definition: livecd.c:883
static char * NextOption(const char *const ostr)
Definition: getopt.c:31
#define ERROR_FILE_NOT_FOUND
Definition: disk.h:79
static PVOID ptr
Definition: dispmode.c:27
static refpint_t pi[]
Definition: server.c:96
#define PROCESSOR_ARCHITECTURE_IA64
Definition: ketypes.h:111
#define PROCESSOR_ARCHITECTURE_ALPHA64
Definition: ketypes.h:112
#define PROCESSOR_ARCHITECTURE_ALPHA
Definition: ketypes.h:107
#define PROCESSOR_ARCHITECTURE_ARM
Definition: ketypes.h:110
#define PROCESSOR_ARCHITECTURE_UNKNOWN
Definition: ketypes.h:115
#define PROCESSOR_ARCHITECTURE_SHX
Definition: ketypes.h:109
#define PROCESSOR_ARCHITECTURE_MIPS
Definition: ketypes.h:106
#define PROCESSOR_ARCHITECTURE_PPC
Definition: ketypes.h:108
#define PROCESSOR_ARCHITECTURE_AMD64
Definition: ketypes.h:114
#define PROCESSOR_ARCHITECTURE_INTEL
Definition: ketypes.h:105
#define KEY_READ
Definition: nt_native.h:1023
#define KEY_QUERY_VALUE
Definition: nt_native.h:1016
#define FILE_ATTRIBUTE_DIRECTORY
Definition: nt_native.h:705
#define DWORD
Definition: nt_native.h:44
#define REG_EXPAND_SZ
Definition: nt_native.h:1494
#define UNICODE_NULL
#define L(x)
Definition: ntvdm.h:50
long LONG
Definition: pedump.c:60
#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:596
_Check_return_ _CRTIMP int __cdecl _wcsicmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
#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
DWORD dwFlags
Definition: winbase.h:842
DWORD cb
Definition: winbase.h:831
WORD wShowWindow
Definition: winbase.h:843
WORD wProcessorArchitecture
Definition: winbase.h:1169
uint16_t * PWSTR
Definition: typedefs.h:56
unsigned char * LPBYTE
Definition: typedefs.h:53
ULONG_PTR SIZE_T
Definition: typedefs.h:80
int32_t INT
Definition: typedefs.h:58
#define IN
Definition: typedefs.h:39
#define OUT
Definition: typedefs.h:40
static BOOL StartInstaller(IN LPCTSTR lpInstallerName)
Definition: userinit.c:504
static BOOL GetShell(OUT WCHAR *CommandLine, IN HKEY hRootKey)
Definition: userinit.c:137
static BOOL StartProcess(IN LPCWSTR CommandLine)
Definition: userinit.c:186
static VOID SetUserSettings(VOID)
Definition: userinit.c:468
static BOOL EnablePrivilege(LPCWSTR lpszPrivilegeName, BOOL bEnablePrivilege)
Definition: userinit.c:626
DWORD(WINAPI * PCMP_REPORT_LOGON)(DWORD, DWORD)
Definition: userinit.c:477
HINSTANCE hInstance
Definition: userinit.c:33
#define CMP_MAGIC
Definition: userinit.c:29
static VOID NotifyLogon(VOID)
Definition: userinit.c:480
const WCHAR g_RegColorNames[][32]
Definition: userinit.c:336
static VOID SetUserWallpaper(VOID)
Definition: userinit.c:425
static BOOL IsConsoleShell(VOID)
Definition: userinit.c:83
LONG ReadRegSzKey(IN HKEY hKey, IN LPCWSTR pszKey, OUT LPWSTR *pValue)
Definition: userinit.c:39
static VOID SetUserSysColors(VOID)
Definition: userinit.c:385
static BOOL StartShell(VOID)
Definition: userinit.c:224
int WINAPI wWinMain(IN HINSTANCE hInst, IN HINSTANCE hPrevInstance, IN LPWSTR lpszCmdLine, IN int nCmdShow)
Definition: userinit.c:654
static COLORREF StrToColorref(IN LPWSTR lpszCol)
Definition: userinit.c:371
@ REBOOT
Definition: userinit.h:44
@ INSTALLER
Definition: userinit.h:43
@ SHELL
Definition: userinit.h:42
@ LOCALEPAGE
Definition: userinit.h:35
#define INVALID_FILE_ATTRIBUTES
Definition: vfdcmd.c:23
static int Shell(const char **args)
Definition: vfdcmd.c:1020
int ret
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
Definition: wdfdevice.h:4533
_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:181
#define ZeroMemory
Definition: winbase.h:1712
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
#define STARTF_USESHOWWINDOW
Definition: winbase.h:491
DWORD WINAPI GetCurrentProcessId(void)
Definition: proc.c:1158
#define GetModuleHandle
Definition: winbase.h:3827
_In_ ULONG _In_ ULONG rgb
Definition: winddi.h:3521
DWORD COLORREF
Definition: windef.h:300
#define WINAPI
Definition: msvc.h:6
#define SE_SHUTDOWN_NAME
Definition: winnt_old.h:384
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12
#define HKEY_CURRENT_USER
Definition: winreg.h:11
#define RegOpenKeyEx
Definition: winreg.h:520
#define SW_SHOWNORMAL
Definition: winuser.h:770
#define SPI_SETDESKWALLPAPER
Definition: winuser.h:1369
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
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:1572
#define EWX_REBOOT
Definition: winuser.h:638
#define MB_OK
Definition: winuser.h:790
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:930
#define SE_PRIVILEGE_ENABLED
Definition: setypes.h:63
__wchar_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184
const CHAR * LPCTSTR
Definition: xmlstorage.h:193
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
unsigned char BYTE
Definition: xxhash.c:193