From f3ca62ae97cd0bd0a500d303fcb3da2b5345c7da Mon Sep 17 00:00:00 2001 From: Katayama Hirofumi MZ Date: Sat, 30 May 2026 19:17:15 +0900 Subject: [PATCH] [SDK] Enhance more (#9089) Implementing missing features... JIRA issue: CORE-20467 - Add IPersistString2, IObjectWithRegistryKeyOld, and IObjectWithRegistryKey interfaces into . - Add some IIDs into . - Add missing PUREs in . --- sdk/include/reactos/shlguid_undoc.h | 2 + sdk/include/reactos/shlobj_undoc.h | 127 +++++++++++++++++++++++----- 2 files changed, 108 insertions(+), 21 deletions(-) diff --git a/sdk/include/reactos/shlguid_undoc.h b/sdk/include/reactos/shlguid_undoc.h index 50b5b1d2156..b423499bd9c 100644 --- a/sdk/include/reactos/shlguid_undoc.h +++ b/sdk/include/reactos/shlguid_undoc.h @@ -217,6 +217,8 @@ DEFINE_GUID(POLID_ModRiskFileTypes, 0xECF9040B, 0xF38C, 0x44FE, DEFINE_GUID(POLID_LowRiskFileTypes, 0xECF9040C, 0xF38C, 0x44FE, 0x9F, 0x1B, 0x02, 0xA7, 0x2B, 0xAF, 0x60, 0x3C); DEFINE_GUID(POLID_PreXPSP2ShellProtocolBehavior, 0x4FC60822, 0x47AF, 0x4BEE, 0xA7, 0xDA, 0xC9, 0x9A, 0x6E, 0x8E, 0x5D, 0x8D); DEFINE_GUID(POLID_CompareJunctionness, 0xB3AB7D3B, 0x698F, 0x401E, 0xBF, 0x89, 0x30, 0x02, 0x33, 0x35, 0xA2, 0x67); +DEFINE_GUID(IID_IObjectWithRegistryKeyOld, 0x5747C63F, 0x1DE8, 0x423F, 0x98, 0x0F, 0x00, 0xCB, 0x07, 0xF4, 0xC4, 0x5B); +DEFINE_GUID(IID_IObjectWithRegistryKey, 0xD960050C, 0xF4E1, 0x4294, 0xAC, 0x4B, 0x59, 0x89, 0x13, 0x60, 0x59, 0x23); #define CGID_IExplorerToolbar IID_IExplorerToolbar #define SID_IExplorerToolbar IID_IExplorerToolbar diff --git a/sdk/include/reactos/shlobj_undoc.h b/sdk/include/reactos/shlobj_undoc.h index 7c8498b55d8..0e0e5f2f0d2 100644 --- a/sdk/include/reactos/shlobj_undoc.h +++ b/sdk/include/reactos/shlobj_undoc.h @@ -9,6 +9,8 @@ #pragma once +#include /* REGSAM */ + #ifdef __cplusplus extern "C" { #endif @@ -879,14 +881,14 @@ DECLARE_INTERFACE_(IQuerySourceOld, IUnknown) // {C7478486-7583-49E7-A6C2-FAF8F0 STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IQuerySourceOld ***/ - STDMETHOD(EnumValues)(THIS_ IEnumString **ppEnum); - STDMETHOD(EnumSources)(THIS_ IEnumString **ppEnum); - STDMETHOD(QueryValueString)(THIS_ PCWSTR keyName, PCWSTR valueName, PWSTR *ppszValue); - STDMETHOD(QueryValueDword)(THIS_ PCWSTR keyName, PCWSTR valueName, DWORD *pdwValue); - STDMETHOD(QueryValueExists)(THIS_ PCWSTR keyName, PCWSTR valueName); - STDMETHOD(QueryValueDirect)(THIS_ PCWSTR keyName, PCWSTR valueName, FLAGGED_BYTE_BLOB **ppBlob); - STDMETHOD(OpenSource)(THIS_ PCWSTR keyName, BOOL, IQuerySourceOld **ppSource); - STDMETHOD(SetValueDirect)(THIS_ PCWSTR keyName, PCWSTR valueName, DWORD, DWORD, PBYTE); + STDMETHOD(EnumValues)(THIS_ IEnumString **ppEnum) PURE; + STDMETHOD(EnumSources)(THIS_ IEnumString **ppEnum) PURE; + STDMETHOD(QueryValueString)(THIS_ PCWSTR keyName, PCWSTR valueName, PWSTR *ppszValue) PURE; + STDMETHOD(QueryValueDword)(THIS_ PCWSTR keyName, PCWSTR valueName, DWORD *pdwValue) PURE; + STDMETHOD(QueryValueExists)(THIS_ PCWSTR keyName, PCWSTR valueName) PURE; + STDMETHOD(QueryValueDirect)(THIS_ PCWSTR keyName, PCWSTR valueName, FLAGGED_BYTE_BLOB **ppBlob) PURE; + STDMETHOD(OpenSource)(THIS_ PCWSTR keyName, BOOL bCreate, IQuerySourceOld **ppSource) PURE; + STDMETHOD(SetValueDirect)(THIS_ PCWSTR keyName, PCWSTR valueName, DWORD, DWORD, PBYTE) PURE; }; #undef INTERFACE @@ -918,14 +920,14 @@ DECLARE_INTERFACE_(IQuerySource, IUnknown) // {7BC28AC2-0D9C-4941-BB9A-72BECB184 STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IQuerySource ***/ - STDMETHOD(EnumValues)(THIS_ IEnumString **ppEnum); - STDMETHOD(QueryValueString)(THIS_ PCWSTR keyName, PCWSTR valueName, PWSTR *ppszValue); - STDMETHOD(QueryValueDword)(THIS_ PCWSTR keyName, PCWSTR valueName, DWORD *pdwValue); - STDMETHOD(QueryValueGuid)(THIS_ PCWSTR keyName, PCWSTR valueName, GUID *guid); - STDMETHOD(QueryValueExists)(THIS_ PCWSTR keyName, PCWSTR valueName); - STDMETHOD(QueryValueDirect)(THIS_ PCWSTR keyName, PCWSTR valueName, FLAGGED_BYTE_BLOB **ppBlob); - STDMETHOD(EnumSources)(THIS_ IEnumString **ppEnum); - STDMETHOD(OpenSource)(THIS_ PCWSTR keyName, IQuerySource **ppSource); + STDMETHOD(EnumValues)(THIS_ IEnumString **ppEnum) PURE; + STDMETHOD(QueryValueString)(THIS_ PCWSTR keyName, PCWSTR valueName, PWSTR *ppszValue) PURE; + STDMETHOD(QueryValueDword)(THIS_ PCWSTR keyName, PCWSTR valueName, DWORD *pdwValue) PURE; + STDMETHOD(QueryValueGuid)(THIS_ PCWSTR keyName, PCWSTR valueName, GUID *guid) PURE; + STDMETHOD(QueryValueExists)(THIS_ PCWSTR keyName, PCWSTR valueName) PURE; + STDMETHOD(QueryValueDirect)(THIS_ PCWSTR keyName, PCWSTR valueName, FLAGGED_BYTE_BLOB **ppBlob) PURE; + STDMETHOD(EnumSources)(THIS_ IEnumString **ppEnum) PURE; + STDMETHOD(OpenSource)(THIS_ PCWSTR keyName, IQuerySource **ppSource) PURE; }; #undef INTERFACE @@ -956,8 +958,8 @@ DECLARE_INTERFACE_(IObjectWithQuerySource, IUnknown) // {B3DCB623-4280-4EB1-84B3 STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IObjectWithQuerySource ***/ - STDMETHOD(SetSource)(THIS_ IQuerySource *pSource); - STDMETHOD(GetSource)(THIS_ REFIID riid, PVOID *ppSource); + STDMETHOD(SetSource)(THIS_ IQuerySource *pSource) PURE; + STDMETHOD(GetSource)(THIS_ REFIID riid, PVOID *ppSource) PURE; }; #undef INTERFACE @@ -1150,9 +1152,9 @@ DECLARE_INTERFACE_(IAssociationArrayInitialize, IUnknown) // {EE9165BF-A4D9-474B STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IAssociationArrayInitialize ***/ - STDMETHOD(InitClassElements)(ULONG flags, PCWSTR pszClass); - STDMETHOD(InsertElements)(ULONG flags, IEnumAssociationElements *pEnum); - STDMETHOD(FilterElements)(ULONG filter); + STDMETHOD(InitClassElements)(ULONG flags, PCWSTR pszClass) PURE; + STDMETHOD(InsertElements)(ULONG flags, IEnumAssociationElements *pEnum) PURE; + STDMETHOD(FilterElements)(ULONG filter) PURE; }; #undef INTERFACE @@ -1165,6 +1167,89 @@ DECLARE_INTERFACE_(IAssociationArrayInitialize, IUnknown) // {EE9165BF-A4D9-474B #define IAssociationArrayInitialize_FilterElements(T,a) (T)->lpVtbl->FilterElements(T,a) #endif +/***************************************************************************** + * IPersistString2 interface + * + * @sse IPersist + * @see https://www.geoffchappell.com/studies/windows/shell/shell32/interfaces/ipersiststring2.htm + */ +#define INTERFACE IPersistString2 +DECLARE_INTERFACE_(IPersistString2, IPersist) // {3C44BA76-DE0E-4049-B6E4-6B31A5262707} +{ + /*** IUnknown ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + /*** IPersist ***/ + STDMETHOD(GetClassID)(THIS_ CLSID *pClassID) PURE; + /*** IPersistString2 ***/ + STDMETHOD(SetString)(THIS_ PCWSTR psz) PURE; + STDMETHOD(GetString)(THIS_ PWSTR *ppsz) PURE; +}; +#undef INTERFACE + +#ifdef COBJMACROS +#define IPersistString2_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b) +#define IPersistString2_AddRef(T) (T)->lpVtbl->AddRef(T) +#define IPersistString2_Release(T) (T)->lpVtbl->Release(T) +#define IPersistString2_SetString(T,a) (T)->lpVtbl->SetString(T,a) +#define IPersistString2_GetString(T,a) (T)->lpVtbl->GetString(T,a) +#endif + +/***************************************************************************** + * IObjectWithRegistryKeyOld interface + * + * @see IObjectWithRegistryKey + * @see https://www.geoffchappell.com/studies/windows/shell/shlwapi/interfaces/iobjectwithregistrykey.htm + */ +#define INTERFACE IObjectWithRegistryKeyOld +DECLARE_INTERFACE_(IObjectWithRegistryKeyOld, IUnknown) // {5747C63F-1DE8-423F-980F-00CB07F4C45B} +{ + /*** IUnknown ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + /*** IObjectWithRegistryKeyOld ***/ + STDMETHOD(SetKey)(THIS_ HKEY hKey) PURE; + STDMETHOD(GetKey)(THIS_ HKEY *phKey) PURE; +}; +#undef INTERFACE + +#ifdef COBJMACROS +#define IObjectWithRegistryKeyOld_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b) +#define IObjectWithRegistryKeyOld_AddRef(T) (T)->lpVtbl->AddRef(T) +#define IObjectWithRegistryKeyOld_Release(T) (T)->lpVtbl->Release(T) +#define IObjectWithRegistryKeyOld_SetKey(T,a) (T)->lpVtbl->SetKey(T,a) +#define IObjectWithRegistryKeyOld_GetKey(T,a) (T)->lpVtbl->GetKey(T,a) +#endif + +/***************************************************************************** + * IObjectWithRegistryKey interface (new version) + * + * @see IObjectWithRegistryKeyOld + * @see https://www.geoffchappell.com/studies/windows/shell/shlwapi/interfaces/iobjectwithregistrykey.htm + */ +#define INTERFACE IObjectWithRegistryKey +DECLARE_INTERFACE_(IObjectWithRegistryKey, IUnknown) // {D960050C-F4E1-4294-AC4B-598913605923} +{ + /*** IUnknown ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + /*** IObjectWithRegistryKey ***/ + STDMETHOD(SetKey)(THIS_ HKEY hKey) PURE; + STDMETHOD(GetKey)(THIS_ REGSAM samDesired, HKEY *phKey) PURE; +}; +#undef INTERFACE + +#ifdef COBJMACROS +#define IObjectWithRegistryKey_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b) +#define IObjectWithRegistryKey_AddRef(T) (T)->lpVtbl->AddRef(T) +#define IObjectWithRegistryKey_Release(T) (T)->lpVtbl->Release(T) +#define IObjectWithRegistryKey_SetKey(T,a) (T)->lpVtbl->SetKey(T,a) +#define IObjectWithRegistryKey_GetKey(T,a) (T)->lpVtbl->GetKey(T,a) +#endif + HANDLE WINAPI SHCreateDesktop(IShellDesktopTray*); BOOL WINAPI SHDesktopMessageLoop(HANDLE); HRESULT WINAPI SHCreateFileDataObject(PCIDLIST_ABSOLUTE pidlFolder, UINT cidl, PCUITEMID_CHILD_ARRAY apidl, IDataObject* pDataInner, IDataObject** ppDataObj);