From 228156e79ff16addca11abd48f0afa03db14ad30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Tue, 13 May 2025 14:31:09 +0200 Subject: [PATCH] [SDK][SHELL] Sort out SEE_MASK_* and CMIC_MASK_* defines (#8019) - Add missing versioning defines for the different SEE_MASK_* and CMIC_MASK_* defines. - Move the five undocumented SEE_MASK_* defines into reactos/undocshell.h --- dll/win32/shell32/precomp.h | 8 ---- sdk/include/psdk/shellapi.h | 71 ++++++++++++++--------------- sdk/include/psdk/shobjidl.idl | 12 +++-- sdk/include/reactos/shellutils.h | 11 +++++ sdk/include/reactos/undocshell.h | 78 ++++++++++++++++++++------------ 5 files changed, 104 insertions(+), 76 deletions(-) diff --git a/dll/win32/shell32/precomp.h b/dll/win32/shell32/precomp.h index ea662be1421..eea446156a6 100644 --- a/dll/win32/shell32/precomp.h +++ b/dll/win32/shell32/precomp.h @@ -187,14 +187,6 @@ UINT GetDfmCmd(_In_ IContextMenu *pCM, _In_ LPCSTR verba); #define SHELL_ExecuteControlPanelCPL(hwnd, cpl) SHRunControlPanel((cpl), (hwnd)) -#define CmicFlagsToSeeFlags(flags) ((flags) & SEE_CMIC_COMMON_FLAGS) -static inline UINT SeeFlagsToCmicFlags(UINT flags) -{ - if (flags & SEE_MASK_CLASSNAME) - flags &= ~(SEE_MASK_HASLINKNAME | SEE_MASK_HASTITLE); - return flags & SEE_CMIC_COMMON_FLAGS; -} - // CStubWindow32 --- The owner window of file property sheets. // This window hides taskbar button of property sheet. diff --git a/sdk/include/psdk/shellapi.h b/sdk/include/psdk/shellapi.h index 45c4a4df461..ba9fda4585e 100644 --- a/sdk/include/psdk/shellapi.h +++ b/sdk/include/psdk/shellapi.h @@ -21,43 +21,42 @@ extern "C" { #define ABS_AUTOHIDE 1 #define ABS_ALWAYSONTOP 2 -#define SEE_MASK_DEFAULT 0x00000000 -#define SEE_MASK_CLASSNAME 0x00000001 -#define SEE_MASK_CLASSKEY 0x00000003 -#define SEE_MASK_IDLIST 0x00000004 -#define SEE_MASK_INVOKEIDLIST 0x0000000C -#define SEE_MASK_ICON 0x00000010 -#define SEE_MASK_HOTKEY 0x00000020 -#define SEE_MASK_NOCLOSEPROCESS 0x00000040 -#define SEE_MASK_CONNECTNETDRV 0x00000080 -#define SEE_MASK_NOASYNC 0x00000100 -#define SEE_MASK_FLAG_DDEWAIT SEE_MASK_NOASYNC -#define SEE_MASK_DOENVSUBST 0x00000200 -#define SEE_MASK_FLAG_NO_UI 0x00000400 -#define SEE_MASK_UNICODE 0x00004000 -#define SEE_MASK_NO_CONSOLE 0x00008000 -/* - * 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. - * I affect them this range of values which seems to be strangely empty. Of - * 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_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 -#define SEE_MASK_NOZONECHECKS 0x00800000 -#define SEE_MASK_NOQUERYCLASSSTORE 0x01000000 -#define SEE_MASK_WAITFORINPUTIDLE 0x02000000 -#define SEE_MASK_FLAG_LOG_USAGE 0x04000000 +#define SEE_MASK_DEFAULT 0x00000000 +#define SEE_MASK_CLASSNAME 0x00000001 +#define SEE_MASK_CLASSKEY 0x00000003 +#define SEE_MASK_IDLIST 0x00000004 +#define SEE_MASK_INVOKEIDLIST 0x0000000C +#if (NTDDI_VERSION < NTDDI_VISTA) || defined(__REACTOS__) +#define SEE_MASK_ICON 0x00000010 +#endif +#define SEE_MASK_HOTKEY 0x00000020 +#define SEE_MASK_NOCLOSEPROCESS 0x00000040 +#define SEE_MASK_CONNECTNETDRV 0x00000080 +#define SEE_MASK_NOASYNC 0x00000100 +#define SEE_MASK_FLAG_DDEWAIT SEE_MASK_NOASYNC +#define SEE_MASK_DOENVSUBST 0x00000200 +#define SEE_MASK_FLAG_NO_UI 0x00000400 +// 0x00001000 is undocumented. +#define SEE_MASK_UNICODE 0x00004000 +#define SEE_MASK_NO_CONSOLE 0x00008000 +// 0x00010000 .. 0x00080000 are undocumented. +#define SEE_MASK_ASYNCOK 0x00100000 +#if (NTDDI_VERSION >= NTDDI_WIN2K) +#define SEE_MASK_HMONITOR 0x00200000 +#endif +#if (NTDDI_VERSION >= NTDDI_WINXPSP1) +#define SEE_MASK_NOZONECHECKS 0x00800000 +#endif +#if (NTDDI_VERSION >= NTDDI_WIN2K) +#define SEE_MASK_NOQUERYCLASSSTORE 0x01000000 +#define SEE_MASK_WAITFORINPUTIDLE 0x02000000 +#endif +#if (NTDDI_VERSION >= NTDDI_WINXP) +#define SEE_MASK_FLAG_LOG_USAGE 0x04000000 +#endif +#if (NTDDI_VERSION >= NTDDI_VISTA) #define SEE_MASK_FLAG_HINST_IS_SITE 0x08000000 +#endif #define ABM_NEW 0 #define ABM_REMOVE 1 diff --git a/sdk/include/psdk/shobjidl.idl b/sdk/include/psdk/shobjidl.idl index 777cfde2e4a..7990c4a4dac 100644 --- a/sdk/include/psdk/shobjidl.idl +++ b/sdk/include/psdk/shobjidl.idl @@ -1693,15 +1693,19 @@ cpp_quote("#define CMDSTR_VIEWLIST WINELIB_NAME_AW(CMDSTR_VIEWLIST)") cpp_quote("#define CMDSTR_VIEWDETAILS WINELIB_NAME_AW(CMDSTR_VIEWDETAILS)") cpp_quote("#define CMIC_MASK_HOTKEY SEE_MASK_HOTKEY") -cpp_quote("#define CMIC_MASK_ICON SEE_MASK_ICON") +cpp_quote("#define CMIC_MASK_ICON SEE_MASK_ICON") // (NTDDI_VERSION < NTDDI_VISTA) || defined(__REACTOS__) cpp_quote("#define CMIC_MASK_FLAG_NO_UI SEE_MASK_FLAG_NO_UI") cpp_quote("#define CMIC_MASK_UNICODE SEE_MASK_UNICODE") cpp_quote("#define CMIC_MASK_NO_CONSOLE SEE_MASK_NO_CONSOLE") -cpp_quote("#define CMIC_MASK_HASLINKNAME SEE_MASK_HASLINKNAME") -cpp_quote("#define CMIC_MASK_FLAG_SEP_VDM SEE_MASK_FLAG_SEPVDM") -cpp_quote("#define CMIC_MASK_HASTITLE SEE_MASK_HASTITLE") +cpp_quote("#if (NTDDI_VERSION < NTDDI_VISTA) || defined(__REACTOS__)") +cpp_quote("#define CMIC_MASK_HASLINKNAME SEE_MASK_HASLINKNAME") // NOTE: Depends on undocumented define +cpp_quote("#define CMIC_MASK_HASTITLE SEE_MASK_HASTITLE") // NOTE: Depends on undocumented define +cpp_quote("#endif") +cpp_quote("#define CMIC_MASK_FLAG_SEP_VDM SEE_MASK_FLAG_SEPVDM") // NOTE: Depends on undocumented define cpp_quote("#define CMIC_MASK_ASYNCOK SEE_MASK_ASYNCOK") +cpp_quote("#if (NTDDI_VERSION >= NTDDI_VISTA)") cpp_quote("#define CMIC_MASK_NOASYNC SEE_MASK_NOASYNC") +cpp_quote("#endif") cpp_quote("#define CMIC_MASK_SHIFT_DOWN 0x10000000") cpp_quote("#define CMIC_MASK_PTINVOKE 0x20000000") cpp_quote("#define CMIC_MASK_CONTROL_DOWN 0x40000000") diff --git a/sdk/include/reactos/shellutils.h b/sdk/include/reactos/shellutils.h index ce7c3811208..10aebceeada 100644 --- a/sdk/include/reactos/shellutils.h +++ b/sdk/include/reactos/shellutils.h @@ -662,12 +662,23 @@ public: #define S_GREATERTHAN S_FALSE #define MAKE_COMPARE_HRESULT(x) ((x)>0 ? S_GREATERTHAN : ((x)<0 ? S_LESSTHAN : S_EQUAL)) +#ifdef _UNDOCSHELL_H +/* The SEE_MASK_* defines that are undocumented, are defined in reactos/undocshell.h */ #define SEE_CMIC_COMMON_BASICFLAGS (SEE_MASK_NOASYNC | SEE_MASK_ASYNCOK | SEE_MASK_UNICODE | \ SEE_MASK_NO_CONSOLE | SEE_MASK_FLAG_NO_UI | SEE_MASK_FLAG_SEPVDM | \ SEE_MASK_FLAG_LOG_USAGE | SEE_MASK_NOZONECHECKS) #define SEE_CMIC_COMMON_FLAGS (SEE_CMIC_COMMON_BASICFLAGS | SEE_MASK_HOTKEY | SEE_MASK_ICON | \ SEE_MASK_HASLINKNAME | SEE_MASK_HASTITLE) +#define CmicFlagsToSeeFlags(flags) ((flags) & SEE_CMIC_COMMON_FLAGS) +static inline UINT SeeFlagsToCmicFlags(UINT flags) +{ + if (flags & SEE_MASK_CLASSNAME) + flags &= ~(SEE_MASK_HASLINKNAME | SEE_MASK_HASTITLE); + return flags & SEE_CMIC_COMMON_FLAGS; +} +#endif // _UNDOCSHELL_H + static inline BOOL SHELL_IsContextMenuMsg(UINT uMsg) { return uMsg == WM_MEASUREITEM || uMsg == WM_DRAWITEM || diff --git a/sdk/include/reactos/undocshell.h b/sdk/include/reactos/undocshell.h index 945892b71aa..800b2b1c1cf 100644 --- a/sdk/include/reactos/undocshell.h +++ b/sdk/include/reactos/undocshell.h @@ -6,6 +6,9 @@ * Copyright 2025 Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com) */ +#ifndef _UNDOCSHELL_H +#define _UNDOCSHELL_H + #pragma once #include @@ -589,44 +592,44 @@ C_ASSERT(sizeof(REGSHELLSTATE) == REGSHELLSTATE_SIZE); /* Generic structure used by several messages */ typedef struct { - DWORD dwReserved; - DWORD dwReserved2; - LPCITEMIDLIST pidl; - LPDWORD lpdwUser; -} SFVCBINFO, * LPSFVCBINFO; -typedef const SFVCBINFO * LPCSFVCBINFO; + DWORD dwReserved; + DWORD dwReserved2; + LPCITEMIDLIST pidl; + LPDWORD lpdwUser; +} SFVCBINFO, *LPSFVCBINFO; +typedef const SFVCBINFO *LPCSFVCBINFO; /* SFVCB_SELECTIONCHANGED structure */ typedef struct { - UINT uOldState; - UINT uNewState; - LPCITEMIDLIST pidl; - LPDWORD lpdwUser; -} SFVSELECTSTATE, * LPSFVSELECTSTATE; -typedef const SFVSELECTSTATE * LPCSFVSELECTSTATE; + UINT uOldState; + UINT uNewState; + LPCITEMIDLIST pidl; + LPDWORD lpdwUser; +} SFVSELECTSTATE, *LPSFVSELECTSTATE; +typedef const SFVSELECTSTATE *LPCSFVSELECTSTATE; /* SFVCB_COPYHOOKCALLBACK structure */ typedef struct { - HWND hwnd; - UINT wFunc; - UINT wFlags; - LPCSTR pszSrcFile; - DWORD dwSrcAttribs; - LPCSTR pszDestFile; - DWORD dwDestAttribs; -} SFVCOPYHOOKINFO, * LPSFVCOPYHOOKINFO; -typedef const SFVCOPYHOOKINFO * LPCSFVCOPYHOOKINFO; + HWND hwnd; + UINT wFunc; + UINT wFlags; + LPCSTR pszSrcFile; + DWORD dwSrcAttribs; + LPCSTR pszDestFile; + DWORD dwDestAttribs; +} SFVCOPYHOOKINFO, *LPSFVCOPYHOOKINFO; +typedef const SFVCOPYHOOKINFO *LPCSFVCOPYHOOKINFO; /* SFVCB_GETDETAILSOF structure */ typedef struct { - LPCITEMIDLIST pidl; - int fmt; - int cx; - STRRET lpText; -} SFVCOLUMNINFO, * LPSFVCOLUMNINFO; + LPCITEMIDLIST pidl; + int fmt; + int cx; + STRRET lpText; +} SFVCOLUMNINFO, *LPSFVCOLUMNINFO; /**************************************************************************** * Misc Stuff @@ -667,6 +670,19 @@ HRESULT WINAPI ShellExecCmdLine( LPVOID pUnused, DWORD dwSeclFlags); +/* + * Undocumented SEE_MASK_* flags for the SHELLEXECUTEINFO::fMask member + * used by ShellExecuteEx(). These are absent from 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. + */ +#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 + HINSTANCE WINAPI RealShellExecuteA( _In_opt_ HWND hwnd, @@ -799,6 +815,7 @@ HRESULT WINAPI SHGetImageList(int iImageList, REFIID riid, void **ppv); BOOL WINAPI GUIDFromStringA( _In_ PCSTR psz, _Out_ LPGUID pguid); + BOOL WINAPI GUIDFromStringW( _In_ PCWSTR psz, _Out_ LPGUID pguid); @@ -862,6 +879,7 @@ SHInvokePrivilegedFunctionW( BOOL WINAPI SHTestTokenPrivilegeW(_In_opt_ HANDLE hToken, _In_z_ LPCWSTR lpName); + BOOL WINAPI IsSuspendAllowed(VOID); BOOL WINAPI @@ -949,6 +967,7 @@ LONG WINAPI SHRegQueryValueExA( LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData); + LONG WINAPI SHRegQueryValueExW( HKEY hkey, LPCWSTR pszValue, @@ -956,10 +975,11 @@ LONG WINAPI SHRegQueryValueExW( LPDWORD pdwType, LPVOID pvData, LPDWORD pcbData); + #ifdef UNICODE - #define SHRegQueryValueEx SHRegQueryValueExW +#define SHRegQueryValueEx SHRegQueryValueExW #else - #define SHRegQueryValueEx SHRegQueryValueExA +#define SHRegQueryValueEx SHRegQueryValueExA #endif BOOL WINAPI @@ -1264,3 +1284,5 @@ C_ASSERT(sizeof(APPBAR_COMMAND) == 0x38); #ifdef __cplusplus } /* extern "C" */ #endif /* defined(__cplusplus) */ + +#endif /* _UNDOCSHELL_H */