В 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 ....
Тот факт, что объезд прилагается, и он все еще перескакивает на вашу функцию, подразумевает, что проблема - это нечто внутри, а не вне вашей функции, не так ли? – JAB
Если я поставил точку останова в своей функции, он никогда не срабатывает ... так что нет, я так не думаю. Даже если я делаю что-то тривиальное там, например OutputDebugString, он никогда не печатает. И все же, несмотря на это, я вижу, как исследователь вводит настоящую функцию в procmon ... – Benj