Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

99 lines
1.8 KiB

/*++
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