1

在 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 函数的其他部分......

4

1 回答 1

1

唔,

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

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

看起来比简单的弯路钩住更棘手,但可以实现。

于 2013-08-07T15:51:58.347 回答