0

Remove ::CoAllowSetForegroundWindow() call

This call currently fails with error 0x80004002, meaning "no such
interface supported". CoAllowSetForegroundWindow passes the current
process's right to show a foreground window to the COM object's process.

However, the COM object in this case is an in-process object -
CLSCTX_ALL tries CLSCTX_INPROC_SERVER first, and in this case finds the
COM object there. Because it's in-process, CoAllowSetForegroundWindow is
meaningless (i.e., no need for the process to pass foreground privilege
to itself) and fails.

This change replaces CLSCTX_ALL with CLSCTX_INPROC_SERVER to make things
a bit more clear.

I tested this locally on Windows 10 and 11.

Change-Id: Ia49698ca0c28b53d84e3358d79b9b8307260b4a5
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6245511
Commit-Queue: Jesse McKenna <jessemckenna@google.com>
Reviewed-by: David Bienvenu <davidbienvenu@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1418942}
This commit is contained in:
Jesse McKenna
2025-02-11 15:17:44 -08:00
committed by Chromium LUCI CQ
parent 3a3a59ed5f
commit 0830d17723

@ -44,14 +44,14 @@ bool LaunchDefaultAppsSettingsModernDialog(std::wstring_view protocol) {
L"!microsoft.windows.immersivecontrolpanel";
Microsoft::WRL::ComPtr<IApplicationActivationManager> activator;
HRESULT hr = ::CoCreateInstance(CLSID_ApplicationActivationManager, nullptr,
CLSCTX_ALL, IID_PPV_ARGS(&activator));
HRESULT hr =
::CoCreateInstance(CLSID_ApplicationActivationManager, nullptr,
CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&activator));
if (FAILED(hr)) {
return false;
}
DWORD pid = 0;
::CoAllowSetForegroundWindow(activator.Get(), nullptr);
hr = activator->ActivateApplication(
kControlPanelAppModelId, L"page=SettingsPageAppsDefaults", AO_NONE, &pid);
if (FAILED(hr)) {