Deviare2 перехватывает API WriteFile дважды только для одной записи

Deviare2 - это профессиональная библиотека хуков API в MS Windows. Она проста в использовании и мощна. Но когда я хочу подключить WrtieFile с помощью фиктивного писателя C#, я обнаружил, что он дважды переписал WriteFile. Я пытаюсь подать в суд на API Monitor на фиктивного писателя Hook. API Monitor просто подключить один для каждого вызова записи. Это проводной!

код подключения:

spyMgr = new NktSpyMgr();

NktProcess _process = GetProcess("DummyWriter.exe");

while (_process == null)
{
    Console.WriteLine("wait for process start...");
    System.Threading.Thread.Sleep(10);
    _process = GetProcess("DummyWriter.exe");
}

hookDllGetClassObj = spyMgr.CreateHook("kernel32.dll!WriteFile", (int)(eNktHookFlags.flgOnlyPreCall));

hookDllGetClassObj.Attach(_process, true);

hookDllGetClassObj.Hook(true);
hookDllGetClassObj.OnFunctionCalled += OnDllGetClassObjectCalled;

пустышка напиши:

string key = "";

Task.Factory.StartNew(() => {
    int index=1;
    while (key == "")
    {
        using (StreamWriter sw = new StreamWriter("d:\\dummy.txt",true))
        {
            string str = string.Format("{0}:oh gotcha!", index);
            Console.WriteLine(str);
            sw.WriteLine(str);
            index++;
        }

        Thread.Sleep(500);
    }
});

key = Console.ReadLine();

1 ответ

API не подключаются дважды, но обратный вызов вызывается два раза. Один до вызова исходного API, а затем после.

Вы должны проверить NktHookCallInfo параметр и посмотреть, если вы находитесь в pre или postCall, чтобы вы могли вносить изменения в параметры и результат.

Кстати: Deviare InProc - это движок, который выполняет более классический стиль подключения.

Другие вопросы по тегам