PopWriteImageHeader
VOID __stdcall PopWriteImageHeader(
_POP_HIBER_CONTEXT *HiberContext,
PO_MEMORY_IMAGE *MemImage,
UINT64 PoWakeCheck,
UINT64 StartCount){
unsigned __int64 BugCheckParameter4;
__int64 WakeCheck;
unsigned __int64 v8;
UINT64 PerformanceCounter;
unsigned int v10;
__int64 v11;
__int64 v12;
__int64 v13;
_PO_HIBER_PERF *p_PerfInfo;
_OWORD *v15;
__int128 v16;
unsigned int v17;
void(*FinishRoutine)(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, (PVOID)0x109, (PVOID)0xA, (PVOID)MemImage->WakeCheck, (PVOID)BugCheckParameter4);
}
v8 = __rdtsc();
*(&stru_140C23628 + 53) = (((unsigned __int64)HIDWORD(v8) << 32) | (unsigned int)v8) - StartCount;
*(&stru_140C23628 + 219) = (dword_140C23460 >> 4) - 1;
PerformanceCounter = KeQueryPerformanceCounter(0i64);
v10 = 0;
for( *(&stru_140C23628 + 59) = PerformanceCounter;
v10 < HiberContext->ProcessorCount;
*(&stru_140C23628 + 55) += *(unsigned __int64 *)((char *)&HiberContext->ProcessorContext->SharedBufferTicks + v11) )
{
v11 = v10++;
v11 <<= 7;
*(&stru_140C23628 + 103) += *(unsigned __int64 *)((char *)&HiberContext->ProcessorContext->PagesProcessed + v11);
*(&stru_140C23628 + 54) += *(unsigned __int64 *)((char *)&HiberContext->ProcessorContext->CompressTicks + v11);
}
*(&stru_140C23628 + 105) = *(&stru_140C23628 + 108);
*(&stru_140C23628 + 107) = *(&stru_140C23628 + 218);
*(&stru_140C23628 + 108) += *(&stru_140C23628 + 104);
v12 = *(&stru_140C23628 + 102);
*(&stru_140C23628 + 218) += *(&stru_140C23628 + 212);
MemImage->NumPagesForLoader = *(&stru_140C23628 + 102);
if( byte_140C23481 )
MemImage->NumPagesForLoader = *(&stru_140C23628 + 103) + v12;
v13 = 3i64;
p_PerfInfo = &MemImage->PerfInfo;
v15 = (_OWORD *)((char *)&stru_140C23628 + 400);
do
{
*(_OWORD *)&p_PerfInfo->HiberIoTicks = *v15;
*(_OWORD *)&p_PerfInfo->HiberInitTicks = v15[1];
*(_OWORD *)&p_PerfInfo->HiberCompressTicks = v15[2];
*(_OWORD *)&p_PerfInfo->HiberChecksumTicks = v15[3];
*(_OWORD *)&p_PerfInfo->TotalHibernateTime.anonymous_0.LowPart = v15[4];
*(_OWORD *)&p_PerfInfo->POSTTime = v15[5];
*(_OWORD *)&p_PerfInfo->ResumeAppTicks = v15[6];
p_PerfInfo = (_PO_HIBER_PERF *)((char *)p_PerfInfo + 128);
v16 = v15[7];
v15 += 8;
*(_OWORD *)&p_PerfInfo[-1].AdjustedTotalResumeTime = v16;
--v13;
}
while( v13 );
*(_OWORD *)&p_PerfInfo->HiberIoTicks = *v15;
*(_OWORD *)&p_PerfInfo->HiberInitTicks = v15[1];
*(_OWORD *)&p_PerfInfo->HiberCompressTicks = v15[2];
*(_OWORD *)&p_PerfInfo->HiberChecksumTicks = v15[3];
*(_OWORD *)&p_PerfInfo->TotalHibernateTime.anonymous_0.LowPart = v15[4];
*(_OWORD *)&p_PerfInfo->POSTTime = v15[5];
*(_OWORD *)&p_PerfInfo->ResumeAppTicks = v15[6];
p_PerfInfo->ResumeLibraryInitTicks = *((_QWORD *)v15 + 14);
MemImage->Signature = 1380075848;
tcpxsum(0i64);
MemImage->CheckSum = v17;
PopWriteHiberPages(HiberContext, MemImage, 1ui64, 0i64);
FinishRoutine = HiberContext->DumpStack->Init.FinishRoutine;
if( FinishRoutine )
FinishRoutine();
}Referenced by:
PopSaveHiberContext