Something went wrong. Try again.
Reactos
Something went wrong. Try again.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798/* * PROJECT: ReactOS Compatibility Layer Shell Extension * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+) * PURPOSE: acppage entrypoint * COPYRIGHT: Copyright 2015-2018 Mark Jansen (mark.jansen@reactos.org) */
#include "precomp.h"
#include <shellutils.h>
HMODULE g_hModule = NULL;LONG g_ModuleRefCnt = 0;
class CLayerUIPropPageModule : public CComModule{public:};
BEGIN_OBJECT_MAP(ObjectMap) OBJECT_ENTRY(CLSID_CLayerUIPropPage, CLayerUIPropPage)END_OBJECT_MAP()
CLayerUIPropPageModule gModule;
EXTERN_CBOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved){ switch (dwReason) { case DLL_PROCESS_ATTACH: DisableThreadLibraryCalls(hInstance); g_hModule = hInstance; gModule.Init(ObjectMap, hInstance, NULL); break; case DLL_PROCESS_DETACH: gModule.Term(); break; }
return(TRUE);}
STDAPI DllCanUnloadNow(){ if (g_ModuleRefCnt) return S_FALSE; return gModule.DllCanUnloadNow();}
STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv){ return gModule.DllGetClassObject(rclsid, riid, ppv);}
STDAPI DllRegisterServer(){ HRESULT hr;
hr = gModule.DllRegisterServer(FALSE); if (FAILED(hr)) return hr;
return S_OK;}
STDAPI DllUnregisterServer(){ HRESULT hr;
hr = gModule.DllUnregisterServer(FALSE); if (FAILED(hr)) return hr;
return S_OK;}
EXTERN_CBOOL WINAPI GetExeFromLnk(PCWSTR pszLnk, PWSTR pszExe, size_t cchSize){ CCoInit init; if (FAILED_UNEXPECTEDLY(init.hr)) return FALSE;
CComPtr<IShellLinkW> spShellLink; if (FAILED_UNEXPECTEDLY(CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARG(IShellLinkW, &spShellLink)))) return FALSE;
CComPtr<IPersistFile> spPersistFile; if (FAILED_UNEXPECTEDLY(spShellLink->QueryInterface(IID_PPV_ARG(IPersistFile, &spPersistFile)))) return FALSE;
if (FAILED_UNEXPECTEDLY(spPersistFile->Load(pszLnk, STGM_READ)) || FAILED_UNEXPECTEDLY(spShellLink->Resolve(NULL, SLR_NO_UI | SLR_NOUPDATE | SLR_NOSEARCH))) return FALSE;
return !FAILED_UNEXPECTEDLY(spShellLink->GetPath(pszExe, cchSize, NULL, SLGP_RAWPATH));}