2 * PROJECT: ReactOS Compatibility Layer Shell Extension
3 * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
4 * PURPOSE: acppage entrypoint
5 * COPYRIGHT: Copyright 2015 Mark Jansen (mark.jansen@reactos.org)
10 #include <shellutils.h>
12 HMODULE g_hModule
= NULL
;
13 LONG g_ModuleRefCnt
= 0;
15 class CLayerUIPropPageModule
: public CComModule
24 BEGIN_OBJECT_MAP(ObjectMap
)
25 OBJECT_ENTRY(CLSID_CLayerUIPropPage
, CLayerUIPropPage
)
28 CLayerUIPropPageModule gModule
;
31 BOOL WINAPI
DllMain(HINSTANCE hInstance
, DWORD dwReason
, LPVOID lpReserved
)
35 case DLL_PROCESS_ATTACH
:
36 DisableThreadLibraryCalls(hInstance
);
37 g_hModule
= hInstance
;
38 gModule
.Init(ObjectMap
, hInstance
, NULL
);
45 STDAPI
DllCanUnloadNow()
49 return gModule
.DllCanUnloadNow();
52 STDAPI
DllGetClassObject(REFCLSID rclsid
, REFIID riid
, LPVOID
*ppv
)
54 return gModule
.DllGetClassObject(rclsid
, riid
, ppv
);
57 STDAPI
DllRegisterServer()
61 hr
= gModule
.DllRegisterServer(FALSE
);
65 hr
= gModule
.UpdateRegistryFromResource(IDR_ACPPAGE
, TRUE
, NULL
);
72 STDAPI
DllUnregisterServer()
76 hr
= gModule
.DllUnregisterServer(FALSE
);
80 hr
= gModule
.UpdateRegistryFromResource(IDR_ACPPAGE
, FALSE
, NULL
);
89 CCoInit() { hres
= CoInitialize(NULL
); }
90 ~CCoInit() { if (SUCCEEDED(hres
)) { CoUninitialize(); } }
95 BOOL WINAPI
GetExeFromLnk(PCWSTR pszLnk
, PWSTR pszExe
, size_t cchSize
)
98 if (FAILED(init
.hres
))
101 CComPtr
<IShellLinkW
> spShellLink
;
102 if (FAILED(CoCreateInstance(CLSID_ShellLink
, NULL
, CLSCTX_INPROC_SERVER
, IID_PPV_ARG(IShellLinkW
, &spShellLink
))))
105 CComPtr
<IPersistFile
> spPersistFile
;
106 if (FAILED(spShellLink
->QueryInterface(IID_PPV_ARG(IPersistFile
, &spPersistFile
))))
109 if (FAILED(spPersistFile
->Load(pszLnk
, STGM_READ
)) || FAILED(spShellLink
->Resolve(NULL
, SLR_NO_UI
| SLR_NOUPDATE
| SLR_NOSEARCH
)))
112 return SUCCEEDED(spShellLink
->GetPath(pszExe
, cchSize
, NULL
, SLGP_RAWPATH
));