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:

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)) {
|
||||
|
Reference in New Issue
Block a user