windows-nt/Source/XPSP1/NT/base/ntsetup/opktools/factory/autologon.c
2020-09-26 16:20:57 +08:00

66 lines
2.5 KiB
C

#include "factoryp.h"
#include <regstr.h>
// [ComputerSettings]
// AuditAdminAutoLogon=Yes
// AutoLogon=Yes
//
#define REGSTR_PATH_WINNTLOGON TEXT("Software\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon")
#define DEFAULT_PWD TEXT("")
#define DEFAULT_VALUE TEXT("1")
BOOL AutoLogon(LPSTATEDATA lpStateData)
{
HKEY hKey;
BOOL fReturn = FALSE;
// Check the winbom to make sure they want the auto logon set.
//
if ( !DisplayAutoLogon(lpStateData) )
{
return TRUE;
}
// Now open the key and set the required values (see KB article Q253370).
//
if ( ERROR_SUCCESS == RegOpenKey(HKEY_LOCAL_MACHINE, REGSTR_PATH_WINNTLOGON, &hKey) )
{
LPTSTR lpszUserName = AllocateString(NULL, ( GetSkuType() == VER_SUITE_PERSONAL ) ? IDS_OWNER : IDS_ADMIN);
// The following three keys sets the auto admin logon after reboot. If the
// password is empty string the AutoAdminLogon will be reset after reboot.
//
//
if ( ( lpszUserName ) &&
( ERROR_SUCCESS == RegSetValueEx(hKey, TEXT("DefaultUserName"), 0, REG_SZ, (LPBYTE) lpszUserName, (lstrlen(lpszUserName) + 1) * sizeof(TCHAR)) ) &&
( ERROR_SUCCESS == RegSetValueEx(hKey, TEXT("DefaultPassword"), 0, REG_SZ, (LPBYTE) DEFAULT_PWD, (lstrlen(DEFAULT_PWD) + 1) * sizeof(TCHAR)) ) &&
( ERROR_SUCCESS == RegSetValueEx(hKey, TEXT("AutoAdminLogon"), 0, REG_SZ, (LPBYTE) DEFAULT_VALUE,(lstrlen(DEFAULT_VALUE) + 1) * sizeof(TCHAR)) ) &&
( ERROR_SUCCESS == RegDeleteValue(hKey, TEXT("AutoLogonCount")) ) )
{
fReturn = TRUE;
}
// Force so subsequent reboots won't reset AutoAdminLogon because of empty password.
//
// We don't need to force autologon for every reboot since the [ComputerSettings] section will be processed for
// every boot.
//
// ( ERROR_SUCCESS == RegSetValueEx(hKey, TEXT("ForceAutoLogon"), 0, REG_SZ, (LPBYTE) DEFAULT_VALUE, (lstrlen(DEFAULT_VALUE) + 1) * sizeof(TCHAR)) )
// Free the allocated user name (macro checks for NULL).
//
FREE(lpszUserName);
// Close the registry key.
//
RegCloseKey(hKey);
}
return fReturn;
}
BOOL DisplayAutoLogon(LPSTATEDATA lpStateData)
{
return ( IniSettingExists(lpStateData->lpszWinBOMPath, INI_SEC_WBOM_SETTINGS, INI_KEY_WBOM_AUTOLOGON_OLD, INI_VAL_WBOM_YES) ||
IniSettingExists(lpStateData->lpszWinBOMPath, INI_SEC_WBOM_SETTINGS, INI_KEY_WBOM_AUTOLOGON, INI_VAL_WBOM_YES) );
}