100 lines
1.8 KiB
C++
100 lines
1.8 KiB
C++
/*++
|
|
|
|
Copyright (c) 2000 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
ForceShellLinkResolveNoUI.cpp
|
|
|
|
Abstract:
|
|
|
|
This shim prevents any sort of UI on the IShellLink::Resolve
|
|
API by NULLing out the passed in HWND if SLR_NO_UI is specified
|
|
in fFlags.
|
|
|
|
Notes:
|
|
|
|
This is a general purpose shim.
|
|
|
|
History:
|
|
|
|
04/05/2000 markder Created
|
|
|
|
--*/
|
|
|
|
#include "precomp.h"
|
|
|
|
IMPLEMENT_SHIM_BEGIN(ForceShellLinkResolveNoUI)
|
|
#include "ShimHookMacro.h"
|
|
|
|
APIHOOK_ENUM_BEGIN
|
|
APIHOOK_ENUM_ENTRY_COMSERVER(SHELL32)
|
|
APIHOOK_ENUM_END
|
|
|
|
IMPLEMENT_COMSERVER_HOOK(SHELL32)
|
|
|
|
/*++
|
|
|
|
This stub function prevents any sort of UI on the IShellLink::Resolve API by
|
|
NULLing out the passed in HWND if SLR_NO_UI is specified in fFlags.
|
|
|
|
--*/
|
|
|
|
HRESULT
|
|
COMHOOK(IShellLinkA, Resolve)( PVOID pThis, HWND hwnd, DWORD fFlags )
|
|
{
|
|
HRESULT hrReturn = E_FAIL;
|
|
_pfn_IShellLinkA_Resolve pfnOld;
|
|
|
|
pfnOld = (_pfn_IShellLinkA_Resolve) ORIGINAL_COM(IShellLinkA, Resolve, pThis);
|
|
|
|
if( fFlags & SLR_NO_UI )
|
|
{
|
|
hwnd = NULL;
|
|
}
|
|
|
|
if( pfnOld )
|
|
{
|
|
hrReturn = (*pfnOld)( pThis, hwnd, fFlags );
|
|
}
|
|
|
|
return hrReturn;
|
|
}
|
|
|
|
HRESULT
|
|
COMHOOK(IShellLinkW, Resolve)( PVOID pThis, HWND hwnd, DWORD fFlags )
|
|
{
|
|
HRESULT hrReturn = E_FAIL;
|
|
_pfn_IShellLinkW_Resolve pfnOld;
|
|
|
|
pfnOld = (_pfn_IShellLinkW_Resolve) ORIGINAL_COM(IShellLinkW, Resolve, pThis);
|
|
|
|
if( fFlags & SLR_NO_UI )
|
|
{
|
|
hwnd = NULL;
|
|
}
|
|
|
|
if( pfnOld )
|
|
{
|
|
hrReturn = (*pfnOld)( pThis, hwnd, fFlags );
|
|
}
|
|
|
|
return hrReturn;
|
|
}
|
|
|
|
/*++
|
|
|
|
Register hooked functions
|
|
|
|
--*/
|
|
|
|
HOOK_BEGIN
|
|
APIHOOK_ENTRY_COMSERVER(SHELL32)
|
|
|
|
COMHOOK_ENTRY(ShellLink, IShellLinkA, Resolve, 19)
|
|
COMHOOK_ENTRY(ShellLink, IShellLinkW, Resolve, 19)
|
|
HOOK_END
|
|
|
|
IMPLEMENT_SHIM_END
|
|
|