[SHELL32] -Cleanup CFSFolder::_LoadDynamicDropTargetHandlerForKey. Inspired by patch by Victor Martinez Calvo. CORE-12799. CID 1401249

svn path=/trunk/; revision=73865
This commit is contained in:
Giannis Adamopoulos 2017-02-20 20:13:22 +00:00
parent 7b0de0e982
commit 9abeb0d9b0

View file

@ -1056,38 +1056,41 @@ HRESULT WINAPI CFSFolder::_LoadDynamicDropTargetHandlerForKey(HKEY hRootKey, LPC
{ {
TRACE("CFSFolder::_LoadDynamicDropTargetHandlerForKey entered\n"); TRACE("CFSFolder::_LoadDynamicDropTargetHandlerForKey entered\n");
WCHAR wszName[MAX_PATH], *pwszClsid; WCHAR wszName[MAX_PATH];
DWORD dwSize = sizeof(wszName); DWORD dwSize = sizeof(wszName);
HRESULT hr; HRESULT hr;
LRESULT res;
if (RegGetValueW(hRootKey, L"shellex\\DropHandler", NULL, RRF_RT_REG_SZ, NULL, wszName, &dwSize) == ERROR_SUCCESS) res = RegGetValueW(hRootKey, L"shellex\\DropHandler", NULL, RRF_RT_REG_SZ, NULL, wszName, &dwSize);
if (res != ERROR_SUCCESS)
return S_FALSE;
CLSID clsid;
hr = CLSIDFromString(wszName, &clsid);
if (FAILED_UNEXPECTEDLY(hr))
return hr;
if (m_bGroupPolicyActive)
{ {
CLSID clsid; res = RegGetValueW(HKEY_LOCAL_MACHINE,
hr = CLSIDFromString(wszName, &clsid); L"Software\\Microsoft\\Windows\\CurrentVersion\\Shell Extensions\\Approved",
if (hr == S_OK) wszName,
pwszClsid = wszName; RRF_RT_REG_SZ,
NULL,
if (m_bGroupPolicyActive) NULL,
NULL);
if (res != ERROR_SUCCESS)
{ {
if (RegGetValueW(HKEY_LOCAL_MACHINE, ERR("DropHandler extension %S not approved\n", wszName);
L"Software\\Microsoft\\Windows\\CurrentVersion\\Shell Extensions\\Approved", return E_FAIL;
pwszClsid,
RRF_RT_REG_SZ,
NULL,
NULL,
NULL) == ERROR_SUCCESS)
{
hr = _LoadDynamicDropTargetHandler(&clsid, pwcsname, ppvOut);
}
}
else
{
hr = _LoadDynamicDropTargetHandler(&clsid, pwcsname, ppvOut);
} }
} }
else
return E_FAIL; hr = _LoadDynamicDropTargetHandler(&clsid, pwcsname, ppvOut);
return hr; if (FAILED_UNEXPECTEDLY(hr))
return hr;
return S_OK;
} }
HRESULT WINAPI CFSFolder::_LoadDynamicDropTargetHandler(const CLSID *pclsid, LPCWSTR pwcsname, LPVOID *ppvOut) HRESULT WINAPI CFSFolder::_LoadDynamicDropTargetHandler(const CLSID *pclsid, LPCWSTR pwcsname, LPVOID *ppvOut)