如何在Windows 10 2004中将计时器分辨率重置为默认值?

问题描述

我使用以下命令成功将计时分辨率更改为0.5ms:

#include <Windows.h>

extern "C" NTSYSAPI NTSTATUS NTAPI NtSetTimerResolution(ULONG DesiredResolution,BOOLEAN SetResolution,PULONG CurrentResolution);
extern "C" NTSYSAPI NTSTATUS NTAPI NtQueryTimerResolution(OUT PULONG MinimumResolution,OUT PULONG MaximumResolution,OUT PULONG CurrentResolution);

ULONG minimum_resolution;
ULONG maximum_resolution;
ULONG current_resolution;
NtQueryTimerResolution(&minimum_resolution,&maximum_resolution,&current_resolution);
NtSetTimerResolution(maximum_resolution,TRUE,&current_resolution);

但是,我无法将其恢复为原始值156250。

我的尝试:

NtQueryTimerResolution(&minimum_resolution,&current_resolution);

std::cout << "minimum = " << minimum_resolution << "\nmaximum = " << maximum_resolution << "\ncurrent = " << current_resolution << "\n";

auto result = NtSetTimerResolution(minimum_resolution,FALSE,&current_resolution);

std::cout << "after setting using FALSE,current = " << current_resolution << "\n";

NtQueryTimerResolution(&minimum_resolution,&current_resolution);

std::cout << "Now,minimum = " << minimum_resolution << "\nmaximum = " << maximum_resolution << "\ncurrent = " << default_resolution << "\n";

result = NtSetTimerResolution(minimum_resolution,&current_resolution);

std::cout << "after setting using TRUE,current = " << current_resolution << "\n";

产生以下输出

minimum = 156250
maximum = 5000
current = 4999
after setting using FALSE,current = 9999
Now,minimum = 156250
maximum = 5000
current = 9999
after setting using TRUE,current = 9999

奇怪的是,9999的值并不持久;连续调用会产生相同的输出(无需使用第一段代码设置计时器);即使重新启动也无法还原任何内容。我已确保Visual Studio和浏览器已关闭。使用timeBeginPeriod和timeEndPeriod也无济于事。

解决方法

NtQueryTimerResolution 之后再次调用 NtSetTimerResolution,然后打印日志。

另外,最好检查一下函数的结果。