blob: fbf23bd03b03326bdce5ae5ba63a62c15dbb9191 [file] [log] [blame]
// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_UPDATER_WIN_WIN_CONSTANTS_H_
#define CHROME_UPDATER_WIN_WIN_CONSTANTS_H_
#include <windows.h>
#include "base/time/time.h"
#include "chrome/updater/updater_branding.h"
namespace updater {
inline constexpr wchar_t kLegacyGoogleUpdateAppID[] =
L"" LEGACY_GOOGLE_UPDATE_APPID;
inline constexpr wchar_t kGoogleUpdate3WebSystemClassProgId[] =
COMPANY_SHORTNAME_STRING L"Update.Update3WebMachine";
inline constexpr wchar_t kGoogleUpdate3WebUserClassProgId[] =
COMPANY_SHORTNAME_STRING L"Update.Update3WebUser";
// The prefix to use for global names in WIN32 API's. The prefix is necessary
// to avoid collision on kernel object names.
inline constexpr wchar_t kGlobalPrefix[] = L"Global\\G";
// Registry keys and value names.
#define COMPANY_KEY L"Software\\" COMPANY_SHORTNAME_STRING L"\\"
// Use |Update| instead of PRODUCT_FULLNAME_STRING for the registry key name
// to be backward compatible with Google Update / Omaha.
#define UPDATER_KEY COMPANY_KEY L"Update\\"
#define CLIENTS_KEY UPDATER_KEY L"Clients\\"
#define CLIENT_STATE_KEY UPDATER_KEY L"ClientState\\"
#define CLIENT_STATE_MEDIUM_KEY UPDATER_KEY L"ClientStateMedium\\"
#define COMPANY_POLICIES_KEY \
L"Software\\Policies\\" COMPANY_SHORTNAME_STRING L"\\"
#define UPDATER_POLICIES_KEY COMPANY_POLICIES_KEY L"Update\\"
#define USER_REG_VISTA_LOW_INTEGRITY_HKCU \
L"Software\\Microsoft\\Internet Explorer\\" \
L"InternetRegistry\\REGISTRY\\USER"
// The environment variable is created into the environment of the installer
// process to indicate the updater scope. The valid values for the environment
// variable are "0" and "1".
#define ENV_GOOGLE_UPDATE_IS_MACHINE COMPANY_SHORTNAME_STRING L"UpdateIsMachine"
inline constexpr wchar_t kRegValuePV[] = L"pv";
inline constexpr wchar_t kRegValueBrandCode[] = L"brand";
inline constexpr wchar_t kRegValueAP[] = L"ap";
inline constexpr wchar_t kRegValueLang[] = L"lang";
inline constexpr wchar_t kRegValueDateOfLastActivity[] = L"DayOfLastActivity";
inline constexpr wchar_t kRegValueDateOfLastRollcall[] = L"DayOfLastRollCall";
inline constexpr wchar_t kRegValueDayOfInstall[] = L"DayOfInstall";
inline constexpr wchar_t kRegValueName[] = L"name";
// Values created under `UPDATER_KEY`.
inline constexpr wchar_t kRegValueUninstallCmdLine[] = L"UninstallCmdLine";
inline constexpr wchar_t kRegValueVersion[] = L"version";
// Timestamp when an OEM install is started, stored as minutes since the Windows
// Epoch.
inline constexpr wchar_t kRegValueOemInstallTimeMin[] = L"OemInstallTime";
// OEM installs are expected to be completed within 72 hours.
inline constexpr base::TimeDelta kMinOemModeTime = base::Hours(72);
// Windows Audit mode registry constants queried for OEM installs.
inline constexpr wchar_t kSetupStateKey[] =
L"Software\\Microsoft\\Windows\\CurrentVersion\\Setup\\State";
inline constexpr wchar_t kImageStateValueName[] = L"ImageState";
inline constexpr wchar_t kImageStateUnuseableValue[] =
L"IMAGE_STATE_UNDEPLOYABLE";
inline constexpr wchar_t kImageStateGeneralAuditValue[] =
L"IMAGE_STATE_GENERALIZE_RESEAL_TO_AUDIT";
inline constexpr wchar_t kImageStateSpecialAuditValue[] =
L"IMAGE_STATE_SPECIALIZE_RESEAL_TO_AUDIT";
// Cohort registry constants.
inline constexpr wchar_t kRegKeyCohort[] = L"cohort";
inline constexpr wchar_t kRegValueCohortName[] = L"name";
inline constexpr wchar_t kRegValueCohortHint[] = L"hint";
// Installer API registry names.
// Registry values read from the Clients key for transmitting custom install
// errors, messages, etc. On an update or install, the InstallerXXX values are
// renamed to LastInstallerXXX values. The LastInstallerXXX values remain around
// until the next update or install. Legacy MSI installers read values such as
// the `LastInstallerResultUIString` from the `ClientState` key in the registry
// and display the string.
inline constexpr wchar_t kRegValueInstallerError[] = L"InstallerError";
inline constexpr wchar_t kRegValueInstallerExtraCode1[] =
L"InstallerExtraCode1";
inline constexpr wchar_t kRegValueInstallerProgress[] = L"InstallerProgress";
inline constexpr wchar_t kRegValueInstallerResult[] = L"InstallerResult";
inline constexpr wchar_t kRegValueInstallerResultUIString[] =
L"InstallerResultUIString";
inline constexpr wchar_t kRegValueInstallerSuccessLaunchCmdLine[] =
L"InstallerSuccessLaunchCmdLine";
inline constexpr wchar_t kRegValueLastInstallerResult[] =
L"LastInstallerResult";
inline constexpr wchar_t kRegValueLastInstallerError[] = L"LastInstallerError";
inline constexpr wchar_t kRegValueLastInstallerExtraCode1[] =
L"LastInstallerExtraCode1";
inline constexpr wchar_t kRegValueLastInstallerResultUIString[] =
L"LastInstallerResultUIString";
inline constexpr wchar_t kRegValueLastInstallerSuccessLaunchCmdLine[] =
L"LastInstallerSuccessLaunchCmdLine";
inline constexpr const wchar_t* kRegValuesLastInstaller[5] = {
kRegValueLastInstallerResult, kRegValueLastInstallerError,
kRegValueLastInstallerExtraCode1, kRegValueLastInstallerResultUIString,
kRegValueLastInstallerSuccessLaunchCmdLine};
// AppCommand registry constants.
inline constexpr wchar_t kRegKeyCommands[] = L"Commands";
inline constexpr wchar_t kRegValueCommandLine[] = L"CommandLine";
inline constexpr wchar_t kRegValueAutoRunOnOSUpgrade[] = L"AutoRunOnOSUpgrade";
// Device management.
//
// Registry for enrollment token.
inline constexpr wchar_t kRegKeyCompanyCloudManagement[] =
COMPANY_POLICIES_KEY L"CloudManagement\\";
inline constexpr wchar_t kRegValueEnrollmentToken[] = L"EnrollmentToken";
// Legacy registry for enrollment token.
inline constexpr wchar_t kRegKeyCompanyLegacyCloudManagement[] =
COMPANY_POLICIES_KEY BROWSER_NAME_STRING L"\\";
inline constexpr wchar_t kRegValueCloudManagementEnrollmentToken[] =
L"CloudManagementEnrollmentToken";
// The name of the policy indicating that enrollment in cloud-based device
// management is mandatory.
inline constexpr wchar_t kRegValueEnrollmentMandatory[] =
L"EnrollmentMandatory";
// Registry for DM token.
inline constexpr wchar_t kRegKeyCompanyEnrollment[] =
COMPANY_KEY L"Enrollment\\";
inline constexpr wchar_t kRegKeyCompanyLegacyEnrollment[] =
COMPANY_KEY L"\\" BROWSER_NAME_STRING L"\\Enrollment\\"; // Path is in
// HKLM64.
inline constexpr wchar_t kRegValueDmToken[] = L"dmtoken";
inline constexpr wchar_t kWindowsServiceName[] = L"Service";
inline constexpr wchar_t kWindowsInternalServiceName[] = L"InternalService";
// Windows event name used to signal the legacy GoogleUpdate processes to exit.
inline constexpr wchar_t kShutdownEvent[] =
L"{A0C1F415-D2CE-4ddc-9B48-14E56FD55162}";
// EXE name for the legacy GoogleUpdate processes.
inline constexpr wchar_t kLegacyExeName[] =
COMPANY_SHORTNAME_STRING L"Update.exe";
// crbug.com/1259178: there is a race condition on activating the COM service
// and the service shutdown. The race condition is likely to occur when a new
// instance of an updater coclass is created right after the last reference to
// an object hosted by the COM service is released. Therefore, introducing a
// slight delay before creating coclasses reduces (but it does not eliminate)
// the probability of running into this race condition, until a better
// solution is found.
inline constexpr base::TimeDelta kCreateUpdaterInstanceDelay =
base::Milliseconds(200);
// `kLegacyServiceNamePrefix` is the common prefix for the legacy GoogleUpdate
// service names.
inline constexpr wchar_t kLegacyServiceNamePrefix[] =
L"" LEGACY_SERVICE_NAME_PREFIX;
// "Google Update Service" is the common prefix for the legacy GoogleUpdate
// service display names.
inline constexpr wchar_t kLegacyServiceDisplayNamePrefix[] =
COMPANY_SHORTNAME_STRING L" Update Service";
// "Google Update" is the prefix for the legacy GoogleUpdate "Run" key value
// under HKCU.
inline constexpr wchar_t kLegacyRunValuePrefix[] =
COMPANY_SHORTNAME_STRING L" Update";
// "GoogleUpdateTask{Machine/User}" is the common prefix for the legacy
// GoogleUpdate tasks for system and user respectively.
inline constexpr wchar_t kLegacyTaskNamePrefixSystem[] =
COMPANY_SHORTNAME_STRING L"UpdateTaskMachine";
inline constexpr wchar_t kLegacyTaskNamePrefixUser[] =
COMPANY_SHORTNAME_STRING L"UpdateTaskUser";
// `InstallerResult` values defined by the Installer API.
enum class InstallerApiResult {
// The installer succeeded, unconditionally.
// - if a launch command was provided via the installer API, the command will
// be launched and the updater UI will exit silently. Otherwise, the updater
// will show an install success dialog.
kSuccess = 0,
// All the error installer results below are treated the same.
// - if an installer error was not provided via the installer API or the exit
// code, generic error `kErrorApplicationInstallerFailed` will be reported.
// - the installer extra code is used if reported via the installer API.
// - the text description of the error is used if reported via the installer
// API.
// If an installer result is not explicitly reported by the installer, the
// installer API values are internally set based on whether the exit code from
// the installer process is a success or an error:
// - If the exit code is a success, the installer result is set to success. If
// a launch command was provided via the installer API, the command will be
// launched and the updater UI will exit silently. Otherwise, the updater
// will show an install success dialog.
// - If the exit code is a failure, the installer result is set to
// `kExitCode`, the installer error is set to
// `kErrorApplicationInstallerFailed`, and the installer extra code is set
// to the exit code.
// - If a text description is reported via the installer API, it will be used.
kCustomError = 1,
kMsiError = 2,
kSystemError = 3,
kExitCode = 4,
};
} // namespace updater
#endif // CHROME_UPDATER_WIN_WIN_CONSTANTS_H_