[SDK] Enhance <shlobj_undoc.h> more (#9089)

Implementing missing features...
JIRA issue: CORE-20467
- Add IPersistString2,
  IObjectWithRegistryKeyOld, and
  IObjectWithRegistryKey interfaces
  into <shlobj_undoc.h>.
- Add some IIDs into
  <shlguid_undoc.h>.
- Add missing PUREs in
  <shlobj_undoc.h>.
This commit is contained in:
Katayama Hirofumi MZ
2026-05-30 19:17:15 +09:00
committed by GitHub
parent 678d0e2cda
commit f3ca62ae97
2 changed files with 108 additions and 21 deletions

View File

@@ -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

View File

@@ -9,6 +9,8 @@
#pragma once
#include <winreg.h> /* 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);