From f2d34ab4c9532af5b22b0c56dc5eb882f1ae234e Mon Sep 17 00:00:00 2001 From: Katayama Hirofumi MZ Date: Sat, 23 Dec 2023 11:02:40 +0900 Subject: [PATCH] [SDK] Add cicRealCoCreateInstance into It looks like Cicero wants to hook CoCreateInstance. CORE-19363 --- sdk/include/reactos/cicero/cicbase.h | 38 ++++++++++++++++++---------- 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/sdk/include/reactos/cicero/cicbase.h b/sdk/include/reactos/cicero/cicbase.h index 805a8187d7b..6bf6a491e80 100644 --- a/sdk/include/reactos/cicero/cicbase.h +++ b/sdk/include/reactos/cicero/cicbase.h @@ -241,6 +241,28 @@ _cicGetSetUserCoCreateInstance(FN_CoCreateInstance fnUserCoCreateInstance) return s_fn; } +static inline HRESULT +cicRealCoCreateInstance( + REFCLSID rclsid, + LPUNKNOWN pUnkOuter, + DWORD dwClsContext, + REFIID iid, + LPVOID *ppv) +{ + static HINSTANCE s_hOle32 = NULL; + static FN_CoCreateInstance s_fnCoCreateInstance = NULL; + if (!s_fnCoCreateInstance) + { + if (!s_hOle32) + s_hOle32 = cicLoadSystemLibrary(L"ole32.dll", FALSE); + s_fnCoCreateInstance = (FN_CoCreateInstance)GetProcAddress(s_hOle32, "CoCreateInstance"); + if (!s_fnCoCreateInstance) + return E_NOTIMPL; + } + + return s_fnCoCreateInstance(rclsid, pUnkOuter, dwClsContext, iid, ppv); +} + /** * @implemented */ @@ -252,24 +274,12 @@ cicCoCreateInstance( REFIID iid, LPVOID *ppv) { + // NOTE: It looks like Cicero wants to hook CoCreateInstance FN_CoCreateInstance fnUserCoCreateInstance = _cicGetSetUserCoCreateInstance(NULL); if (fnUserCoCreateInstance) return fnUserCoCreateInstance(rclsid, pUnkOuter, dwClsContext, iid, ppv); - static HINSTANCE s_hOle32 = NULL; - static FN_CoCreateInstance s_fnCoCreateInstance = NULL; - if (!s_fnCoCreateInstance) - { - if (!s_hOle32) - s_hOle32 = cicLoadSystemLibrary(L"ole32.dll", FALSE); - if (!s_hOle32) - return E_NOTIMPL; - s_fnCoCreateInstance = (FN_CoCreateInstance)GetProcAddress(s_hOle32, "CoCreateInstance"); - if (!s_fnCoCreateInstance) - return E_NOTIMPL; - } - - return s_fnCoCreateInstance(rclsid, pUnkOuter, dwClsContext, iid, ppv); + return cicRealCoCreateInstance(rclsid, pUnkOuter, dwClsContext, iid, ppv); } /**