#include "factoryp.h" #include // [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) ); }