1- #pragma once
2-
1+ #include " pch.h"
32#include " HookUtils.h"
43#include " StringUtils.h"
5- #include < Windows.h>
64
7- // 使用Windows钩子注入DLL
5+ // 使用Windows钩子注入DLL
86HRESULT InjectUsingHook (LPCWSTR dllPath, LPCWSTR functionName, DWORD threadId, int hookType)
97{
108 if (!dllPath || !functionName) {
@@ -25,14 +23,14 @@ HRESULT InjectUsingHook(LPCWSTR dllPath, LPCWSTR functionName, DWORD threadId, i
2523 HOOKPROC hookProc = NULL ;
2624
2725 if ((DWORD_PTR)ansiFunctionName <= 0xFFFF ) {
28- // 是序号
26+ // 是序号
2927 hookProc = (HOOKPROC)GetProcAddress (hHookDll, ansiFunctionName);
3028 }
3129 else {
32- // 是字符串指针
30+ // 是字符串指针
3331 hookProc = (HOOKPROC)GetProcAddress (hHookDll, ansiFunctionName);
3432
35- // 释放转换的字符串
33+ // 释放转换的字符串
3634 FreeConvertedString ((LPVOID)ansiFunctionName);
3735 }
3836
@@ -41,12 +39,12 @@ HRESULT InjectUsingHook(LPCWSTR dllPath, LPCWSTR functionName, DWORD threadId, i
4139 return HRESULT_FROM_WIN32 (ERROR_PROC_NOT_FOUND);
4240 }
4341
44- // 设置Windows钩子
42+ // 设置Windows钩子
4543 HHOOK hHook = SetWindowsHookExW (
46- hookType, // 钩子类型
47- hookProc, // 钩子过程
48- hHookDll, // 包含钩子过程的DLL
49- threadId // 目标线程ID(0表示全局钩子)
44+ hookType, // 钩子类型
45+ hookProc, // 钩子过程
46+ hHookDll, // 包含钩子过程的DLL
47+ threadId // 目标线程ID(0表示全局钩子)
5048 );
5149
5250 if (!hHook) {
@@ -55,37 +53,37 @@ HRESULT InjectUsingHook(LPCWSTR dllPath, LPCWSTR functionName, DWORD threadId, i
5553 return HRESULT_FROM_WIN32 (lastError);
5654 }
5755
58- // 触发钩子 - 发送消息到目标线程的消息队列
56+ // 触发钩子 - 发送消息到目标线程的消息队列
5957 if (threadId != 0 ) {
60- // 线程特定的钩子,发送线程消息
58+ // 线程特定的钩子,发送线程消息
6159 PostThreadMessageW (threadId, WM_NULL, 0 , 0 );
6260 }
6361 else {
64- // 全局钩子,发送广播消息
62+ // 全局钩子,发送广播消息
6563 PostMessageW (HWND_BROADCAST, WM_NULL, 0 , 0 );
6664 }
6765
68- // 等待一段时间确保DLL被加载
66+ // 等待一段时间确保DLL被加载
6967 Sleep (100 );
7068
71- // 卸载钩子(DLL已注入,不需要保持钩子)
69+ // 卸载钩子(DLL已注入,不需要保持钩子)
7270 UnhookWindowsHookEx (hHook);
7371
74- // 释放当前进程中的DLL(不影响已注入到目标进程的DLL)
72+ // 释放当前进程中的DLL(不影响已注入到目标进程的DLL)
7573 FreeLibrary (hHookDll);
7674
7775 return S_OK;
7876}
7977
80- // 检查钩子是否可用
78+ // 检查钩子是否可用
8179BOOL IsHookAvailable (int hookType)
8280{
83- // 临时钩子过程
81+ // 临时钩子过程
8482 HOOKPROC tempProc = [](int nCode, WPARAM wParam, LPARAM lParam) -> LRESULT {
8583 return CallNextHookEx (NULL , nCode, wParam, lParam);
8684 };
8785
88- // 尝试设置一个临时钩子来检查是否可用
86+ // 尝试设置一个临时钩子来检查是否可用
8987 HHOOK hHook = SetWindowsHookExW (hookType, tempProc, NULL , 0 );
9088
9189 if (hHook) {
@@ -96,7 +94,7 @@ BOOL IsHookAvailable(int hookType)
9694 return FALSE ;
9795}
9896
99- // 获取钩子类型名称
97+ // 获取钩子类型名称
10098LPCWSTR GetHookTypeName (int hookType)
10199{
102100 switch (hookType) {
@@ -129,4 +127,4 @@ LPCWSTR GetHookTypeName(int hookType)
129127 default :
130128 return L" UNKNOWN" ;
131129 }
132- }
130+ }
0 commit comments