Example 82-Retrieve 64-bit monotonic counter value.

5.2.11 GetNextMonotonicCount()

This service provides a 64-bit monotonically increasing counter that is guaranteed to provide a higher value each time GetNextMonotonicCount() is called. This 64-bit counter is not related to any time source, so this service should never be used for delays, polling, or for any type of time measurement.

GetNextHighMonotonicCount() is related to this same 64-bit monotonic counter, but that service is only intended to be used by operating systems after ExitBootServices() is called to manage the non-volatile upper 32-bits of the 64-bit monotonic counter. A UEFI Driver should only use the UEFI Boot Service GetNextMonotonicCount() because it manages all 64-bits of the monotonic counter before ExitBootServices() is called.

The code fragment below show how GetNextMonotonicCount() can be used to retrieve the next 64-bit value for the monotonic counter.

#include <Uefi.h>
#include <Library/UefiBootServicesTableLib.h>

EFI_STATUS  Status;
UINT64      MonotonicCount;

Status = gBS->GetNextMonotonicCount (&MonotonicCount);
if (EFI_ERROR (Status)) {
  return Status;
}