62 Commits
Author SHA1 Message Date
Whindmar Saksit 16bb138e32 [SHELL32][SHELL32_APITEST] Handle named registry verbs in CDefaultContextMenu::InvokeCommand (#9340)
CORE-20690
2026-08-04 18:39:14 +02:00
Timo Kreuzer 1cf31524d5 [REACTOS] Stop using non-conforming swprintf / vswprintf
Use the underscored versions instead.
2026-05-07 06:27:58 +00:00
Whindmar Saksit 3d70478560 [SHELL32] Implement the RunAs dialog and verb (#5787)
Implements the "run as another user" part.
2025-09-10 15:21:04 +02:00
Whindmar Saksit a3b032b118 [SHELL32] Fix IShellExecuteHookW (#8097) 2025-06-16 21:47:45 +02:00
Whindmar Saksit ddcd5f7083 [SHELL32] Don't assert on broken ShellExecuteEx error reporting (#8065) 2025-06-01 06:49:38 +02:00
Whindmar Saksit d663eb4466 [SHELL32][CMD][SHLWAPI] Use the openas verb when invoking unknown file types (#7981)
CORE-20184
2025-05-30 18:46:24 +02:00
Hermès Bélusca-Maïto 6696d40cfc [SDK] Introduce winbase_undoc.h for undocumented exported kernel32 definitions (#8019)
This header is based on the following files from the official
Windows 10.0.10240.0 PSDK, a copy of which can be found at:
- https://github.com/tpn/winsdk-10/blob/master/Include/10.0.10240.0/um/minwin/winbasep.h
- https://github.com/tpn/winsdk-10/blob/master/Include/10.0.10240.0/um/minwin/wbasek.h
2025-05-27 20:52:17 +02:00
Whindmar Saksit 6829350af9 [SHELL32][NTUSER] Implement the SEE_MASK_HOTKEY/ICON/HMONITOR flags (#7947) 2025-05-03 16:08:58 +02:00
Whindmar Saksit 5a10ec60be [EXPLORER][BROWSEUI][SHLWAPI][BOOTDATA][WIN32K] Support AppKeys and more WM_APPCOMMANDs (#7879)
Implements a couple of extra commands in IShellBrowser and adds support for the AppKeys fallback registry key (used when the foreground application does not handle the command).
2025-04-18 18:35:30 +02:00
Katayama Hirofumi MZ 81d845fb2c [SHELL32] Implement PathProcessCommandW (#7818)
Follow-up of #7815. This function
affects ShellExec_RunDLLA/W
implementation.
JIRA issue: CORE-17659
- Implement PathProcessCommandW
  in shlexec.cpp.
- Adapt utils.h to non-C++.
2025-03-30 20:28:31 +09:00
Whindmar Saksit 77e4217919 [SHELL32] CMenuBand must set ShowWindow value for InvokeCommand (#7695) 2025-02-01 13:50:22 +01:00
Whindmar Saksit f335322ace [SHELL32] SEE_MASK_IDLIST should not assume the PIDL is always a FS path (#7693)
CORE-16898 CORE-14177
2025-01-31 21:15:13 +01:00
690643fc77 [SHELL32] SHELL_FindExecutable: Fix last regression from PR#7588 (#7643)
Co-authored-by: Hermès Bélusca-Maïto <[email protected]>
Co-authored-by: Stanislav Motylkov <[email protected]>
2025-01-20 19:10:04 -06:00
Oleg Dubinskiy c7d1aa3e92 [SHELL32] SHELL_FindExecutable: improve path handling code (#7633)
Follow-up of 42d5dfd3de.
- Revert "shell32: Fix ShellExecute for non-filespec paths." https://gitlab.winehq.org/wine/wine/-/commit/0bad544aab9e2c9ee93bbabac0386e02c58a39c0.
- Apply "shell32: Look for the file name without extension also for the path search case." https://gitlab.winehq.org/wine/wine/-/commit/38b6640be91047b2cae71c103afed8a5b448542d.
- Clear leading/trailing whitespaces (an improvement by Doug Lyons).
- Update the comment for xlpFile buffer definition, to match the current code behaviour.
This fixes some failures for the following tests:
- shell32_apitest:ShellExecCmdLine: 12 failures less,
- shell32_apitest:ShellExecuteEx: 5 failures less,
- shell32_winetest:shlexec: crash fixed, now 13 failures as before,
- wshom_winetest:wshom: crash fixed, now 2 failures less too (0 failures).
I've also tested: the problem which was intended to be fixed by the guilty commit (CORE-19953) still remains fixed after this change.
CORE-19964
2025-01-18 21:51:58 +01:00
Katayama Hirofumi MZ dad3a0938a [SHELL32][SHELL32_APITEST][SDK] Implement ShellExec_RunDLL (#7615)
Implementing missing features...
JIRA issue: CORE-19278
- Modify shell32.spec.
- Move function definitions
  from stubs.cpp into shlexec.cpp.
- Add prototypes to <undocshell.h>.
2025-01-17 22:51:18 +09:00
Oleg Dubinskiy e5a6b0f8e5 [SHELL32] SHELL_ArgifyW(): don't use SearchPathW() for receiving a path to a file (#7605)
Get rid from bogus SearchPathW() call, which is marked as most likely not needed in the comment above (by Wine). Simply get a length of the file name and use the file name directly instead, with checking for its validity too. Similarly as it's done for other cases.
That call seems actually not needed because it is already done using SearchPathW() in another parts of the code in this file, before calling SHELL_ArgifyW().
Fixes another heap corruption when trying to login via OAuth menthod in SpotifyXP 2.0.3 Beta (nightly build). The previous commit did not fix the bug fully, as I discovered it later.
CORE-19953
2025-01-10 20:45:43 +01:00
Oleg Dubinskiy 42d5dfd3de [SHELL32] SHELL_FindExecutable: import new path handling code from Wine 10.0-rc3 (#7588)
https://gitlab.winehq.org/wine/wine/-/blob/wine-10.0-rc3/dlls/shell32/shlexec.c?ref_type=tags#L631
https://gitlab.winehq.org/wine/wine/-/commit/0bad544aab9e2c9ee93bbabac0386e02c58a39c0
Import new path handling code from Wine 10.0-rc3. It uses PathResolveW(), which was hacked in ReactOS for a long time but has been implemented properly starting from 0.4.15-dev. So now it should work correctly, and we don't need to use SearchPathW() anymore.
This fixes a heap corruption from shell32.dll when launching SpotifyXP 2.0.3 Beta and trying to login with Spotify credentials via OAuth login method. Also it fixes the same heap corruption when pressing Update button in CCleaner 5.39.6399.
CORE-14670, CORE-19953
2024-12-29 17:25:43 +01:00
Whindmar Saksit fd41270d6d [SHELL32] ShellExecuteW must call ShellExecuteExW (#7587)
Adds the DDEWAIT/NOASYNC flag unless compatibility info says otherwise.

CORE-19952
2024-12-29 15:22:30 +01:00
Whindmar Saksit 28399a216b [SHELL32] Use FS compatible PIDL format for Recycle Bin items (#7532)
* [SHELL32] Use FS compatible PIDL format for Recycle Bin items

This allows SHChangeNotify to handle these items and DefView will correctly update the recycle folder.

CORE-18005 CORE-19239 CORE-13950 CORE-18435 CORE-18436 CORE-18437
2024-12-19 14:38:27 +01:00
Whindmar Saksit ea87f9102b [SHELL32][SHELL32_APITEST] Fix ShellExecuteEx IDLIST folder (#7464)
This is mainly to fix the shell32 apitest, a better way to handle SEE_MASK_IDLIST should be investigated in the future.
2024-10-24 16:44:53 +02:00
Timo Kreuzer e4930be4ff [REACTOS] Use the ISO C and C++ conformant names: _wcsicmp, _stricmp
Stop using non-conforming wcsicmp, stricmp, strcasecmp
2024-10-20 14:12:25 +03:00
Whindmar Saksit a509941786 [SHELL32] Pass and expand .lnk working directory (#7314) 2024-09-06 14:31:24 +02:00
Whindmar Saksit 724b20d414 [SHELL32] Don't add the file to the parameters if the registry command did not ask for a file (#7139)
Bugs fixed:
 - fDefault detection of default verb is flawed because it checks the ici struct after conversion instead of the source sei struct.
 - The command to execute should not have the filename appended just because %1 nor %L did not appear in the registry command template.
2024-08-08 19:30:14 +02:00
Katayama Hirofumi MZ 266e2e5052 [SHELL32] shlexec: Simplify parameters parsing (#7207)
Simplify code logic.
JIRA issue: N/A
- Use PathGetArgsW, PathRemoveArgsW,
  and PathUnquoteSpacesW for
  parsing parameters.
2024-08-03 15:46:24 +09:00
Katayama Hirofumi MZ 766d04d937 [SHELL32] shlexec: Do not expand without SEE_MASK_DOENVSUBST (#7206)
JIRA issue: N/A
Don't expand the application name
unless SEE_MASK_DOENVSUBST
is not specified.
2024-08-02 04:03:25 +09:00
Katayama Hirofumi MZ 51b662f90d [SHELL32] shlexec: Support SEE_MASK_FLAG_SEPVDM (#7205)
JIRA issue: N/A
Add CREATE_SEPARATE_WOW_VDM
flag to creation flags on
SEE_MASK_FLAG_SEPVDM.
2024-08-02 04:02:27 +09:00
Whindmar Saksit d5aca44042 [SHELL32] Forward CDefaultContextMenu::InvokeCommand parameters to ShellExecute (#7172) 2024-07-23 18:58:02 +02:00
Katayama Hirofumi MZ b40046f426 [SHELL32] ShellExecCmdLine: Use SearchPathW (#7166)
Based on @Doug-Lyons
shlexec-winR-fonts.patch.
#4932 (f691efe) introduced
some regression.
JIRA issue: CORE-19688
Call SearchPathW function before
PathFindOnPathExW call in
ShellExecCmdLine function.
2024-07-23 15:08:16 +09:00
Whindmar Saksit f6a25d48d5 [SHELL32] Invoke the ItemIDList of shortcuts (#7152)
Invoking the IDList as if the target was double-clicked in Explorer fixes shortcuts to control panel items (both .cpl and ShellFolder types).

CORE-19690
2024-07-22 19:31:48 +02:00
Katayama Hirofumi MZ 089788a52a [SHELL32][SHELL32_APITEST] ShellExecute should accept invalid directory (#7150)
Implement parsing SHELLEXECUTEINFO.lpDirectory.
Enhance ShellExecuteEx testcase for invalid directory.
2024-07-19 17:40:36 +09:00
Katayama Hirofumi MZ 6f277e9766 [SHELL32] shlexec.cpp: Parse 'shell:' and '::{CLSID}' (#7126)
JIRA issue: CORE-14177
JIRA issue: CORE-17482
- Add SHELL_InvokePidl helper
  function.
- Call SHParseDisplayName and
  SHELL_InvokePidl in a specific
  condition.
2024-07-15 21:16:04 +09:00
Katayama Hirofumi MZ 06b6833cf1 [SHELL32] shlexec.cpp: Automate buffer alloc/free (#7068)
Reduce code. Simplify code logic.
Ensure leak zero.
JIRA issue: CORE-17482
- Use CHeapPtr<WCHAR, CLocalAllocator>
  for allocation/freeing.
2024-07-03 23:03:31 +09:00
Katayama Hirofumi MZ 3e97f76a33 [SHELL32] ShellExecute: Re-work Part 2 (#6882)
Follow-up to #6871. Reduce indentation level.
JIRA issue: CORE-17482
In ShellExecuteExW, early check the structure
size and return on failure before
SHCoInitializeAnyApartment call.
2024-05-14 23:00:54 +09:00
Katayama Hirofumi MZ 044f181950 [SHELL32] ShellExecute: Re-work Part 1 (#6871)
The goal is a correct implementation of shell32!ShellExecute.
JIRA issue: CORE-17482
- Add SHELL_InRunDllProcess helper function.
- Add structure size check to ShellExecuteExA function.
- Add code to ShellExecuteExW function.
- Add "MaximizeApps" registry value check.
2024-05-13 10:27:41 +09:00
Katayama Hirofumi MZ 84f15b15fb [SHELL32][SHELL32_APITEST] FindExecutable: Add PRF_FIRSTDIRDEF flag (#6681)
Follow-up to #6635. The directory search without this flag didn't work.
JIRA issue: CORE-19493
- Add PRF_FIRSTDIRDEF flag for PathResolveW call.
- Delete needless macro definitions in PathQualifyExW.
- Remove an assertion in IsLFNDriveW.
- Fix shell32_apitest:FindExecutable testcase.
2024-03-29 11:15:38 +09:00
Katayama Hirofumi MZ f9a5585870 [SHELL32] Improve FindExecutableW (#6635)
Follow-up to #6656. An approach to
implement ShellExecuteEx correctly.
JIRA issue: CORE-19493
- Rewrite code by using AssocQueryStringW
  and PathResolveW functions.
2024-03-27 17:04:49 +09:00
Katayama Hirofumi MZ 10d9e9de05 [SHELL32][SDK] Implement RealShellExecute(,Ex)(A,W) (#5849)
Implementing missing features...
JIRA issue: CORE-19278
- Modify shell32.spec.
- Implement RealShellExecuteA, RealShellExecuteW, RealShellExecuteExA,
  and RealShellExecuteExW functions.
- Add the prototypes to <undocshell.h>.
- Modify SEE_MASK_... constants.
2024-03-19 08:58:07 +09:00
Doug Lyons 1b3eed58ca [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 /9b716539182864bc077e362febcda74da50287ed 

and add test_sei_lpIDList to shell32:ShellExecuteEx apitest test to protect
that functionality on future attempts to simplify.
2023-09-24 20:35:28 +00:00
Jose Carlos Jesus f691efefc2 [SHLWAPI] No need extension to execute '.bat' files CORE-17612 (#4932)
When no extension is provided, add default extension with correct precedence using PathFileExistsDefExtW.
- Use PathFindOnPathExW when searching in current directory and PATH environment variable.
- Fix Width String terminator to UNICODE_NULL.
- Fix all failed tests on PathFindPathExW KVM test.
CORE-17612
2023-02-11 00:05:11 +09:00
Ratin Gao 5c22ce3742 [SHELL32] Remove unused flag SEE_MASK_UNICODE (#5033)
SEE_MASK_UNICODE does nothing, so we needn't mark it as "unsupported flag" and output FIXME
2023-02-10 23:56:13 +09:00
Katayama Hirofumi MZ 140aa11c36 [SHELL32] shlexec: Initial support of App Paths (#4850)
- Fix SHELL_TryAppPathW helper function by using SHRegQueryValueExW function.
- Fix SHRegQueryValueExA/W functions.
CORE-11335
2022-11-08 09:23:06 +09:00
Mark Jansen d82185f104 [SDK] Define CCoInit in shellutils 2022-11-01 21:24:14 +01:00
Alex Miccolis 9b71653918 [SHELL32] Stop SHELL_execute from always executing files (#4363)
CORE-18038
Add a check (PathIsExeW) to SHELL_execute to prevent it from executing non-exe files.
2022-02-16 00:54:20 +01:00
Mark Jansen ce306b83db [SHELL32] Rename functions to fix ambiguity 2022-02-07 20:56:46 +01:00
Mark Jansen 93fac5533d [SHELL32] ShellExecute: Retry after searching for the file in the SEE_MASK_INVOKEIDLIST case
CORE-18035
2022-02-07 20:56:46 +01:00
Mark Jansen f6f5490ab4 [SHELL32] ShellExecute: Implement SEE_MASK_INVOKEIDLIST
CORE-18035
Also simplify some error handling by using smart pointers
2022-02-07 20:56:21 +01:00
Hermès Bélusca-Maïto 83be315abf [SHELL32] Use wide char string literals.
Import parts of Wine commit b215536852dc5a132108db92c90a41c70b738e50
shell32: Use wide char string literals.
Signed-off-by: Alexandre Julliard <[email protected]>
2022-01-09 22:39:29 +01:00
Hermès Bélusca-Maïto 9393fc320e [FORMATTING] Remove trailing whitespace. Addendum to 34593d93.
Excluded: 3rd-party code (incl. wine) and most of the win32ss.
2021-09-13 03:52:22 +02:00
Katayama Hirofumi MZ d32858413d [SHELL32] Command 'start C:' should open 'C:\' (#2642)
Based on JIRA user amaneureka's idea.
In SHELL_execute function, add a backslash for Drive "C:", "D:" or "E:" etc.
CORE-16384
2020-04-25 11:01:20 +09:00
Katayama Hirofumi MZ fc11cf78ca [SHELL32] Improve ShellExecCmdLine in path resolving (#2397)
Fix and improve private function shell32!ShellExecCmdLine to improve Run Dialog behavior. CORE-14409
2020-03-01 19:32:33 +09:00