PopWriteImageHeader

VOID __fastcall PopWriteImageHeader(
        _POP_HIBER_CONTEXT *HiberContext,
        PO_MEMORY_IMAGE *MemImage,
        UINT64 PoWakeCheck,
        UINT64 StartCount){
  ULONG_PTR BugCheckParameter4; 
  __int64 WakeCheck; 
  unsigned __int64 v8; 
  LARGE_INTEGER PerformanceCounter; 
  unsigned int v10; 
  __int64 v11; 
  __int64 v12; 
  __int64 v13; 
  _PO_HIBER_PERF *p_PerfInfo; 
  UINT64 *v15; 
  __int128 v16; 
  unsigned int v17; 
  void(*v18)(void); 
  BugCheckParameter4 = (unsigned int)PoWakeCheck;
  WakeCheck = MemImage->WakeCheck;
  if( (_DWORD)WakeCheck != (_DWORD)PoWakeCheck )
  {
    DbgPrint("MemImage->WakeCheck %lx doesn't make PoWakeCheck %lx\n", WakeCheck, (unsigned int)PoWakeCheck);
    KeBugCheckEx(0xA0u, 0x109ui64, 0xAui64, MemImage->WakeCheck, BugCheckParameter4);
  }
  v8 = __rdtsc();
  qword_140C237D0 = (((unsigned __int64)HIDWORD(v8) << 32) | (unsigned int)v8) - StartCount;
  dword_140C23994 = ((unsigned int)dword_140C23460 >> 4) - 1;
  PerformanceCounter = KeQueryPerformanceCounter(0i64);
  v10 = 0;
  for( stru_140C23800 = PerformanceCounter;
        v10 < HiberContext->ProcessorCount;
        qword_140C237E0 += *(unsigned __int64 *)((char *)&HiberContext->ProcessorContext->SharedBufferTicks + v11) )
  {
    v11 = v10++;
    v11 <<= 7;
    qword_140C23960 += *(unsigned __int64 *)((char *)&HiberContext->ProcessorContext->PagesProcessed + v11);
    qword_140C237D8 += *(unsigned __int64 *)((char *)&HiberContext->ProcessorContext->CompressTicks + v11);
  }
  qword_140C23970 = qword_140C23988;
  qword_140C23980 = (unsigned int)dword_140C23990;
  qword_140C23988 += qword_140C23968;
  v12 = qword_140C23958;
  dword_140C23990 += qword_140C23978;
  MemImage->NumPagesForLoader = qword_140C23958;
  if( byte_140C23481 )
    MemImage->NumPagesForLoader = qword_140C23960 + v12;
  v13 = 3i64;
  p_PerfInfo = &MemImage->PerfInfo;
  v15 = &qword_140C237B8;
  do
  {
    *(_OWORD *)&p_PerfInfo->HiberIoTicks = *(_OWORD *)v15;
    *(_OWORD *)&p_PerfInfo->HiberInitTicks = *((_OWORD *)v15 + 1);
    *(_OWORD *)&p_PerfInfo->HiberCompressTicks = *((_OWORD *)v15 + 2);
    *(_OWORD *)&p_PerfInfo->HiberChecksumTicks = *((_OWORD *)v15 + 3);
    *(_OWORD *)&p_PerfInfo->TotalHibernateTime.LowPart = *((_OWORD *)v15 + 4);
    *(_OWORD *)&p_PerfInfo->POSTTime = *((_OWORD *)v15 + 5);
    *(_OWORD *)&p_PerfInfo->ResumeAppTicks = *((_OWORD *)v15 + 6);
    p_PerfInfo = (_PO_HIBER_PERF *)((char *)p_PerfInfo + 128);
    v16 = *((_OWORD *)v15 + 7);
    v15 += 16;
    *(_OWORD *)&p_PerfInfo[-1].AdjustedTotalResumeTime = v16;
    --v13;
  }
  while( v13 );
  *(_OWORD *)&p_PerfInfo->HiberIoTicks = *(_OWORD *)v15;
  *(_OWORD *)&p_PerfInfo->HiberInitTicks = *((_OWORD *)v15 + 1);
  *(_OWORD *)&p_PerfInfo->HiberCompressTicks = *((_OWORD *)v15 + 2);
  *(_OWORD *)&p_PerfInfo->HiberChecksumTicks = *((_OWORD *)v15 + 3);
  *(_OWORD *)&p_PerfInfo->TotalHibernateTime.LowPart = *((_OWORD *)v15 + 4);
  *(_OWORD *)&p_PerfInfo->POSTTime = *((_OWORD *)v15 + 5);
  *(_OWORD *)&p_PerfInfo->ResumeAppTicks = *((_OWORD *)v15 + 6);
  p_PerfInfo->ResumeLibraryInitTicks = v15[14];
  MemImage->Signature = 1380075848;
  tcpxsum(0i64);
  MemImage->CheckSum = v17;
  PopWriteHiberPages(HiberContext, MemImage, 1ui64, 0i64);
  v18 = (void(*)(void))*((_QWORD *)HiberContext->DumpStack + 9);
  if( v18 )
    v18();
}

Referenced by:

PopSaveHiberContext