Who changed my Platform Timer Resolution?


When you run powercfg /energy from an elevated command line you can get this:


 



Warnings


Platform Timer Resolution:Platform Timer Resolution


The default platform timer resolution is 15.6ms (15625000ns) and should be used whenever the system is idle. If the timer resolution is increased, processor power management technologies may not be effective. The timer resolution may be increased due to multimedia playback or graphical animations.










Current Timer Resolution (100ns units)


25000


Maximum Timer Period (100ns units)


156001


Platform Timer Resolution:Outstanding Timer Request


A program or service has requested a timer resolution smaller than the platform maximum timer resolution.













Requested Period


30000


Requesting Process ID


8308


Requesting Process Path


\Device\HarddiskVolume4\Playground7\DebugTest\Debug\DebugTest.exe


 


From a power consumption persective, having an elevated more frequent timer might not be the most optimal.


 


Then in the informational section you get this:


 



Platform Timer Resolution:Timer Request Stack


The stack of modules responsible for the lowest platform timer setting in this process.





























Requested Period



30000



Requesting Process ID



8308



Requesting Process Path



\Device\HarddiskVolume4\Playground7\DebugTest\Debug\DebugTest.exe



Calling Module Stack



\Device\HarddiskVolume2\Windows\SysWOW64\ntdll.dll



 



\Device\HarddiskVolume2\Windows\SysWOW64\winmm.dll



 



\Device\HarddiskVolume4\Playground7\DebugTest\Debug\DebugTest.exe



 



\Device\HarddiskVolume2\Windows\SysWOW64\kernel32.dll



 



\Device\HarddiskVolume2\Windows\SysWOW64\ntdll.dll


 


But that still doesn’t give me the source, nor what API to look for. One of the API calls that can be responsible for this is the timeBeginPeriod function. Then it becomes as easy as setting a breakpoint on winmm!timeBeginPeriod in WinDbg and voila. There might be more API calls that change the timer. [Edit] The more interesting API is obviously ntdll32!NtSetTimerResolution


Comments (1)

  1. chanjuan says:

    Then platform deside by oneself, not enybody else.