[SHELL32] Fix for shlexec.cpp regressions (#5282)

fixes CORE-18967 'Taskbar toolbar - Right click > Open folder fails'
by restoring the code-path we removed with the guilty 
0.4.15-dev-3847-g /9b71653918 

and add test_sei_lpIDList to shell32:ShellExecuteEx apitest test to protect
that functionality on future attempts to simplify.
This commit is contained in:
Doug Lyons 2023-09-24 15:35:28 -05:00 committed by GitHub
parent cc6e444ceb
commit 1b3eed58ca
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 78 additions and 0 deletions

View file

@ -467,6 +467,48 @@ static void test_properties()
ok_ptr(info.hInstApp, (HINSTANCE)2);
}
static void test_sei_lpIDList()
{
/* This tests ShellExecuteEx with lpIDList for explorer C:\ */
/* ITEMIDLIST for CLSID of 'My Computer' followed by PIDL for 'C:\' */
BYTE lpitemidlist[30] = { 0x14, 0, 0x1f, 0, 0xe0, 0x4f, 0xd0, 0x20, 0xea,
0x3a, 0x69, 0x10, 0xa2, 0xd8, 0x08, 0, 0x2b, 0x30, 0x30, 0x9d, // My Computer
0x8, 0, 0x23, 0x43, 0x3a, 0x5c, 0x5c, 0, 0, 0,}; // C:\\ + NUL-NUL ending
BYTE *lpBytes;
lpBytes = lpitemidlist;
SHELLEXECUTEINFOW ShellExecInfo;
BOOL Result;
STARTUPINFOW si;
PROCESS_INFORMATION pi;
HWND hWnd;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );
ZeroMemory(&ShellExecInfo, sizeof(ShellExecInfo));
ShellExecInfo.cbSize = sizeof(ShellExecInfo);
ShellExecInfo.fMask = SEE_MASK_IDLIST;
ShellExecInfo.hwnd = NULL;
ShellExecInfo.nShow = SW_SHOWNORMAL;
ShellExecInfo.lpFile = NULL;
ShellExecInfo.lpDirectory = NULL;
ShellExecInfo.lpIDList = lpBytes;
Result = ShellExecuteExW(&ShellExecInfo);
ok(Result == TRUE, "ShellExecuteEx lpIDList 'C:\\' failed\n");
trace("sei_lpIDList returned: %s\n", Result ? "SUCCESS" : "FAILURE");
if (Result)
{
Sleep(700);
// Terminate Window
hWnd = FindWindowW(L"CabinetWClass", L"Local Disk (C:)");
PostMessage(hWnd, WM_SYSCOMMAND, SC_CLOSE, 0);
}
}
START_TEST(ShellExecuteEx)
{
DoAppPathTest();
@ -475,4 +517,7 @@ START_TEST(ShellExecuteEx)
DoWaitForWindow(CLASSNAME, CLASSNAME, TRUE, TRUE);
Sleep(100);
test_sei_lpIDList();
}