66 lines
2.5 KiB
C
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) );
|
|
} |