2
2
#include < Windows.h>
3
3
#include < string>
4
4
5
- // 不再需要 timeapi.h 和 Winmm.lib
6
5
#pragma comment(lib, "User32.lib")
7
6
7
+ // =======================================================================
8
+ // ↓↓↓ 新增的宏定义 ↓↓↓
9
+ // =======================================================================
10
+ // 手动定义 NT_SUCCESS 宏,以避免包含完整的 WDK 头文件
11
+ // NTSTATUS 的成功代码都是非负数。
12
+ #define NT_SUCCESS (Status ) (((NTSTATUS)(Status)) >= 0 )
13
+ // =======================================================================
14
+
8
15
// 声明未公开的 Native API 函数
9
16
extern " C" NTSYSAPI NTSTATUS NTAPI NtSetTimerResolution (ULONG DesiredResolution, BOOLEAN SetResolution, PULONG CurrentResolution);
10
17
@@ -17,7 +24,7 @@ static HANDLE g_hThread = NULL;
17
24
DWORD WINAPI MonitorThread (LPVOID lpParam)
18
25
{
19
26
const DWORD currentProcessId = GetCurrentProcessId ();
20
- ULONG currentResolution; // 用于接收NtSetTimerResolution的返回值
27
+ ULONG currentResolution;
21
28
22
29
while (g_runThread)
23
30
{
@@ -35,14 +42,12 @@ DWORD WINAPI MonitorThread(LPVOID lpParam)
35
42
36
43
if (isForeground) {
37
44
if (!g_isTimerHigh) {
38
- // 请求 0.5ms 的精度 (5000 * 100ns = 0.5ms)
39
45
if (NT_SUCCESS (NtSetTimerResolution (5000 , TRUE , ¤tResolution))) {
40
46
g_isTimerHigh = true ;
41
47
}
42
48
}
43
49
} else {
44
50
if (g_isTimerHigh) {
45
- // 释放之前设置的精度
46
51
if (NT_SUCCESS (NtSetTimerResolution (5000 , FALSE , ¤tResolution))) {
47
52
g_isTimerHigh = false ;
48
53
}
@@ -51,7 +56,6 @@ DWORD WINAPI MonitorThread(LPVOID lpParam)
51
56
Sleep (250 );
52
57
}
53
58
54
- // 线程退出前,确保恢复计时器精度
55
59
if (g_isTimerHigh)
56
60
{
57
61
NtSetTimerResolution (5000 , FALSE , ¤tResolution);
@@ -63,7 +67,7 @@ DWORD WINAPI MonitorThread(LPVOID lpParam)
63
67
// 导出函数
64
68
extern " C" __declspec(dllexport) void PlaceholderExport () {}
65
69
66
- // DLL入口点 (黑名单逻辑保持不变)
70
+ // DLL入口点
67
71
BOOL APIENTRY DllMain (HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
68
72
{
69
73
if (ul_reason_for_call == DLL_PROCESS_ATTACH)
0 commit comments