在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函数的其他部分....
答案 0 :(得分:1)
嗯,
看来我在Windows 7上应该做的事情是挂钩IFileOperation接口:
http://stuani.blogspot.co.uk/2010/01/ifileoperation-hook-under-vistaseven.html
看起来比简单的弯路更难,但可以实现。