#include <stdio.h>
#include <windows.h>
typedef int (__stdcall *NTSETTIMER)(IN ULONG RequestedResolution, IN BOOLEAN Set, OUT PULONG ActualResolution );
typedef int (__stdcall *NTQUERYTIMER)(OUT PULONG   MinimumResolution, OUT PULONG MaximumResolution, OUT PULONG CurrentResolution );

int main()
{
	DWORD min_res = 0, max_res = 0, cur_res = 0, ret = 0;
	HMODULE  hdll = NULL;
	hdll = GetModuleHandle("ntdll.dll");
	NTSETTIMER AddrNtSetTimer = 0;
	NTQUERYTIMER AddrNtQueyTimer = 0;
	
	AddrNtSetTimer = (NTSETTIMER) GetProcAddress(hdll, "NtSetTimerResolution");
	AddrNtQueyTimer = (NTQUERYTIMER)GetProcAddress(hdll, "NtQueryTimerResolution");

	while (1)
	{
		ret = AddrNtQueyTimer(&min_res, &max_res, &cur_res);
		printf("min_res = %d, max_res = %d, cur_res = %d\n",min_res, max_res, cur_res);
		Sleep(5);
		ret = AddrNtSetTimer(10000, 1, &cur_res);
		Sleep(5);
		ret = AddrNtSetTimer(10000, 0, &cur_res);
		Sleep(5);
		ret = AddrNtSetTimer(50000, 1, &cur_res);
		Sleep(5);
		ret = AddrNtSetTimer(50000, 0, &cur_res);
		Sleep(5);
		ret = AddrNtSetTimer(100000, 1, &cur_res);
		Sleep(5);
		ret = AddrNtSetTimer(100000, 0, &cur_res);
		Sleep(5);
	}

	return 0;
}

