Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Вызов оригинальной функции после перехвата.Detours


Автор: freezeman 12.5.2012, 08:26
Всем привет!

Сделал перехват функции ReadFile, но после перехвата начинает работать оригинальная функция, что быть не должно...
Внедрил dll правильно в приложение. Помогите, пожалуйста!

Код:
Код

#include "stdafx.h"
#include <windows.h>
#include <detours.h>
#pragma comment (lib, "detours.lib")

static int (WINAPI * RealReadFile)(HANDLE,LPVOID,DWORD,LPDWORD,LPOVERLAPPED) = ReadFile;
BOOL WINAPI MyReadFile(HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped)
{
    //RealReadFile(hFile, lpBuffer, nNumberOfBytesToRead, lpNumberOfBytesRead, lpOverlapped);
        // Если расскоментировать RealReadFile, то вызывает оригинальную функцию, ту которую я перехватывал
    return TRUE; // возвращает true, чтение по сути не произошло, в приложении (куда внедрил dll) данные считываются...
}

BOOL WINAPI DllMain(HINSTANCE hinst, DWORD dwReason, LPVOID reserved)
{
    if (dwReason == DLL_PROCESS_ATTACH)
    {
        DetourTransactionBegin();
        DetourUpdateThread(GetCurrentThread());
        DetourAttach(&(PVOID&)RealReadFile, MyReadFile);
        DetourTransactionCommit();
    }
    else 
    if (dwReason == DLL_PROCESS_DETACH)
    {
        DetourTransactionBegin();
        DetourUpdateThread(GetCurrentThread());
        DetourDetach(&(PVOID&)RealReadFile, MyReadFile);
        DetourTransactionCommit();
    }
    return TRUE;
}


Автор: REZiaMIX 17.5.2012, 11:33
Для начала хорошо бы проверить что возвращает DetourTransactionCommit, как показано в примерах к Detours

Автор: freezeman 19.5.2012, 13:32
Цитата(REZiaMIX @ 17.5.2012,  11:33)
Для начала хорошо бы проверить что возвращает DetourTransactionCommit, как показано в примерах к Detours

Проблема была в том, что есть библиотека ntdll.dl через которую выполняются операции с файлов, в том числе и чтение, разумеется. Они и не перехватывались...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)