BOOL IsLiveCD(VOID) { HKEY ControlKey = NULL; LPWSTR SystemStartOptions = NULL; LPWSTR CurrentOption, NextOption; /* Pointers into SystemStartOptions */ LONG rc; BOOL ret = FALSE; TRACE("IsLiveCD()\n"); rc = RegOpenKeyEx(HKEY_LOCAL_MACHINE, REGSTR_PATH_CURRENT_CONTROL_SET, 0, KEY_QUERY_VALUE, &ControlKey); if (rc != ERROR_SUCCESS) { WARN("RegOpenKeyEx() failed with error %lu\n", rc); goto cleanup; } rc = ReadRegSzKey(ControlKey, L"SystemStartOptions", &SystemStartOptions); if (rc != ERROR_SUCCESS) { WARN("ReadRegSzKey() failed with error %lu\n", rc); goto cleanup; } /* Check for CONSOLE switch in SystemStartOptions */ CurrentOption = SystemStartOptions; while (CurrentOption) { NextOption = wcschr(CurrentOption, L' '); if (NextOption) *NextOption = L'\0'; if (_wcsicmp(CurrentOption, L"MININT") == 0) { TRACE("Found 'MININT' boot option\n"); ret = TRUE; goto cleanup; } CurrentOption = NextOption ? NextOption + 1 : NULL; } cleanup: if (ControlKey != NULL) RegCloseKey(ControlKey); HeapFree(GetProcessHeap(), 0, SystemStartOptions); TRACE("IsLiveCD() returning %d\n", ret); return ret; }
static VOID ChooseGinaUI(VOID) { HKEY ControlKey = NULL; LPWSTR SystemStartOptions = NULL; LPWSTR CurrentOption, NextOption; /* Pointers into SystemStartOptions */ BOOL ConsoleBoot = FALSE; LONG rc; rc = RegOpenKeyExW( HKEY_LOCAL_MACHINE, L"SYSTEM\\CurrentControlSet\\Control", 0, KEY_QUERY_VALUE, &ControlKey); rc = ReadRegSzKey(ControlKey, L"SystemStartOptions", &SystemStartOptions); if (rc != ERROR_SUCCESS) goto cleanup; /* Check for CMDCONS in SystemStartOptions */ CurrentOption = SystemStartOptions; while (CurrentOption) { NextOption = wcschr(CurrentOption, L' '); if (NextOption) *NextOption = L'\0'; if (wcsicmp(CurrentOption, L"CONSOLE") == 0) { TRACE("Found %S. Switching to console boot\n", CurrentOption); ConsoleBoot = TRUE; goto cleanup; } CurrentOption = NextOption ? NextOption + 1 : NULL; } cleanup: if (ConsoleBoot) pGinaUI = &GinaTextUI; else pGinaUI = &GinaGraphicalUI; if (ControlKey != NULL) RegCloseKey(ControlKey); HeapFree(GetProcessHeap(), 0, SystemStartOptions); }
static BOOL IsConsoleBoot(VOID) { HKEY hControlKey = NULL; LPWSTR pwszSystemStartOptions = NULL; LPWSTR pwszCurrentOption, pwszNextOption; /* Pointers into SystemStartOptions */ BOOL bConsoleBoot = FALSE; LONG rc; rc = RegOpenKeyExW( HKEY_LOCAL_MACHINE, L"SYSTEM\\CurrentControlSet\\Control", 0, KEY_QUERY_VALUE, &hControlKey); if (rc != ERROR_SUCCESS) goto cleanup; rc = ReadRegSzKey(hControlKey, L"SystemStartOptions", &pwszSystemStartOptions); if (rc != ERROR_SUCCESS) goto cleanup; /* Check for CONSOLE switch in SystemStartOptions */ pwszCurrentOption = pwszSystemStartOptions; while (pwszCurrentOption) { pwszNextOption = wcschr(pwszCurrentOption, L' '); if (pwszNextOption) *pwszNextOption = L'\0'; if (wcsicmp(pwszCurrentOption, L"CONSOLE") == 0) { DPRINT("Found %S. Switching to console boot\n", pwszCurrentOption); bConsoleBoot = TRUE; goto cleanup; } pwszCurrentOption = pwszNextOption ? pwszNextOption + 1 : NULL; } cleanup: if (hControlKey != NULL) RegCloseKey(hControlKey); if (pwszSystemStartOptions) HeapFree(GetProcessHeap(), 0, pwszSystemStartOptions); return bConsoleBoot; }
static BOOL DoAutoLogon( IN PGINA_CONTEXT pgContext) { HKEY WinLogonKey = NULL; LPWSTR AutoLogon = NULL; LPWSTR AutoCount = NULL; LPWSTR IgnoreShiftOverride = NULL; LPWSTR UserName = NULL; LPWSTR DomainName = NULL; LPWSTR Password = NULL; BOOL result = FALSE; LONG rc; TRACE("DoAutoLogon(): AutoLogonState = %lu\n", pgContext->AutoLogonState); if (pgContext->AutoLogonState == AUTOLOGON_DISABLED) return FALSE; rc = RegOpenKeyExW( HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\WinLogon", 0, KEY_QUERY_VALUE, &WinLogonKey); if (rc != ERROR_SUCCESS) goto cleanup; if (pgContext->AutoLogonState == AUTOLOGON_CHECK_REGISTRY) { /* Set it by default to disabled, we might reenable it again later */ pgContext->AutoLogonState = AUTOLOGON_DISABLED; rc = ReadRegSzKey(WinLogonKey, L"AutoAdminLogon", &AutoLogon); if (rc != ERROR_SUCCESS) goto cleanup; if (wcscmp(AutoLogon, L"1") != 0) goto cleanup; rc = ReadRegSzKey(WinLogonKey, L"AutoLogonCount", &AutoCount); if (rc == ERROR_SUCCESS && wcscmp(AutoCount, L"0") == 0) goto cleanup; else if (rc != ERROR_FILE_NOT_FOUND) goto cleanup; rc = ReadRegSzKey(WinLogonKey, L"IgnoreShiftOverride", &UserName); if (rc == ERROR_SUCCESS) { if (wcscmp(AutoLogon, L"1") != 0 && GetKeyState(VK_SHIFT) < 0) goto cleanup; } else if (GetKeyState(VK_SHIFT) < 0) { /* User pressed SHIFT */ goto cleanup; } pgContext->AutoLogonState = AUTOLOGON_ONCE; result = TRUE; } else /* pgContext->AutoLogonState == AUTOLOGON_ONCE */ { pgContext->AutoLogonState = AUTOLOGON_DISABLED; rc = ReadRegSzKey(WinLogonKey, L"DefaultUserName", &UserName); if (rc != ERROR_SUCCESS) goto cleanup; rc = ReadRegSzKey(WinLogonKey, L"DefaultDomainName", &DomainName); if (rc != ERROR_SUCCESS && rc != ERROR_FILE_NOT_FOUND) goto cleanup; rc = ReadRegSzKey(WinLogonKey, L"DefaultPassword", &Password); if (rc != ERROR_SUCCESS) goto cleanup; result = DoLoginTasks(pgContext, UserName, DomainName, Password); } cleanup: if (WinLogonKey != NULL) RegCloseKey(WinLogonKey); HeapFree(GetProcessHeap(), 0, AutoLogon); HeapFree(GetProcessHeap(), 0, AutoCount); HeapFree(GetProcessHeap(), 0, IgnoreShiftOverride); HeapFree(GetProcessHeap(), 0, UserName); HeapFree(GetProcessHeap(), 0, DomainName); HeapFree(GetProcessHeap(), 0, Password); TRACE("DoAutoLogon(): AutoLogonState = %lu, returning %d\n", pgContext->AutoLogonState, result); return result; }