2013-08-07 4 views
1

В Windows XP можно было подключить проводник со следующим shell32 крючком:Почему не может Detours больше не зацепить функции shell32.dll в Windows, 7+

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

Тот факт, что объезд прилагается, и он все еще перескакивает на вашу функцию, подразумевает, что проблема - это нечто внутри, а не вне вашей функции, не так ли? – JAB

+0

Если я поставил точку останова в своей функции, он никогда не срабатывает ... так что нет, я так не думаю. Даже если я делаю что-то тривиальное там, например OutputDebugString, он никогда не печатает. И все же, несмотря на это, я вижу, как исследователь вводит настоящую функцию в procmon ... – Benj

ответ