[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.
This commit is contained in:
Katayama Hirofumi MZ 2024-03-19 08:58:07 +09:00 committed by GitHub
parent 1ad90967d7
commit 10d9e9de05
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 260 additions and 111 deletions

View file

@ -37,7 +37,7 @@ extern "C" {
#define SEE_MASK_UNICODE 0x00004000
#define SEE_MASK_NO_CONSOLE 0x00008000
/*
* NOTE: The following three flags are undocumented and are not present in the
* NOTE: The following 5 flags are undocumented and are not present in the
* official Windows SDK. However they are used in shobjidl.idl to define some
* CMIC_MASK_* flags, these ones being mentioned in the MSDN documentation of
* the CMINVOKECOMMANDINFOEX structure.
@ -45,9 +45,11 @@ extern "C" {
* course their values may differ from the real ones, however I have no way
* of discovering them. If somebody else can verify them, it would be great.
*/
#define SEE_MASK_HASLINKNAME 0x00010000
#define SEE_MASK_HASTITLE 0x00020000
#define SEE_MASK_FLAG_SEPVDM 0x00040000
#define SEE_MASK_UNKNOWN_0x1000 0x00001000 /* FIXME: Name */
#define SEE_MASK_HASLINKNAME 0x00010000
#define SEE_MASK_FLAG_SEPVDM 0x00020000
#define SEE_MASK_USE_RESERVED 0x00040000
#define SEE_MASK_HASTITLE 0x00080000
/* END NOTE */
#define SEE_MASK_ASYNCOK 0x00100000
#define SEE_MASK_HMONITOR 0x00200000
@ -55,6 +57,7 @@ extern "C" {
#define SEE_MASK_NOQUERYCLASSSTORE 0x01000000
#define SEE_MASK_WAITFORINPUTIDLE 0x02000000
#define SEE_MASK_FLAG_LOG_USAGE 0x04000000
#define SEE_MASK_FLAG_HINST_IS_SITE 0x08000000
#define ABM_NEW 0
#define ABM_REMOVE 1

View file

@ -23,7 +23,6 @@
extern "C" {
#endif /* defined(__cplusplus) */
#if (NTDDI_VERSION < NTDDI_LONGHORN)
#define DBIMF_NOGRIPPER 0x0800
#define DBIMF_ALWAYSGRIPPER 0x1000
@ -615,6 +614,60 @@ HRESULT WINAPI ShellExecCmdLine(
LPVOID pUnused,
DWORD dwSeclFlags);
HINSTANCE WINAPI
RealShellExecuteA(
_In_opt_ HWND hwnd,
_In_opt_ LPCSTR lpOperation,
_In_opt_ LPCSTR lpFile,
_In_opt_ LPCSTR lpParameters,
_In_opt_ LPCSTR lpDirectory,
_In_opt_ LPSTR lpReturn,
_In_opt_ LPCSTR lpTitle,
_In_opt_ LPVOID lpReserved,
_In_ INT nCmdShow,
_Out_opt_ PHANDLE lphProcess);
HINSTANCE WINAPI
RealShellExecuteW(
_In_opt_ HWND hwnd,
_In_opt_ LPCWSTR lpOperation,
_In_opt_ LPCWSTR lpFile,
_In_opt_ LPCWSTR lpParameters,
_In_opt_ LPCWSTR lpDirectory,
_In_opt_ LPWSTR lpReturn,
_In_opt_ LPCWSTR lpTitle,
_In_opt_ LPVOID lpReserved,
_In_ INT nCmdShow,
_Out_opt_ PHANDLE lphProcess);
HINSTANCE WINAPI
RealShellExecuteExA(
_In_opt_ HWND hwnd,
_In_opt_ LPCSTR lpOperation,
_In_opt_ LPCSTR lpFile,
_In_opt_ LPCSTR lpParameters,
_In_opt_ LPCSTR lpDirectory,
_In_opt_ LPSTR lpReturn,
_In_opt_ LPCSTR lpTitle,
_In_opt_ LPVOID lpReserved,
_In_ INT nCmdShow,
_Out_opt_ PHANDLE lphProcess,
_In_ DWORD dwFlags);
HINSTANCE WINAPI
RealShellExecuteExW(
_In_opt_ HWND hwnd,
_In_opt_ LPCWSTR lpOperation,
_In_opt_ LPCWSTR lpFile,
_In_opt_ LPCWSTR lpParameters,
_In_opt_ LPCWSTR lpDirectory,
_In_opt_ LPWSTR lpReturn,
_In_opt_ LPCWSTR lpTitle,
_In_opt_ LPVOID lpReserved,
_In_ INT nCmdShow,
_Out_opt_ PHANDLE lphProcess,
_In_ DWORD dwFlags);
/* RegisterShellHook types */
#define RSH_DEREGISTER 0
#define RSH_REGISTER 1
@ -800,7 +853,7 @@ DWORD WINAPI WinList_Init(void);
IStream* WINAPI SHGetViewStream(LPCITEMIDLIST, DWORD, LPCTSTR, LPCTSTR, LPCTSTR);
EXTERN_C HRESULT WINAPI SHCreateSessionKey(REGSAM samDesired, PHKEY phKey);
HRESULT WINAPI SHCreateSessionKey(REGSAM samDesired, PHKEY phKey);
LONG WINAPI SHRegQueryValueExA(
HKEY hkey,
@ -822,7 +875,6 @@ LONG WINAPI SHRegQueryValueExW(
#define SHRegQueryValueEx SHRegQueryValueExA
#endif
EXTERN_C
HRESULT WINAPI
CopyStreamUI(
_In_ IStream *pSrc,