PopGetRemainingHibernateRangeDataSize

UINT64 __stdcall PopGetRemainingHibernateRangeDataSize(_POP_HIBER_CONTEXT *HiberContext){
  _LIST_ENTRY *p_ClonedRanges; 
  _LIST_ENTRY *NextCloneRange; 
  UINT64 v3; 
  signed __int64 v5; 
  UINT64 NextPreserve_low; 
  unsigned int NextForwardRunClear; 
  UINT64 StartingRunIndex; 

  LODWORD(StartingRunIndex) = 0;
  p_ClonedRanges = &HiberContext->ClonedRanges;
  NextCloneRange = HiberContext->NextCloneRange;
  v3 = 0i64;
  if( NextCloneRange != &HiberContext->ClonedRanges )
  {
    do
    {
      v5 = ((char *)NextCloneRange[2].Flink - (char *)NextCloneRange[1].Blink) << 12;
      NextCloneRange = NextCloneRange->Flink;
      v3 += v5;
      HiberContext->NextCloneRange = NextCloneRange;
    }
    while( NextCloneRange != p_ClonedRanges );
  }
  NextPreserve_low = LODWORD(HiberContext->NextPreserve);
  do
  {
    NextForwardRunClear = RtlFindNextForwardRunClear(
                            (INT64)HiberContext->CurrentMap,
                            NextPreserve_low,
                            &StartingRunIndex);
    NextPreserve_low = NextForwardRunClear + (unsigned int)StartingRunIndex;
    v3 += (unsigned __int64)NextForwardRunClear << 12;
  }
  while( NextForwardRunClear );
  if( ($415EA2EC7BC5C02D848E21B435E4F7C5 *)HiberContext->CurrentMap == &HiberContext->32 )
    v3 += (unsigned __int64)(unsigned int)RtlNumberOfClearBits((UINT64 *)&HiberContext->BootPhaseMap.SizeOfBitMap) << 12;
  return v3;
}

Referenced by:

PopRequestWrite
PopWriteHiberPages