I'm fairly certain TimerDiff() users QueryPerformanceCounter. Check out my results calling those functions directly:
$F = DllCall("Kernel32.dll", "Int", "QueryPerformanceFrequency", "int64*", "")
$S = DllCall("Kernel32.dll", "Int", "QueryPerformanceCounter", "int64*", "")
sleep(5000)
$E = DllCall("Kernel32.dll", "Int", "QueryPerformanceCounter", "int64*", "")
; MsgBox(0,"", $E[1] & " " & $S[1] & " " & $F[1] & " " & ($E[1] - $S[1])/$F[1])
ConsoleWrite("Time difference using QueryPerformanceCounter:" & @CRLF & "Start Tick=" & $S[1] & " End Tick=" & $E[1] & " " & " Difference= " & $S[1]-$E[1] & " " & "Frequency=" & $F[1] & @CRLF & "(E-S)/F= " & ($E[1] - $S[1])/$F[1] & " Seconds" & @CRLF)
Results Without USB stick inserted:
>"C:\Program Files\AutoIt3\SciTE\..\autoit3.exe" /ErrorStdOut "C:\Drivers\SharpTimerTest\AutoIt_QueryPerformanceCounter.au3"
Time difference using QueryPerformanceCounter:
Start Tick=5915525973700 End Tick=5916346056550 Difference= -820082850 Frequency=3325030000
(E-S)/F= 0.246639233330226 Seconds
>Exit code: 0 Time: 0.303
Results With USB stick inserted:
>"C:\Program Files\AutoIt3\SciTE\..\autoit3.exe" /ErrorStdOut "C:\Drivers\SharpTimerTest\AutoIt_QueryPerformanceCounter.au3"
Time difference using QueryPerformanceCounter:
Start Tick=6232139910610 End Tick=6248753583120 Difference= -16613672510 Frequency=3325030000
(E-S)/F= 4.99654815445274 Seconds
>Exit code: 0 Time: 5.248