VC ++:如何挂钩/取消挂钩特定的单个线程

时间:2010-01-25 08:51:43

标签: visual-c++

我们正在将GLOALLY的TextOut(),ExtTextOut()和DrawText()方法挂钩。

即。 hhook = SetWindowsHookEx(WH_CBT,function_address,module_handle,0);

但是我们想要挂钩/取消挂钩特定的exe。有人可以告诉我们如何检查所有现有的线程并获得所需的exe和钩子/解钩器。

请提供帮助。

谢谢

1 个答案:

答案 0 :(得分:0)

您可以使用PSAPI专门EnumProcesses

枚举流程

您需要从SDK #include "psapi.h"并将PSAPI.lib添加到链接器输入。

例如:

DWORD aiPID[1000], iCb=1000;
DWORD iCbneeded = 0;

if (!EnumProcesses(aiPID, iCb, &iCbneeded)) return(E_FAIL);

int iNumProc=iCbneeded/sizeof(DWORD);
for(int i=0; i < iNumProc; i++)
{
    // First, get a handle to the process
    HANDLE hProc = OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_VM_READ, FALSE, aiPID[i]);
    if (!hProc) continue;

    TCHAR szName[MAX_PATH] = _T("<unknown>");

    HINSTANCE hMod = NULL;
    if (EnumProcessModules(hProc, &hMod, sizeof(hMod), &iCbneeded)) 
    {
        GetModuleFileNameEx(hProc, hMod, (LPTSTR)szName, MAX_PATH);
    }

    CloseHandle(hProc);
}

编辑:对不起 - 这只会为您提供进程列表...以获取每个查看ListProcessThreads的线程,为每个枚举进程传入PID。