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