POP_SLEEP_CHECKPOINT

The defined values of the POP_SLEEP_CHECKPOINT enumeration (formally _POP_SLEEP_CHECKPOINT) mark the kernel’s progress at putting the system in and out of sleep. This diagnostic aid was introduced for the 1607 release of Windows 10.

The essential work at each new checkpoint is to record the latest value in the firmware. Then, if the transition to or from sleep does not complete, the last recorded checkpoint should be retrievable when Windows next starts. This record is kept as the one-byte value of the SystemSleepCheckpoint variable in the {F4B5FD1A-2F14-451D-9AA9-D8F5E7117101} namespace. The checkpoint’s retrieval when Windows next starts shows as a parameter, named Checkpoint, in the event, numbered 41, that the Microsoft-Windows-Kernel-Power event provider writes to the System log to report that the “system has rebooted without cleanly shutting down first.”

In what surely must be a rare circumstance, the kernel may judge that it cannot safely try setting a new checkpoint into the firmware variable. This then is fatal to Windows. It shows as the bug check INTERNAL_POWER_ERROR (0x000000A0) with the first parameter set to 0x0000010F. The proposed new value of the checkpoint is then the second parameter.

The 1903 release brought the elaboration that the kernel may itself stop a power transition for taking too long. Expiry of a watchdog timer shows as the bug check INTERNAL_POWER_ERROR but now with the first parameter as 0x0000000F, 0x000000F0 or 0x000000F1 (depending on the WatchdogState member of the POP_POWER_ACTION). In these cases, the mostly recently set value of the checkpoint becomes the third bug-check parameter. So that this can be done, the checkpoint is written not only to the firmware but is also kept by the kernel as internal variable. Thus is the POP_SLEEP_CHECKPOINT enumeration also the type of the internal variable PopSleepCheckpoint. As with other internal variables concerned with power management, this can be useful to know when debugging.

Documentation Status

The POP_SLEEP_CHECKPOINT enumeration is not documented.

Not only is the POP_SLEEP_CHECKPOINT not documented as a type, but its possible values are not documented even for their possibly useful interpretation as a parameter for either the power event or the bug check. Perhaps the argument is that the parameter can be useful, else why trouble to code for saving and retrieving it, but its one intended interpreter is Microsoft.

Online documentation of the INTERNAL_POWER_ERROR bug check, as observed today, 16th September 2022, goes no further than noting cases in which the second or third parameter is the “sleep checkpoint most recently reached.” These cases aren’t yet listed on the corresponding page in the offline Bug Check Reference from the Debugging Tools for Windows as distributed with the Software Development Kit even as recently as for the 2004 edition of Windows 10.

Values

The values and names below are from type information in public symbol files for the kernel, starting with the 1607 release of Windows 10.

Value Name Versions
0x00 PopSleepCheckpointInvalid 1607 and higher
0x01 PopSleepCheckpointPowerTransitionStart 1607 and higher
0x02 PopSleepCheckpointSuspendAppsBefore 1607 and higher
0x03 PopSleepCheckpointSuspendAppsAfter 1607 and higher
0x04 PopSleepCheckpointSuspendServicesBefore 1607 and higher
0x05 PopSleepCheckpointSuspendServicesAfter 1607 and higher
0x06 PopSleepCheckpointNotifySuperfetchBefore 1607 and higher
0x07 PopSleepCheckpointNotifySuperfetchAfter 1607 and higher
0x08 PopSleepCheckpointNotifyCallbacksBefore 1607 and higher
0x09 PopSleepCheckpointNotifyCallbacksAfter 1607 and higher
0x0A PopSleepCheckpointSleepTransactionCommitted 1607 and higher
0x0B PopSleepCheckpointQueryDriversBefore 1607 and higher
0x0C PopSleepCheckpointQueryDriversAfter 1607 and higher
0x0D PopSleepCheckpointAllocatingHiberContext 1607 and higher
0x0E PopSleepCheckpointSuspendDriversBefore 1607 and higher
0x0F not defined  
0x10 PopSleepCheckpointPreSleepNotification 1607 and higher
0x11 PopSleepCheckpointInterruptsDisabledBegin 1607 and higher
0x12 PopSleepCheckpointInvokeHandlerBefore 1607 and higher
0x13 PopSleepCheckpointSaveHiberContextBegin 1607 and higher
0x14 PopSleepCheckpointInitializeDumpStackFailed 1607 and higher
0x15 PopSleepCheckpointHiberWriteFailed 1607 and higher
0x16 PopSleepCheckpointHiberFileTooSmall 1607 and higher
0x17 PopSleepCheckpointSaveHiberContextFailed 1607 and higher
0x18 PopSleepCheckpointSaveHiberContextEnd 1607 and higher
0x19 PopSleepCheckpointHiberKernelHandoff 1607 and higher
0x1A PopSleepCheckpointInvokeHandlerAfter 1607 and higher
0x1B PopSleepCheckpointReadHiberfileBefore 1607 and higher
0x1C PopSleepCheckpointInitializeDumpStackForReadFailed 1607 and higher
0x1D PopSleepCheckpointHiberReadFailed 1607 and higher
0x1E PopSleepCheckpointChecksumFailure 1607 and higher
0x1F PopSleepCheckpointDecompressionFailed 1607 and higher
0x20 PopSleepCheckpointReadHiberfileAfter 1607 and higher
0x21 PopSleepCheckpointInterruptsDisabledEnd 1607 and higher
0x22 not defined  
0x23 not defined  
0x24 PopSleepCheckpointWakeDriversAfter 1607 and higher
0x25 PopSleepCheckpointResumeAppsBefore 1607 and higher
0x26 PopSleepCheckpointResumeAppsAfter 1607 and higher
0x27 PopSleepCheckpointResumeServicesBefore 1607 and higher
0x28 PopSleepCheckpointResumeServicesAfter 1607 and higher
0x29 PopSleepCheckpointPowerTransitionEnd 1607 and higher
0x2A PopSleepCheckpointAllocatingHiberContextNoFileObject 1809 and higher
0x2B PopSleepCheckpointAllocatingHiberContextGetDumpStackFailed 1809 and higher
0x2C PopSleepCheckpointAllocatingHiberContextLoadResumeContextFailed 1809 and higher
0x2D PopSleepCheckpointAllocatingHiberContextBcdOpenFailed 1809 and higher
0x2E PopSleepCheckpointAllocatingHiberContextEstablishResumeObjectFailed 1809 and higher
0x2F PopSleepCheckpointAllocatingHiberContextSetPendingResumeFailed 1809 and higher
0x30 PopSleepCheckpointAllocatingHiberContextAllocateIoPagesPagesFailed 1809 and higher
0x31 PopSleepCheckpointAllocatingHiberContextAdapterBuffersInvalid1 1809 and higher
0x32 PopSleepCheckpointAllocatingHiberContextAllocateDumpPagesFailed 1809 and higher
0x33 PopSleepCheckpointAllocatingHiberContextAdapterBuffersInvalid2 1809 and higher
0x34 PopSleepCheckpointAllocatingHiberContextUnHibernatedMdlFailed 1809 and higher
0x35 PopSleepCheckpointAllocatingHiberContextSecureResourcesFailed 1809 and higher
0x36 PopSleepCheckpointPrepareSleepBefore 2004 and higher
0x37 PopSleepCheckpointPrepareSleepAfter 2004 and higher
0x38 PopSleepCheckpointBootstatAvailable 2004 and higher
0x2A (1607 to 1803);
0x36 (1809 to 1903);
0x39
PopSleepCheckpointMaximum 1607 and higher