为什么Detours不再在Windows 7+中挂钩shell32.dll函数

时间:2013-08-07 15:25:33

标签: windows detours shell32

在Windows XP中,可以使用以下shell32挂钩来挂钩资源管理器:

Real_SHFileOperation = (T_SHFileOperation) DetourFindFunction("shell32.dll", "SHFileOperationW");
nError = DetourAttach(&(PVOID&)Real_SHFileOperation, Detoured_SHFileOperation); 
if(nError != NO_ERROR)
{
    TRACE_ERROR(g_hTrace, "DetourAttach SHFileOperation Failed (%d)", nError);
}

出于某些原因,在Windows 7上,即使DetourAttach仍然返回成功,它也不再有效。我安装的所有其他挂钩(例如在ntdll.dll中)仍然有效但我在shell32.dll中创建的挂钩不再用。

我将Windbg附加到资源管理器并运行uf shell32!SHFileOperationW这表明该函数现在确实跳转到我的函数:

SHELL32!SHFileOperationW:
76239708 e9039658fc      jmp     myhook!Detoured_SHFileOperation (727c2d10)

然而,某种程度上,探险家会跳过我的绕道并进入SHFileOperation函数的其他部分....

1 个答案:

答案 0 :(得分:1)

嗯,

看来我在Windows 7上应该做的事情是挂钩IFileOperation接口:

http://stuani.blogspot.co.uk/2010/01/ifileoperation-hook-under-vistaseven.html

看起来比简单的弯路更难,但可以实现。