Commit 6e5ea859 authored by S. Ganesh's avatar S. Ganesh Committed by Commit Bot

COM registration for the IElevator interface.

IElevator is registered with unique IIDs for the various flavors of Chrome and Chromium. This allows the different flavors of Chrome/Chromium to co-exist without side effects.

Bug: 833687
Change-Id: Icbba17012165cc9e3c04a47590a78b54bec761e7
Reviewed-on: https://chromium-review.googlesource.com/c/1327352
Commit-Queue: S. Ganesh <ganesh@chromium.org>
Reviewed-by: default avatarSorin Jianu <sorin@chromium.org>
Reviewed-by: default avatarScott Graham <scottmg@chromium.org>
Reviewed-by: default avatarGreg Thompson <grt@chromium.org>
Reviewed-by: default avatarWill Harris <wfh@chromium.org>
Cr-Commit-Position: refs/heads/master@{#607360}
parent 7419fdde
...@@ -34,4 +34,7 @@ END ...@@ -34,4 +34,7 @@ END
#endif // APSTUDIO_INVOKED #endif // APSTUDIO_INVOKED
#endif // English (United States) resources #endif // English (United States) resources
/////////////////////////////////////////////////////////////////////////////
\ No newline at end of file 1 TYPELIB "chrome/elevation_service/elevation_service_idl.tlb"
/////////////////////////////////////////////////////////////////////////////
...@@ -34,6 +34,65 @@ interface IElevator : IUnknown ...@@ -34,6 +34,65 @@ interface IElevator : IUnknown
[out] ULONG_PTR* proc_handle); [out] ULONG_PTR* proc_handle);
}; };
// The interfaces below are all IElevator with unique IIDs. IElevator is
// registered with unique IIDs for the various flavors of Chrome and Chromium.
// This allows the different flavors of Chrome/Chromium to co-exist without side
// effects.
[
object,
oleautomation,
uuid(B88C45B9-8825-4629-B83E-77CC67D9CEED),
helpstring("IElevatorChromium Interface"),
pointer_default(unique)
]
interface IElevatorChromium : IElevator
{
};
[
object,
oleautomation,
uuid(463ABECF-410D-407F-8AF5-0DF35A005CC8),
helpstring("IElevatorChrome Interface"),
pointer_default(unique)
]
interface IElevatorChrome : IElevator
{
};
[
object,
oleautomation,
uuid(A2721D66-376E-4D2F-9F0F-9070E9A42B5F),
helpstring("IElevatorChromeBeta Interface"),
pointer_default(unique)
]
interface IElevatorChromeBeta : IElevator
{
};
[
object,
oleautomation,
uuid(BB2AA26B-343A-4072-8B6F-80557B8CE571),
helpstring("IElevatorChromeDev Interface"),
pointer_default(unique)
]
interface IElevatorChromeDev : IElevator
{
};
[
object,
oleautomation,
uuid(4F7CE041-28E9-484F-9DD0-61A8CACEFEE4),
helpstring("IElevatorChromeCanary Interface"),
pointer_default(unique)
]
interface IElevatorChromeCanary : IElevator
{
};
[ [
uuid(0014D784-7012-4A79-8AB6-ADDB8193A06E), uuid(0014D784-7012-4A79-8AB6-ADDB8193A06E),
version(1.0), version(1.0),
...@@ -43,4 +102,9 @@ library ElevatorLib { ...@@ -43,4 +102,9 @@ library ElevatorLib {
importlib("stdole2.tlb"); importlib("stdole2.tlb");
interface IElevator; interface IElevator;
interface IElevatorChromium;
interface IElevatorChrome;
interface IElevatorChromeBeta;
interface IElevatorChromeDev;
interface IElevatorChromeCanary;
}; };
...@@ -19,7 +19,12 @@ namespace elevation_service { ...@@ -19,7 +19,12 @@ namespace elevation_service {
class Elevator class Elevator
: public Microsoft::WRL::RuntimeClass< : public Microsoft::WRL::RuntimeClass<
Microsoft::WRL::RuntimeClassFlags<Microsoft::WRL::ClassicCom>, Microsoft::WRL::RuntimeClassFlags<Microsoft::WRL::ClassicCom>,
IElevator> { IElevator,
IElevatorChromium,
IElevatorChrome,
IElevatorChromeBeta,
IElevatorChromeDev,
IElevatorChromeCanary> {
public: public:
Elevator() = default; Elevator() = default;
......
...@@ -58,15 +58,12 @@ int ServiceMain::Start() { ...@@ -58,15 +58,12 @@ int ServiceMain::Start() {
} }
// When _ServiceMain gets called, it initializes COM, and then calls Run(). // When _ServiceMain gets called, it initializes COM, and then calls Run().
// Run initializes security, then registers the COM objects. // Run() initializes security, then calls RegisterClassObject().
HRESULT ServiceMain::RegisterClassObjects() { HRESULT ServiceMain::RegisterClassObject() {
// Create an out-of-proc COM module with caching disabled. // Create an out-of-proc COM module with caching disabled.
auto& module = Microsoft::WRL::Module<Microsoft::WRL::OutOfProc>::Create( auto& module = Microsoft::WRL::Module<Microsoft::WRL::OutOfProc>::Create(
this, &ServiceMain::SignalExit); this, &ServiceMain::SignalExit);
// Register the Elevator class factories.
RegisterElevatorFactories();
// We hand-register a unique CLSID for each Chrome channel. // We hand-register a unique CLSID for each Chrome channel.
Microsoft::WRL::ComPtr<IUnknown> factory; Microsoft::WRL::ComPtr<IUnknown> factory;
unsigned int flags = Microsoft::WRL::ModuleType::OutOfProc; unsigned int flags = Microsoft::WRL::ModuleType::OutOfProc;
...@@ -107,15 +104,12 @@ HRESULT ServiceMain::RegisterClassObjects() { ...@@ -107,15 +104,12 @@ HRESULT ServiceMain::RegisterClassObjects() {
return hr; return hr;
} }
void ServiceMain::UnregisterClassObjects() { void ServiceMain::UnregisterClassObject() {
auto& module = Microsoft::WRL::Module<Microsoft::WRL::OutOfProc>::GetModule(); auto& module = Microsoft::WRL::Module<Microsoft::WRL::OutOfProc>::GetModule();
const HRESULT hr = const HRESULT hr =
module.UnregisterCOMObject(nullptr, cookies_, base::size(cookies_)); module.UnregisterCOMObject(nullptr, cookies_, base::size(cookies_));
if (FAILED(hr)) if (FAILED(hr))
LOG(ERROR) << "UnregisterCOMObject failed; hr: " << hr; LOG(ERROR) << "UnregisterCOMObject failed; hr: " << hr;
// Unregister the Elevator class factories.
UnregisterElevatorFactories();
} }
bool ServiceMain::IsExitSignaled() { bool ServiceMain::IsExitSignaled() {
...@@ -216,10 +210,10 @@ HRESULT ServiceMain::Run() { ...@@ -216,10 +210,10 @@ HRESULT ServiceMain::Run() {
if (FAILED(hr)) if (FAILED(hr))
return hr; return hr;
hr = RegisterClassObjects(); hr = RegisterClassObject();
if (SUCCEEDED(hr)) { if (SUCCEEDED(hr)) {
WaitForExitSignal(); WaitForExitSignal();
UnregisterClassObjects(); UnregisterClassObject();
} }
return hr; return hr;
...@@ -254,27 +248,4 @@ void ServiceMain::SignalExit() { ...@@ -254,27 +248,4 @@ void ServiceMain::SignalExit() {
exit_signal_.Signal(); exit_signal_.Signal();
} }
void ServiceMain::RegisterElevatorFactories() {
// Elevators will register their class factories here by calling
// RegisterElevatorFactory().
}
void ServiceMain::UnregisterElevatorFactories() {
factories_.clear();
}
void ServiceMain::RegisterElevatorFactory(const base::string16& id,
IClassFactory* factory) {
DCHECK(factory);
DCHECK(!base::ContainsKey(factories_, id));
factories_.emplace(id, factory);
}
Microsoft::WRL::ComPtr<IClassFactory> ServiceMain::GetElevatorFactory(
const base::string16& id) {
auto it = factories_.find(id);
return it != factories_.end() ? it->second : nullptr;
}
} // namespace elevation_service } // namespace elevation_service
...@@ -32,21 +32,17 @@ class ServiceMain { ...@@ -32,21 +32,17 @@ class ServiceMain {
// The following methods are public for the sake of testing. // The following methods are public for the sake of testing.
// Registers the Service COM objects so other applications can connect to // Registers the Service COM class factory object so other applications can
// them. Returns the registration status. // connect to it. Returns the registration status.
HRESULT RegisterClassObjects(); HRESULT RegisterClassObject();
// Unregisters the Service COM objects. // Unregisters the Service COM class factory object.
void UnregisterClassObjects(); void UnregisterClassObject();
// Returns true when the last object is released, or if the service is asked // Returns true when the last COM object is released, or if the service is
// to exit. // asked to exit.
bool IsExitSignaled(); bool IsExitSignaled();
// Returns the class factory for the elevator with the specified id.
Microsoft::WRL::ComPtr<IClassFactory> GetElevatorFactory(
const base::string16& id);
private: private:
ServiceMain(); ServiceMain();
~ServiceMain(); ~ServiceMain();
...@@ -86,10 +82,6 @@ class ServiceMain { ...@@ -86,10 +82,6 @@ class ServiceMain {
// Called when the last object is released or if the service is asked to exit. // Called when the last object is released or if the service is asked to exit.
void SignalExit(); void SignalExit();
// Registers class factories for all supported elevators.
void RegisterElevatorFactories();
void UnregisterElevatorFactories();
// Registers |factory| as the factory for the elevator identified by |id|. // Registers |factory| as the factory for the elevator identified by |id|.
void RegisterElevatorFactory(const base::string16& id, void RegisterElevatorFactory(const base::string16& id,
IClassFactory* factory); IClassFactory* factory);
...@@ -107,11 +99,6 @@ class ServiceMain { ...@@ -107,11 +99,6 @@ class ServiceMain {
// service control manager asks the service to exit. // service control manager asks the service to exit.
base::WaitableEvent exit_signal_; base::WaitableEvent exit_signal_;
using FactoryMap = base::flat_map<base::string16,
Microsoft::WRL::ComPtr<IClassFactory>>;
// The map containing all the Elevator class factories.
FactoryMap factories_;
friend class base::NoDestructor<ServiceMain>; friend class base::NoDestructor<ServiceMain>;
DISALLOW_COPY_AND_ASSIGN(ServiceMain); DISALLOW_COPY_AND_ASSIGN(ServiceMain);
......
...@@ -6,12 +6,25 @@ ...@@ -6,12 +6,25 @@
#include <wrl/client.h> #include <wrl/client.h>
#include <memory> #include <memory>
#include <string>
#include "base/files/file_path.h"
#include "base/path_service.h"
#include "base/win/scoped_com_initializer.h" #include "base/win/scoped_com_initializer.h"
#include "chrome/elevation_service/elevation_service_idl.h" #include "chrome/elevation_service/elevation_service_idl.h"
#include "chrome/install_static/install_util.h" #include "chrome/install_static/install_util.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
namespace {
const base::FilePath TestFile(const std::string& file) {
base::FilePath path;
base::PathService::Get(base::DIR_MODULE, &path);
return path.AppendASCII("elevated_recovery_unittest").AppendASCII(file);
}
} // namespace
class ServiceMainTest : public testing::Test { class ServiceMainTest : public testing::Test {
protected: protected:
ServiceMainTest() = default; ServiceMainTest() = default;
...@@ -21,7 +34,7 @@ class ServiceMainTest : public testing::Test { ...@@ -21,7 +34,7 @@ class ServiceMainTest : public testing::Test {
ASSERT_TRUE(com_initializer_->Succeeded()); ASSERT_TRUE(com_initializer_->Succeeded());
service_main_ = elevation_service::ServiceMain::GetInstance(); service_main_ = elevation_service::ServiceMain::GetInstance();
HRESULT hr = service_main_->RegisterClassObjects(); HRESULT hr = service_main_->RegisterClassObject();
if (SUCCEEDED(hr)) if (SUCCEEDED(hr))
class_registration_succeeded_ = true; class_registration_succeeded_ = true;
...@@ -30,7 +43,7 @@ class ServiceMainTest : public testing::Test { ...@@ -30,7 +43,7 @@ class ServiceMainTest : public testing::Test {
void TearDown() override { void TearDown() override {
if (class_registration_succeeded_) if (class_registration_succeeded_)
service_main_->UnregisterClassObjects(); service_main_->UnregisterClassObject();
com_initializer_.reset(); com_initializer_.reset();
} }
...@@ -49,10 +62,21 @@ TEST_F(ServiceMainTest, ExitSignalTest) { ...@@ -49,10 +62,21 @@ TEST_F(ServiceMainTest, ExitSignalTest) {
// The waitable event starts unsignaled. // The waitable event starts unsignaled.
ASSERT_FALSE(service_main()->IsExitSignaled()); ASSERT_FALSE(service_main()->IsExitSignaled());
Microsoft::WRL::ComPtr<IUnknown> elevator; Microsoft::WRL::ComPtr<IUnknown> unknown;
ASSERT_HRESULT_SUCCEEDED( ASSERT_HRESULT_SUCCEEDED(
::CoCreateInstance(install_static::GetElevatorClsid(), nullptr, ::CoCreateInstance(install_static::GetElevatorClsid(), nullptr,
CLSCTX_LOCAL_SERVER, IID_PPV_ARGS(&elevator))); CLSCTX_LOCAL_SERVER, IID_PPV_ARGS(&unknown)));
Microsoft::WRL::ComPtr<IElevator> elevator;
ASSERT_HRESULT_SUCCEEDED(unknown.As(&elevator));
unknown.Reset();
ULONG_PTR proc_handle = 0;
EXPECT_EQ(CRYPT_E_NO_MATCH,
elevator->RunRecoveryCRXElevated(
TestFile("ChromeRecovery.crx3").value().c_str(),
L"{c49ab053-2387-4809-b188-1902648802e1}", L"57.8.0.1",
L"{c49ab053-2387-4809-b188-1902648802e1}", 0, &proc_handle));
// An object instance has been created upon the request, and is held by the // An object instance has been created upon the request, and is held by the
// server module. Therefore, the waitable event remains unsignaled. // server module. Therefore, the waitable event remains unsignaled.
......
...@@ -4,6 +4,8 @@ ...@@ -4,6 +4,8 @@
// Brand-specific constants and install modes for Chromium. // Brand-specific constants and install modes for Chromium.
#include "chrome/install_static/chromium_install_modes.h"
#include <stdlib.h> #include <stdlib.h>
#include "chrome/app/chrome_dll_resource.h" #include "chrome/app/chrome_dll_resource.h"
...@@ -49,7 +51,14 @@ const InstallConstants kInstallModes[] = { ...@@ -49,7 +51,14 @@ const InstallConstants kInstallModes[] = {
0x6DB4, 0x6DB4,
0x4D6B, 0x4D6B,
{0x8B, 0xFE, 0x83, 0xBF, 0x8C, 0xA1, 0xB1, 0xB0}}, // Elevator CLSID. {0x8B, 0xFE, 0x83, 0xBF, 0x8C, 0xA1, 0xB1, 0xB0}}, // Elevator CLSID.
L"", // Empty default channel name since no update integration.
{0xb88c45b9,
0x8825,
0x4629,
{0xb8, 0x3e, 0x77, 0xcc, 0x67, 0xd9, 0xce,
0xed}}, // IElevator IID and TypeLib
// {B88C45B9-8825-4629-B83E-77CC67D9CEED}.
L"", // Empty default channel name since no update integration.
ChannelStrategy::UNSUPPORTED, ChannelStrategy::UNSUPPORTED,
true, // Supports system-level installs. true, // Supports system-level installs.
true, // Supports in-product set as default browser UX. true, // Supports in-product set as default browser UX.
......
...@@ -4,6 +4,8 @@ ...@@ -4,6 +4,8 @@
// Brand-specific constants and install modes for Google Chrome. // Brand-specific constants and install modes for Google Chrome.
#include "chrome/install_static/google_chrome_install_modes.h"
#include <stdlib.h> #include <stdlib.h>
#include "chrome/app/chrome_dll_resource.h" #include "chrome/app/chrome_dll_resource.h"
...@@ -49,7 +51,14 @@ const InstallConstants kInstallModes[] = { ...@@ -49,7 +51,14 @@ const InstallConstants kInstallModes[] = {
0xF641, 0xF641,
0x4611, 0x4611,
{0x88, 0x95, 0x7D, 0x86, 0x7D, 0xD3, 0x67, 0x5B}}, // Elevator CLSID. {0x88, 0x95, 0x7D, 0x86, 0x7D, 0xD3, 0x67, 0x5B}}, // Elevator CLSID.
L"", // The empty string means "stable".
{0x463abecf,
0x410d,
0x407f,
{0x8a, 0xf5, 0xd, 0xf3, 0x5a, 0x0, 0x5c,
0xc8}}, // IElevator IID and TypeLib
// {463ABECF-410D-407F-8AF5-0DF35A005CC8}.
L"", // The empty string means "stable".
ChannelStrategy::ADDITIONAL_PARAMETERS, ChannelStrategy::ADDITIONAL_PARAMETERS,
true, // Supports system-level installs. true, // Supports system-level installs.
true, // Supports in-product set as default browser UX. true, // Supports in-product set as default browser UX.
...@@ -83,7 +92,14 @@ const InstallConstants kInstallModes[] = { ...@@ -83,7 +92,14 @@ const InstallConstants kInstallModes[] = {
0x3707, 0x3707,
0x4BF8, 0x4BF8,
{0xB9, 0xA7, 0x3, 0x86, 0x91, 0xA6, 0x8F, 0xC2}}, // Elevator CLSID. {0xB9, 0xA7, 0x3, 0x86, 0x91, 0xA6, 0x8F, 0xC2}}, // Elevator CLSID.
L"beta", // Forced channel name.
{0xa2721d66,
0x376e,
0x4d2f,
{0x9f, 0xf, 0x90, 0x70, 0xe9, 0xa4, 0x2b,
0x5f}}, // IElevator IID and TypeLib
// {A2721D66-376E-4D2F-9F0F-9070E9A42B5F}.
L"beta", // Forced channel name.
ChannelStrategy::FIXED, ChannelStrategy::FIXED,
true, // Supports system-level installs. true, // Supports system-level installs.
true, // Supports in-product set as default browser UX. true, // Supports in-product set as default browser UX.
...@@ -117,7 +133,14 @@ const InstallConstants kInstallModes[] = { ...@@ -117,7 +133,14 @@ const InstallConstants kInstallModes[] = {
0x2CAA, 0x2CAA,
0x4637, 0x4637,
{0xAA, 0x17, 0x7, 0x40, 0x58, 0x4D, 0xE7, 0xDA}}, // Elevator CLSID. {0xAA, 0x17, 0x7, 0x40, 0x58, 0x4D, 0xE7, 0xDA}}, // Elevator CLSID.
L"dev", // Forced channel name.
{0xbb2aa26b,
0x343a,
0x4072,
{0x8b, 0x6f, 0x80, 0x55, 0x7b, 0x8c, 0xe5,
0x71}}, // IElevator IID and TypeLib
// {BB2AA26B-343A-4072-8B6F-80557B8CE571}.
L"dev", // Forced channel name.
ChannelStrategy::FIXED, ChannelStrategy::FIXED,
true, // Supports system-level installs. true, // Supports system-level installs.
true, // Supports in-product set as default browser UX. true, // Supports in-product set as default browser UX.
...@@ -151,6 +174,13 @@ const InstallConstants kInstallModes[] = { ...@@ -151,6 +174,13 @@ const InstallConstants kInstallModes[] = {
0x2049, 0x2049,
0x435E, 0x435E,
{0xA4, 0x69, 0xA, 0x53, 0x43, 0x13, 0xC4, 0x2B}}, // Elevator CLSID. {0xA4, 0x69, 0xA, 0x53, 0x43, 0x13, 0xC4, 0x2B}}, // Elevator CLSID.
{0x4f7ce041,
0x28e9,
0x484f,
{0x9d, 0xd0, 0x61, 0xa8, 0xca, 0xce, 0xfe,
0xe4}}, // IElevator IID and TypeLib
// {4F7CE041-28E9-484F-9DD0-61A8CACEFEE4}.
L"canary", // Forced channel name. L"canary", // Forced channel name.
ChannelStrategy::FIXED, ChannelStrategy::FIXED,
false, // Does not support system-level installs. false, // Does not support system-level installs.
......
...@@ -104,6 +104,10 @@ struct InstallConstants { ...@@ -104,6 +104,10 @@ struct InstallConstants {
// The CLSID of the COM server that provides silent elevation functionality. // The CLSID of the COM server that provides silent elevation functionality.
CLSID elevator_clsid; CLSID elevator_clsid;
// The IID and the TypeLib of the IElevator interface that provides silent
// elevation functionality.
IID elevator_iid;
// The default name for this mode's update channel. // The default name for this mode's update channel.
const wchar_t* default_channel_name; const wchar_t* default_channel_name;
......
...@@ -114,6 +114,10 @@ class InstallDetails { ...@@ -114,6 +114,10 @@ class InstallDetails {
// The CLSID of the COM server that provides silent elevation functionality. // The CLSID of the COM server that provides silent elevation functionality.
const CLSID& elevator_clsid() const { return payload_->mode->elevator_clsid; } const CLSID& elevator_clsid() const { return payload_->mode->elevator_clsid; }
// The IID and the TypeLib of the IElevator interface that provides silent
// elevation functionality.
const IID& elevator_iid() const { return payload_->mode->elevator_iid; }
// Returns the unsuffixed portion of the AppUserModelId. The AppUserModelId is // Returns the unsuffixed portion of the AppUserModelId. The AppUserModelId is
// used to group an app's windows together on the Windows taskbar along with // used to group an app's windows together on the Windows taskbar along with
// its corresponding shortcuts; see // its corresponding shortcuts; see
......
...@@ -97,6 +97,9 @@ TEST(InstallModes, VerifyModes) { ...@@ -97,6 +97,9 @@ TEST(InstallModes, VerifyModes) {
// Every mode must have an elevator CLSID. // Every mode must have an elevator CLSID.
ASSERT_THAT(mode.elevator_clsid, Ne(CLSID_NULL)); ASSERT_THAT(mode.elevator_clsid, Ne(CLSID_NULL));
// Every mode must have an elevator IID.
ASSERT_THAT(mode.elevator_iid, Ne(CLSID_NULL));
// UNSUPPORTED and kUseGoogleUpdateIntegration are mutually exclusive. // UNSUPPORTED and kUseGoogleUpdateIntegration are mutually exclusive.
if (kUseGoogleUpdateIntegration) if (kUseGoogleUpdateIntegration)
ASSERT_THAT(mode.channel_strategy, Ne(ChannelStrategy::UNSUPPORTED)); ASSERT_THAT(mode.channel_strategy, Ne(ChannelStrategy::UNSUPPORTED));
......
...@@ -405,6 +405,10 @@ const CLSID& GetElevatorClsid() { ...@@ -405,6 +405,10 @@ const CLSID& GetElevatorClsid() {
return InstallDetails::Get().elevator_clsid(); return InstallDetails::Get().elevator_clsid();
} }
const CLSID& GetElevatorIid() {
return InstallDetails::Get().elevator_iid();
}
std::wstring GetElevationServiceName() { std::wstring GetElevationServiceName() {
std::wstring name = GetElevationServiceDisplayName(); std::wstring name = GetElevationServiceDisplayName();
name.erase(std::remove_if(name.begin(), name.end(), isspace), name.end()); name.erase(std::remove_if(name.begin(), name.end(), isspace), name.end());
......
...@@ -109,8 +109,10 @@ const wchar_t* GetAppGuid(); ...@@ -109,8 +109,10 @@ const wchar_t* GetAppGuid();
// the Windows OS. // the Windows OS.
const CLSID& GetToastActivatorClsid(); const CLSID& GetToastActivatorClsid();
// Return the Elevation Service CLSID, Name, and Display Name respectively. // Returns the Elevation Service CLSID, IID, Name, and Display Name
// respectively.
const CLSID& GetElevatorClsid(); const CLSID& GetElevatorClsid();
const IID& GetElevatorIid();
std::wstring GetElevationServiceName(); std::wstring GetElevationServiceName();
std::wstring GetElevationServiceDisplayName(); std::wstring GetElevationServiceDisplayName();
......
...@@ -581,6 +581,73 @@ TEST_P(InstallStaticUtilTest, GetElevatorClsid) { ...@@ -581,6 +581,73 @@ TEST_P(InstallStaticUtilTest, GetElevatorClsid) {
StrCaseEq(kElevatorClsidsString[std::get<0>(GetParam())])); StrCaseEq(kElevatorClsidsString[std::get<0>(GetParam())]));
} }
TEST_P(InstallStaticUtilTest, GetElevatorIid) {
#if defined(GOOGLE_CHROME_BUILD)
// The Elevator IIDs, one for each of the kInstallModes.
static constexpr IID kElevatorIids[] = {
{0x463abecf,
0x410d,
0x407f,
{0x8a, 0xf5, 0xd, 0xf3, 0x5a, 0x0, 0x5c,
0xc8}}, // IElevator IID and TypeLib
// {463ABECF-410D-407F-8AF5-0DF35A005CC8} for Google Chrome.
{0xa2721d66,
0x376e,
0x4d2f,
{0x9f, 0xf, 0x90, 0x70, 0xe9, 0xa4, 0x2b,
0x5f}}, // IElevator IID and TypeLib
// {A2721D66-376E-4D2F-9F0F-9070E9A42B5F} for Google Chrome
// Beta.
{0xbb2aa26b,
0x343a,
0x4072,
{0x8b, 0x6f, 0x80, 0x55, 0x7b, 0x8c, 0xe5,
0x71}}, // IElevator IID and TypeLib
// {BB2AA26B-343A-4072-8B6F-80557B8CE571} for Google Chrome
// Dev.
{0x4f7ce041,
0x28e9,
0x484f,
{0x9d, 0xd0, 0x61, 0xa8, 0xca, 0xce, 0xfe,
0xe4}}, // IElevator IID and TypeLib
// {4F7CE041-28E9-484F-9DD0-61A8CACEFEE4} for Google Chrome
// Canary.
};
// The string representation of the IIDs above.
static constexpr const wchar_t* kElevatorIidsString[] = {
L"{463ABECF-410D-407F-8AF5-0DF35A005CC8}", // Google Chrome.
L"{A2721D66-376E-4D2F-9F0F-9070E9A42B5F}", // Google Chrome Beta.
L"{BB2AA26B-343A-4072-8B6F-80557B8CE571}", // Google Chrome Dev.
L"{4F7CE041-28E9-484F-9DD0-61A8CACEFEE4}", // Google Chrome Canary.
};
#else
// The Elevator IIDs, one for each of the kInstallModes.
static constexpr IID kElevatorIids[] = {
{0xb88c45b9,
0x8825,
0x4629,
{0xb8, 0x3e, 0x77, 0xcc, 0x67, 0xd9, 0xce,
0xed}}, // IElevator IID and TypeLib
// {B88C45B9-8825-4629-B83E-77CC67D9CEED} for Chromium.
};
// The string representation of the IIDs above.
static constexpr const wchar_t* kElevatorIidsString[] = {
L"{B88C45B9-8825-4629-B83E-77CC67D9CEED}", // Chromium.
};
#endif
static_assert(base::size(kElevatorIids) == NUM_INSTALL_MODES,
"kElevatorIids needs to be updated for any new modes.");
EXPECT_EQ(GetElevatorIid(), kElevatorIids[std::get<0>(GetParam())]);
constexpr int kIIDSize = 39;
wchar_t iid_str[kIIDSize] = {};
ASSERT_EQ(::StringFromGUID2(GetElevatorIid(), iid_str, kIIDSize), kIIDSize);
EXPECT_THAT(iid_str, StrCaseEq(kElevatorIidsString[std::get<0>(GetParam())]));
}
TEST_P(InstallStaticUtilTest, UsageStatsAbsent) { TEST_P(InstallStaticUtilTest, UsageStatsAbsent) {
EXPECT_FALSE(GetCollectStatsConsent()); EXPECT_FALSE(GetCollectStatsConsent());
} }
......
...@@ -444,10 +444,14 @@ void AddElevationServiceWorkItems(const base::FilePath& elevation_service_path, ...@@ -444,10 +444,14 @@ void AddElevationServiceWorkItems(const base::FilePath& elevation_service_path,
const base::string16 clsid_reg_path = GetElevationServiceClsidRegistryPath(); const base::string16 clsid_reg_path = GetElevationServiceClsidRegistryPath();
const base::string16 appid_reg_path = GetElevationServiceAppidRegistryPath(); const base::string16 appid_reg_path = GetElevationServiceAppidRegistryPath();
const base::string16 iid_reg_path = GetElevationServiceIidRegistryPath();
const base::string16 typelib_reg_path =
GetElevationServiceTypeLibRegistryPath();
// Delete any old registrations first, taking into account 32-bit -> 64-bit or // Delete any old registrations first, taking into account 32-bit -> 64-bit or
// 64-bit -> 32-bit migration. // 64-bit -> 32-bit migration.
for (const auto& reg_path : {clsid_reg_path, appid_reg_path}) { for (const auto& reg_path :
{clsid_reg_path, appid_reg_path, iid_reg_path, typelib_reg_path}) {
for (const auto& key_flag : {KEY_WOW64_32KEY, KEY_WOW64_64KEY}) for (const auto& key_flag : {KEY_WOW64_32KEY, KEY_WOW64_64KEY})
list->AddDeleteRegKeyWorkItem(root, reg_path, key_flag); list->AddDeleteRegKeyWorkItem(root, reg_path, key_flag);
} }
...@@ -464,6 +468,39 @@ void AddElevationServiceWorkItems(const base::FilePath& elevation_service_path, ...@@ -464,6 +468,39 @@ void AddElevationServiceWorkItems(const base::FilePath& elevation_service_path,
list->AddSetRegValueWorkItem(root, appid_reg_path, WorkItem::kWow64Default, list->AddSetRegValueWorkItem(root, appid_reg_path, WorkItem::kWow64Default,
L"LocalService", L"LocalService",
install_static::GetElevationServiceName(), true); install_static::GetElevationServiceName(), true);
// Registering the Ole Automation marshaler with the CLSID
// {00020424-0000-0000-C000-000000000046} as the proxy/stub for the IElevator
// interface.
list->AddCreateRegKeyWorkItem(root, iid_reg_path, WorkItem::kWow64Default);
list->AddCreateRegKeyWorkItem(root, iid_reg_path + L"\\ProxyStubClsid32",
WorkItem::kWow64Default);
list->AddSetRegValueWorkItem(root, iid_reg_path + L"\\ProxyStubClsid32",
WorkItem::kWow64Default, L"",
L"{00020424-0000-0000-C000-000000000046}", true);
list->AddCreateRegKeyWorkItem(root, iid_reg_path + L"\\TypeLib",
WorkItem::kWow64Default);
list->AddSetRegValueWorkItem(root, iid_reg_path + L"\\TypeLib",
WorkItem::kWow64Default, L"",
GetElevationServiceIid(L""), true);
// The TypeLib registration for the Ole Automation marshaler.
list->AddCreateRegKeyWorkItem(root, typelib_reg_path,
WorkItem::kWow64Default);
list->AddCreateRegKeyWorkItem(root, typelib_reg_path + L"\\1.0",
WorkItem::kWow64Default);
list->AddCreateRegKeyWorkItem(root, typelib_reg_path + L"\\1.0\\0",
WorkItem::kWow64Default);
list->AddCreateRegKeyWorkItem(root, typelib_reg_path + L"\\1.0\\0\\win32",
WorkItem::kWow64Default);
list->AddSetRegValueWorkItem(root, typelib_reg_path + L"\\1.0\\0\\win32",
WorkItem::kWow64Default, L"",
elevation_service_path.value(), true);
list->AddCreateRegKeyWorkItem(root, typelib_reg_path + L"\\1.0\\0\\win64",
WorkItem::kWow64Default);
list->AddSetRegValueWorkItem(root, typelib_reg_path + L"\\1.0\\0\\win64",
WorkItem::kWow64Default, L"",
elevation_service_path.value(), true);
} }
} // namespace } // namespace
......
...@@ -879,4 +879,19 @@ base::string16 GetElevationServiceAppidRegistryPath() { ...@@ -879,4 +879,19 @@ base::string16 GetElevationServiceAppidRegistryPath() {
return GetElevationServiceGuid(L"Software\\Classes\\AppID\\"); return GetElevationServiceGuid(L"Software\\Classes\\AppID\\");
} }
base::string16 GetElevationServiceIid(base::StringPiece16 prefix) {
base::string16 result =
InstallUtil::String16FromGUID(install_static::GetElevatorIid());
result.insert(0, prefix.data(), prefix.size());
return result;
}
base::string16 GetElevationServiceIidRegistryPath() {
return GetElevationServiceIid(L"Software\\Classes\\Interface\\");
}
base::string16 GetElevationServiceTypeLibRegistryPath() {
return GetElevationServiceIid(L"Software\\Classes\\TypeLib\\");
}
} // namespace installer } // namespace installer
...@@ -168,6 +168,9 @@ base::string16 GetElevationServiceGuid(base::StringPiece16 prefix); ...@@ -168,6 +168,9 @@ base::string16 GetElevationServiceGuid(base::StringPiece16 prefix);
// Return the elevation service registry paths. // Return the elevation service registry paths.
base::string16 GetElevationServiceClsidRegistryPath(); base::string16 GetElevationServiceClsidRegistryPath();
base::string16 GetElevationServiceAppidRegistryPath(); base::string16 GetElevationServiceAppidRegistryPath();
base::string16 GetElevationServiceIid(base::StringPiece16 prefix);
base::string16 GetElevationServiceIidRegistryPath();
base::string16 GetElevationServiceTypeLibRegistryPath();
} // namespace installer } // namespace installer
......
...@@ -640,8 +640,13 @@ bool DeleteChromeRegistrationKeys(const InstallerState& installer_state, ...@@ -640,8 +640,13 @@ bool DeleteChromeRegistrationKeys(const InstallerState& installer_state,
GetElevationServiceClsidRegistryPath(); GetElevationServiceClsidRegistryPath();
const base::string16 appid_reg_path = const base::string16 appid_reg_path =
GetElevationServiceAppidRegistryPath(); GetElevationServiceAppidRegistryPath();
for (const auto& reg_path : {clsid_reg_path, appid_reg_path}) const base::string16 iid_reg_path = GetElevationServiceIidRegistryPath();
const base::string16 typelib_reg_path =
GetElevationServiceTypeLibRegistryPath();
for (const auto& reg_path :
{clsid_reg_path, appid_reg_path, iid_reg_path, typelib_reg_path}) {
InstallUtil::DeleteRegistryKey(root, reg_path, WorkItem::kWow64Default); InstallUtil::DeleteRegistryKey(root, reg_path, WorkItem::kWow64Default);
}
LOG_IF(WARNING, !InstallServiceWorkItem::DeleteService( LOG_IF(WARNING, !InstallServiceWorkItem::DeleteService(
install_static::GetElevationServiceName())); install_static::GetElevationServiceName()));
......
...@@ -56,6 +56,12 @@ ...@@ -56,6 +56,12 @@
"HKEY_CURRENT_USER\\Software\\Classes\\AppID\\$CHROME_ELEVATOR_CLSID_BETA": { "HKEY_CURRENT_USER\\Software\\Classes\\AppID\\$CHROME_ELEVATOR_CLSID_BETA": {
"exists": "forbidden" "exists": "forbidden"
}, },
"HKEY_CURRENT_USER\\Software\\Classes\\Interface\\$CHROME_ELEVATOR_IID_BETA": {
"exists": "forbidden"
},
"HKEY_CURRENT_USER\\Software\\Classes\\TypeLib\\$CHROME_ELEVATOR_IID_BETA": {
"exists": "forbidden"
},
"HKEY_CURRENT_USER\\Software\\Classes\\$CHROME_SHORT_NAME_BETA$USER_SPECIFIC_REGISTRY_SUFFIX": { "HKEY_CURRENT_USER\\Software\\Classes\\$CHROME_SHORT_NAME_BETA$USER_SPECIFIC_REGISTRY_SUFFIX": {
"exists": "forbidden" "exists": "forbidden"
} }
......
...@@ -37,6 +37,12 @@ ...@@ -37,6 +37,12 @@
}, },
"HKEY_CURRENT_USER\\Software\\Classes\\AppID\\$CHROME_ELEVATOR_CLSID_BETA": { "HKEY_CURRENT_USER\\Software\\Classes\\AppID\\$CHROME_ELEVATOR_CLSID_BETA": {
"exists": "forbidden" "exists": "forbidden"
},
"HKEY_CURRENT_USER\\Software\\Classes\\Interface\\$CHROME_ELEVATOR_IID_BETA": {
"exists": "forbidden"
},
"HKEY_CURRENT_USER\\Software\\Classes\\TypeLib\\$CHROME_ELEVATOR_IID_BETA": {
"exists": "forbidden"
} }
} }
} }
...@@ -56,6 +56,12 @@ ...@@ -56,6 +56,12 @@
"HKEY_CURRENT_USER\\Software\\Classes\\AppID\\$CHROME_ELEVATOR_CLSID_SXS": { "HKEY_CURRENT_USER\\Software\\Classes\\AppID\\$CHROME_ELEVATOR_CLSID_SXS": {
"exists": "forbidden" "exists": "forbidden"
}, },
"HKEY_CURRENT_USER\\Software\\Classes\\Interface\\$CHROME_ELEVATOR_IID_SXS": {
"exists": "forbidden"
},
"HKEY_CURRENT_USER\\Software\\Classes\\TypeLib\\$CHROME_ELEVATOR_IID_SXS": {
"exists": "forbidden"
},
"HKEY_CURRENT_USER\\Software\\Classes\\$CHROME_SHORT_NAME_SXS$USER_SPECIFIC_REGISTRY_SUFFIX": { "HKEY_CURRENT_USER\\Software\\Classes\\$CHROME_SHORT_NAME_SXS$USER_SPECIFIC_REGISTRY_SUFFIX": {
"exists": "forbidden" "exists": "forbidden"
} }
......
...@@ -37,6 +37,12 @@ ...@@ -37,6 +37,12 @@
}, },
"HKEY_CURRENT_USER\\Software\\Classes\\AppID\\$CHROME_ELEVATOR_CLSID_SXS": { "HKEY_CURRENT_USER\\Software\\Classes\\AppID\\$CHROME_ELEVATOR_CLSID_SXS": {
"exists": "forbidden" "exists": "forbidden"
},
"HKEY_CURRENT_USER\\Software\\Classes\\Interface\\$CHROME_ELEVATOR_IID_SXS": {
"exists": "forbidden"
},
"HKEY_CURRENT_USER\\Software\\Classes\\TypeLib\\$CHROME_ELEVATOR_IID_SXS": {
"exists": "forbidden"
} }
} }
} }
...@@ -56,6 +56,12 @@ ...@@ -56,6 +56,12 @@
"HKEY_CURRENT_USER\\Software\\Classes\\AppID\\$CHROME_ELEVATOR_CLSID_DEV": { "HKEY_CURRENT_USER\\Software\\Classes\\AppID\\$CHROME_ELEVATOR_CLSID_DEV": {
"exists": "forbidden" "exists": "forbidden"
}, },
"HKEY_CURRENT_USER\\Software\\Classes\\Interface\\$CHROME_ELEVATOR_IID_DEV": {
"exists": "forbidden"
},
"HKEY_CURRENT_USER\\Software\\Classes\\TypeLib\\$CHROME_ELEVATOR_IID_DEV": {
"exists": "forbidden"
},
"HKEY_CURRENT_USER\\Software\\Classes\\$CHROME_SHORT_NAME_DEV$USER_SPECIFIC_REGISTRY_SUFFIX": { "HKEY_CURRENT_USER\\Software\\Classes\\$CHROME_SHORT_NAME_DEV$USER_SPECIFIC_REGISTRY_SUFFIX": {
"exists": "forbidden" "exists": "forbidden"
} }
......
...@@ -37,6 +37,12 @@ ...@@ -37,6 +37,12 @@
}, },
"HKEY_CURRENT_USER\\Software\\Classes\\AppID\\$CHROME_ELEVATOR_CLSID_DEV": { "HKEY_CURRENT_USER\\Software\\Classes\\AppID\\$CHROME_ELEVATOR_CLSID_DEV": {
"exists": "forbidden" "exists": "forbidden"
},
"HKEY_CURRENT_USER\\Software\\Classes\\Interface\\$CHROME_ELEVATOR_IID_DEV": {
"exists": "forbidden"
},
"HKEY_CURRENT_USER\\Software\\Classes\\TypeLib\\$CHROME_ELEVATOR_IID_DEV": {
"exists": "forbidden"
} }
} }
} }
...@@ -80,6 +80,46 @@ ...@@ -80,6 +80,46 @@
} }
} }
}, },
"HKEY_LOCAL_MACHINE\\Software\\Classes\\Interface\\$CHROME_ELEVATOR_IID": {
"exists": "required"
},
"HKEY_LOCAL_MACHINE\\Software\\Classes\\Interface\\$CHROME_ELEVATOR_IID\\ProxyStubClsid32": {
"exists": "required",
"values": {
"type": "SZ",
"data": "{00020424-0000-0000-C000-000000000046}"
}
},
"HKEY_LOCAL_MACHINE\\Software\\Classes\\Interface\\$CHROME_ELEVATOR_IID\\TypeLib": {
"exists": "required",
"values": {
"type": "SZ",
"data": "$CHROME_ELEVATOR_IID"
}
},
"HKEY_LOCAL_MACHINE\\Software\\Classes\\TypeLib\\$CHROME_ELEVATOR_IID": {
"exists": "required"
},
"HKEY_LOCAL_MACHINE\\Software\\Classes\\TypeLib\\$CHROME_ELEVATOR_IID\\1.0": {
"exists": "required"
},
"HKEY_LOCAL_MACHINE\\Software\\Classes\\TypeLib\\$CHROME_ELEVATOR_IID\\1.0\\0": {
"exists": "required"
},
"HKEY_LOCAL_MACHINE\\Software\\Classes\\TypeLib\\$CHROME_ELEVATOR_IID\\1.0\\0\\win32": {
"exists": "required",
"values": {
"type": "SZ",
"data": "\"$PROGRAM_FILES\\$CHROME_DIR\\Application\\$PREVIOUS_VERSION_MINI_INSTALLER_FILE_VERSION\\elevation_service.exe\""
}
},
"HKEY_LOCAL_MACHINE\\Software\\Classes\\TypeLib\\$CHROME_ELEVATOR_IID\\1.0\\0\\win64": {
"exists": "required",
"values": {
"type": "SZ",
"data": "\"$PROGRAM_FILES\\$CHROME_DIR\\Application\\$PREVIOUS_VERSION_MINI_INSTALLER_FILE_VERSION\\elevation_service.exe\""
}
},
"HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\$CHROME_ELEVATION_SERVICE_NAME": { "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\$CHROME_ELEVATION_SERVICE_NAME": {
"exists": "required", "exists": "required",
"values": { "values": {
......
...@@ -68,6 +68,12 @@ ...@@ -68,6 +68,12 @@
"HKEY_CURRENT_USER\\Software\\Classes\\AppID\\$CHROME_ELEVATOR_CLSID": { "HKEY_CURRENT_USER\\Software\\Classes\\AppID\\$CHROME_ELEVATOR_CLSID": {
"exists": "forbidden" "exists": "forbidden"
}, },
"HKEY_CURRENT_USER\\Software\\Classes\\Interface\\$CHROME_ELEVATOR_IID": {
"exists": "forbidden"
},
"HKEY_CURRENT_USER\\Software\\Classes\\TypeLib\\$CHROME_ELEVATOR_IID": {
"exists": "forbidden"
},
"HKEY_CURRENT_USER\\Software\\Classes\\$CHROME_SHORT_NAME$USER_SPECIFIC_REGISTRY_SUFFIX": { "HKEY_CURRENT_USER\\Software\\Classes\\$CHROME_SHORT_NAME$USER_SPECIFIC_REGISTRY_SUFFIX": {
"exists": "forbidden" "exists": "forbidden"
} }
......
...@@ -91,6 +91,46 @@ ...@@ -91,6 +91,46 @@
} }
} }
}, },
"HKEY_LOCAL_MACHINE\\Software\\Classes\\Interface\\$CHROME_ELEVATOR_IID": {
"exists": "required"
},
"HKEY_LOCAL_MACHINE\\Software\\Classes\\Interface\\$CHROME_ELEVATOR_IID\\ProxyStubClsid32": {
"exists": "required",
"values": {
"type": "SZ",
"data": "{00020424-0000-0000-C000-000000000046}"
}
},
"HKEY_LOCAL_MACHINE\\Software\\Classes\\Interface\\$CHROME_ELEVATOR_IID\\TypeLib": {
"exists": "required",
"values": {
"type": "SZ",
"data": "$CHROME_ELEVATOR_IID"
}
},
"HKEY_LOCAL_MACHINE\\Software\\Classes\\TypeLib\\$CHROME_ELEVATOR_IID": {
"exists": "required"
},
"HKEY_LOCAL_MACHINE\\Software\\Classes\\TypeLib\\$CHROME_ELEVATOR_IID\\1.0": {
"exists": "required"
},
"HKEY_LOCAL_MACHINE\\Software\\Classes\\TypeLib\\$CHROME_ELEVATOR_IID\\1.0\\0": {
"exists": "required"
},
"HKEY_LOCAL_MACHINE\\Software\\Classes\\TypeLib\\$CHROME_ELEVATOR_IID\\1.0\\0\\win32": {
"exists": "required",
"values": {
"type": "SZ",
"data": "\"$PROGRAM_FILES\\$CHROME_DIR\\Application\\$MINI_INSTALLER_FILE_VERSION\\elevation_service.exe\""
}
},
"HKEY_LOCAL_MACHINE\\Software\\Classes\\TypeLib\\$CHROME_ELEVATOR_IID\\1.0\\0\\win64": {
"exists": "required",
"values": {
"type": "SZ",
"data": "\"$PROGRAM_FILES\\$CHROME_DIR\\Application\\$MINI_INSTALLER_FILE_VERSION\\elevation_service.exe\""
}
},
"HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\$CHROME_ELEVATION_SERVICE_NAME": { "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\$CHROME_ELEVATION_SERVICE_NAME": {
"exists": "required", "exists": "required",
"values": { "values": {
......
...@@ -44,6 +44,12 @@ ...@@ -44,6 +44,12 @@
"HKEY_LOCAL_MACHINE\\Software\\Classes\\AppID\\$CHROME_ELEVATOR_CLSID": { "HKEY_LOCAL_MACHINE\\Software\\Classes\\AppID\\$CHROME_ELEVATOR_CLSID": {
"exists": "forbidden" "exists": "forbidden"
}, },
"HKEY_LOCAL_MACHINE\\Software\\Classes\\Interface\\$CHROME_ELEVATOR_IID": {
"exists": "forbidden"
},
"HKEY_LOCAL_MACHINE\\Software\\Classes\\TypeLib\\$CHROME_ELEVATOR_IID": {
"exists": "forbidden"
},
"HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\$CHROME_ELEVATION_SERVICE_NAME": { "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\$CHROME_ELEVATION_SERVICE_NAME": {
"exists": "forbidden" "exists": "forbidden"
} }
......
...@@ -64,6 +64,12 @@ ...@@ -64,6 +64,12 @@
"HKEY_CURRENT_USER\\Software\\Classes\\AppID\\$CHROME_ELEVATOR_CLSID": { "HKEY_CURRENT_USER\\Software\\Classes\\AppID\\$CHROME_ELEVATOR_CLSID": {
"exists": "forbidden" "exists": "forbidden"
}, },
"HKEY_CURRENT_USER\\Software\\Classes\\Interface\\$CHROME_ELEVATOR_IID": {
"exists": "forbidden"
},
"HKEY_CURRENT_USER\\Software\\Classes\\TypeLib\\$CHROME_ELEVATOR_IID": {
"exists": "forbidden"
},
"HKEY_CURRENT_USER\\Software\\Classes\\$CHROME_SHORT_NAME$USER_SPECIFIC_REGISTRY_SUFFIX": { "HKEY_CURRENT_USER\\Software\\Classes\\$CHROME_SHORT_NAME$USER_SPECIFIC_REGISTRY_SUFFIX": {
"exists": "forbidden" "exists": "forbidden"
} }
......
...@@ -43,6 +43,12 @@ ...@@ -43,6 +43,12 @@
}, },
"HKEY_CURRENT_USER\\Software\\Classes\\AppID\\$CHROME_ELEVATOR_CLSID": { "HKEY_CURRENT_USER\\Software\\Classes\\AppID\\$CHROME_ELEVATOR_CLSID": {
"exists": "forbidden" "exists": "forbidden"
},
"HKEY_CURRENT_USER\\Software\\Classes\\Interface\\$CHROME_ELEVATOR_IID": {
"exists": "forbidden"
},
"HKEY_CURRENT_USER\\Software\\Classes\\TypeLib\\$CHROME_ELEVATOR_IID": {
"exists": "forbidden"
} }
} }
} }
...@@ -48,6 +48,12 @@ ...@@ -48,6 +48,12 @@
"HKEY_CURRENT_USER\\Software\\Classes\\AppID\\$CHROME_ELEVATOR_CLSID_SXS": { "HKEY_CURRENT_USER\\Software\\Classes\\AppID\\$CHROME_ELEVATOR_CLSID_SXS": {
"exists": "forbidden" "exists": "forbidden"
}, },
"HKEY_CURRENT_USER\\Software\\Classes\\Interface\\$CHROME_ELEVATOR_IID_SXS": {
"exists": "forbidden"
},
"HKEY_CURRENT_USER\\Software\\Classes\\TypeLib\\$CHROME_ELEVATOR_IID_SXS": {
"exists": "forbidden"
},
"HKEY_CURRENT_USER\\Software\\Classes\\$CHROME_SHORT_NAME_SXS$USER_SPECIFIC_REGISTRY_SUFFIX": { "HKEY_CURRENT_USER\\Software\\Classes\\$CHROME_SHORT_NAME_SXS$USER_SPECIFIC_REGISTRY_SUFFIX": {
"exists": "forbidden" "exists": "forbidden"
} }
......
...@@ -89,6 +89,46 @@ ...@@ -89,6 +89,46 @@
} }
} }
}, },
"HKEY_LOCAL_MACHINE\\Software\\Classes\\Interface\\$CHROME_ELEVATOR_IID": {
"exists": "required"
},
"HKEY_LOCAL_MACHINE\\Software\\Classes\\Interface\\$CHROME_ELEVATOR_IID\\ProxyStubClsid32": {
"exists": "required",
"values": {
"type": "SZ",
"data": "{00020424-0000-0000-C000-000000000046}"
}
},
"HKEY_LOCAL_MACHINE\\Software\\Classes\\Interface\\$CHROME_ELEVATOR_IID\\TypeLib": {
"exists": "required",
"values": {
"type": "SZ",
"data": "$CHROME_ELEVATOR_IID"
}
},
"HKEY_LOCAL_MACHINE\\Software\\Classes\\TypeLib\\$CHROME_ELEVATOR_IID": {
"exists": "required"
},
"HKEY_LOCAL_MACHINE\\Software\\Classes\\TypeLib\\$CHROME_ELEVATOR_IID\\1.0": {
"exists": "required"
},
"HKEY_LOCAL_MACHINE\\Software\\Classes\\TypeLib\\$CHROME_ELEVATOR_IID\\1.0\\0": {
"exists": "required"
},
"HKEY_LOCAL_MACHINE\\Software\\Classes\\TypeLib\\$CHROME_ELEVATOR_IID\\1.0\\0\\win32": {
"exists": "required",
"values": {
"type": "SZ",
"data": "\"$PROGRAM_FILES\\$CHROME_DIR\\Application\\$PREVIOUS_VERSION_MINI_INSTALLER_FILE_VERSION\\elevation_service.exe\""
}
},
"HKEY_LOCAL_MACHINE\\Software\\Classes\\TypeLib\\$CHROME_ELEVATOR_IID\\1.0\\0\\win64": {
"exists": "required",
"values": {
"type": "SZ",
"data": "\"$PROGRAM_FILES\\$CHROME_DIR\\Application\\$PREVIOUS_VERSION_MINI_INSTALLER_FILE_VERSION\\elevation_service.exe\""
}
},
"HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\$CHROME_ELEVATION_SERVICE_NAME": { "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\$CHROME_ELEVATION_SERVICE_NAME": {
"exists": "required", "exists": "required",
"values": { "values": {
......
...@@ -62,6 +62,12 @@ ...@@ -62,6 +62,12 @@
"HKEY_CURRENT_USER\\Software\\Classes\\AppID\\$CHROME_ELEVATOR_CLSID": { "HKEY_CURRENT_USER\\Software\\Classes\\AppID\\$CHROME_ELEVATOR_CLSID": {
"exists": "forbidden" "exists": "forbidden"
}, },
"HKEY_CURRENT_USER\\Software\\Classes\\Interface\\$CHROME_ELEVATOR_IID": {
"exists": "forbidden"
},
"HKEY_CURRENT_USER\\Software\\Classes\\TypeLib\\$CHROME_ELEVATOR_IID": {
"exists": "forbidden"
},
"HKEY_CURRENT_USER\\Software\\Classes\\$CHROME_SHORT_NAME$USER_SPECIFIC_REGISTRY_SUFFIX": { "HKEY_CURRENT_USER\\Software\\Classes\\$CHROME_SHORT_NAME$USER_SPECIFIC_REGISTRY_SUFFIX": {
"exists": "forbidden" "exists": "forbidden"
} }
......
...@@ -125,6 +125,10 @@ class VariableExpander: ...@@ -125,6 +125,10 @@ class VariableExpander:
* $CHROME_ELEVATOR_CLSID_BETA: Elevator Service CLSID for Chrome Beta. * $CHROME_ELEVATOR_CLSID_BETA: Elevator Service CLSID for Chrome Beta.
* $CHROME_ELEVATOR_CLSID_DEV: Elevator Service CLSID for Chrome Dev. * $CHROME_ELEVATOR_CLSID_DEV: Elevator Service CLSID for Chrome Dev.
* $CHROME_ELEVATOR_CLSID_SXS: Elevator Service CLSID for Chrome SxS. * $CHROME_ELEVATOR_CLSID_SXS: Elevator Service CLSID for Chrome SxS.
* $CHROME_ELEVATOR_IID: IElevator IID for Chrome.
* $CHROME_ELEVATOR_IID_BETA: IElevator IID for Chrome Beta.
* $CHROME_ELEVATOR_IID_DEV: IElevator IID for Chrome Dev.
* $CHROME_ELEVATOR_IID_SXS: IElevator IID for Chrome SxS.
* $CHROME_ELEVATION_SERVICE_NAME: Elevation Service Name for Chrome. * $CHROME_ELEVATION_SERVICE_NAME: Elevation Service Name for Chrome.
* $CHROME_ELEVATION_SERVICE_NAME_BETA: Elevation Service Name for Chrome * $CHROME_ELEVATION_SERVICE_NAME_BETA: Elevation Service Name for Chrome
Beta. Beta.
...@@ -232,6 +236,13 @@ class VariableExpander: ...@@ -232,6 +236,13 @@ class VariableExpander:
'{DA7FDCA5-2CAA-4637-AA17-0740584DE7DA}'), '{DA7FDCA5-2CAA-4637-AA17-0740584DE7DA}'),
'CHROME_ELEVATOR_CLSID_SXS': ( 'CHROME_ELEVATOR_CLSID_SXS': (
'{704C2872-2049-435E-A469-0A534313C42B}'), '{704C2872-2049-435E-A469-0A534313C42B}'),
'CHROME_ELEVATOR_IID': ('{463ABECF-410D-407F-8AF5-0DF35A005CC8}'),
'CHROME_ELEVATOR_IID_BETA': (
'{A2721D66-376E-4D2F-9F0F-9070E9A42B5F}'),
'CHROME_ELEVATOR_IID_DEV': (
'{BB2AA26B-343A-4072-8B6F-80557B8CE571}'),
'CHROME_ELEVATOR_IID_SXS': (
'{4F7CE041-28E9-484F-9DD0-61A8CACEFEE4}'),
'CHROME_ELEVATION_SERVICE_NAME': ( 'CHROME_ELEVATION_SERVICE_NAME': (
'GoogleChromeElevationService'), 'GoogleChromeElevationService'),
'CHROME_ELEVATION_SERVICE_NAME_BETA': ( 'CHROME_ELEVATION_SERVICE_NAME_BETA': (
...@@ -262,6 +273,7 @@ class VariableExpander: ...@@ -262,6 +273,7 @@ class VariableExpander:
'CHROME_TOAST_ACTIVATOR_CLSID': ( 'CHROME_TOAST_ACTIVATOR_CLSID': (
'{635EFA6F-08D6-4EC9-BD14-8A0FDE975159}'), '{635EFA6F-08D6-4EC9-BD14-8A0FDE975159}'),
'CHROME_ELEVATOR_CLSID': ('{D133B120-6DB4-4D6B-8BFE-83BF8CA1B1B0}'), 'CHROME_ELEVATOR_CLSID': ('{D133B120-6DB4-4D6B-8BFE-83BF8CA1B1B0}'),
'CHROME_ELEVATOR_IID': ('{B88C45B9-8825-4629-B83E-77CC67D9CEED}'),
'CHROME_ELEVATION_SERVICE_NAME': 'ChromiumElevationService', 'CHROME_ELEVATION_SERVICE_NAME': 'ChromiumElevationService',
'CHROME_ELEVATION_SERVICE_DISPLAY_NAME': ( 'CHROME_ELEVATION_SERVICE_DISPLAY_NAME': (
'Chromium Elevation Service'), 'Chromium Elevation Service'),
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
*********************************************************/ *********************************************************/
#define PROXY_DELEGATION
#include <rpcproxy.h> #include <rpcproxy.h>
......
...@@ -70,6 +70,21 @@ typedef IID CLSID; ...@@ -70,6 +70,21 @@ typedef IID CLSID;
MIDL_DEFINE_GUID(IID, IID_IElevator,0xA949CB4E,0xC4F9,0x44C4,0xB2,0x13,0x6B,0xF8,0xAA,0x9A,0xC6,0x9C); MIDL_DEFINE_GUID(IID, IID_IElevator,0xA949CB4E,0xC4F9,0x44C4,0xB2,0x13,0x6B,0xF8,0xAA,0x9A,0xC6,0x9C);
MIDL_DEFINE_GUID(IID, IID_IElevatorChromium,0xB88C45B9,0x8825,0x4629,0xB8,0x3E,0x77,0xCC,0x67,0xD9,0xCE,0xED);
MIDL_DEFINE_GUID(IID, IID_IElevatorChrome,0x463ABECF,0x410D,0x407F,0x8A,0xF5,0x0D,0xF3,0x5A,0x00,0x5C,0xC8);
MIDL_DEFINE_GUID(IID, IID_IElevatorChromeBeta,0xA2721D66,0x376E,0x4D2F,0x9F,0x0F,0x90,0x70,0xE9,0xA4,0x2B,0x5F);
MIDL_DEFINE_GUID(IID, IID_IElevatorChromeDev,0xBB2AA26B,0x343A,0x4072,0x8B,0x6F,0x80,0x55,0x7B,0x8C,0xE5,0x71);
MIDL_DEFINE_GUID(IID, IID_IElevatorChromeCanary,0x4F7CE041,0x28E9,0x484F,0x9D,0xD0,0x61,0xA8,0xCA,0xCE,0xFE,0xE4);
MIDL_DEFINE_GUID(IID, LIBID_ElevatorLib,0x0014D784,0x7012,0x4A79,0x8A,0xB6,0xAD,0xDB,0x81,0x93,0xA0,0x6E); MIDL_DEFINE_GUID(IID, LIBID_ElevatorLib,0x0014D784,0x7012,0x4A79,0x8A,0xB6,0xAD,0xDB,0x81,0x93,0xA0,0x6E);
#undef MIDL_DEFINE_GUID #undef MIDL_DEFINE_GUID
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
*********************************************************/ *********************************************************/
#define PROXY_DELEGATION
#include <rpcproxy.h> #include <rpcproxy.h>
......
...@@ -70,6 +70,21 @@ typedef IID CLSID; ...@@ -70,6 +70,21 @@ typedef IID CLSID;
MIDL_DEFINE_GUID(IID, IID_IElevator,0xA949CB4E,0xC4F9,0x44C4,0xB2,0x13,0x6B,0xF8,0xAA,0x9A,0xC6,0x9C); MIDL_DEFINE_GUID(IID, IID_IElevator,0xA949CB4E,0xC4F9,0x44C4,0xB2,0x13,0x6B,0xF8,0xAA,0x9A,0xC6,0x9C);
MIDL_DEFINE_GUID(IID, IID_IElevatorChromium,0xB88C45B9,0x8825,0x4629,0xB8,0x3E,0x77,0xCC,0x67,0xD9,0xCE,0xED);
MIDL_DEFINE_GUID(IID, IID_IElevatorChrome,0x463ABECF,0x410D,0x407F,0x8A,0xF5,0x0D,0xF3,0x5A,0x00,0x5C,0xC8);
MIDL_DEFINE_GUID(IID, IID_IElevatorChromeBeta,0xA2721D66,0x376E,0x4D2F,0x9F,0x0F,0x90,0x70,0xE9,0xA4,0x2B,0x5F);
MIDL_DEFINE_GUID(IID, IID_IElevatorChromeDev,0xBB2AA26B,0x343A,0x4072,0x8B,0x6F,0x80,0x55,0x7B,0x8C,0xE5,0x71);
MIDL_DEFINE_GUID(IID, IID_IElevatorChromeCanary,0x4F7CE041,0x28E9,0x484F,0x9D,0xD0,0x61,0xA8,0xCA,0xCE,0xFE,0xE4);
MIDL_DEFINE_GUID(IID, LIBID_ElevatorLib,0x0014D784,0x7012,0x4A79,0x8A,0xB6,0xAD,0xDB,0x81,0x93,0xA0,0x6E); MIDL_DEFINE_GUID(IID, LIBID_ElevatorLib,0x0014D784,0x7012,0x4A79,0x8A,0xB6,0xAD,0xDB,0x81,0x93,0xA0,0x6E);
#undef MIDL_DEFINE_GUID #undef MIDL_DEFINE_GUID
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment