Пример #1
0
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;
}
Пример #2
0
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);
}
Пример #3
0
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;
}
Пример #4
0
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;
}