+ ULONG Multiplier;
+ LARGE_INTEGER TickCount;
+
+ /* Loop until we get a perfect match */
+ for (;;)
+ {
+ /* Read the tick count value */
+ TickCount.HighPart = SharedUserData->TickCount.High1Time;
+ TickCount.LowPart = SharedUserData->TickCount.LowPart;
+ if (TickCount.HighPart == SharedUserData->TickCount.High2Time) break;
+ YieldProcessor();
+ }
+
+ /* Get the multiplier */
+ Multiplier = SharedUserData->TickCountMultiplier;
+
+ /* Convert to milliseconds and return */
+ return (Int64ShrlMod32(UInt32x32To64(Multiplier, TickCount.LowPart), 24) +
+ (Multiplier * (TickCount.HighPart << 8)));