https://git.reactos.org/?p=reactos.git;a=commitdiff;h=d2976ca58e1409a9b6a232...
commit d2976ca58e1409a9b6a2322db1157cc8d9f19fb8 Author: Joachim Henze Joachim.Henze@reactos.org AuthorDate: Fri Sep 20 00:11:10 2019 +0200 Commit: Joachim Henze Joachim.Henze@reactos.org CommitDate: Fri Sep 20 00:11:10 2019 +0200
[EXPLORER] Mitigate CORE-15760 'system menu may close unexpectedly'
Looks like a race condition of the async part of SetForegroundWindow().
KVM https://reactos.org/testman/compare.php?ids=69065,69069 VBOX https://reactos.org/testman/compare.php?ids=69064,69068
I intend to merge that back into 0.4.12RC as well. --- base/shell/explorer/taskswnd.cpp | 7 +++++++ 1 file changed, 7 insertions(+)
diff --git a/base/shell/explorer/taskswnd.cpp b/base/shell/explorer/taskswnd.cpp index 0a5d4db4424..deeb50f2547 100644 --- a/base/shell/explorer/taskswnd.cpp +++ b/base/shell/explorer/taskswnd.cpp @@ -1633,6 +1633,13 @@ public:
ActivateTask(TaskItem->hWnd);
+ /* Wait up to 2 seconds for the window to process the foreground notification. */ + DWORD_PTR resultDummy; + if (!SendMessageTimeout(TaskItem->hWnd, WM_NULL, 0, 0, 0, 2000, &resultDummy)) + ERR("HandleTaskItemRightClick detected the window was unresponsive for 2 seconds, or was destroyed\n"); + if (GetForegroundWindow() != TaskItem->hWnd) + ERR("HandleTaskItemRightClick detected the window did not become foreground\n"); + ::SendMessageW(TaskItem->hWnd, WM_POPUPSYSTEMMENU, 0, MAKELPARAM(pt.x, pt.y)); }