PopWriteHeaderPages
INT64 __stdcall PopWriteHeaderPages(_POP_HIBER_CONTEXT *HiberContext, PO_MEMORY_IMAGE *MemImage){
_DWORD *IoPages;
_MDL *LoaderMdl;
unsigned int v6;
unsigned int v7;
_MDL *v8;
_DWORD *v9;
__int64 v10;
int Next;
unsigned int v12;
unsigned int v13;
unsigned int ResumeContextPages;
unsigned int v15;
__int64 ResumeContextCheck;
ULONG_PTR v17;
unsigned int v18;
unsigned int v19;
__int64 WakeCheck;
ULONG_PTR v21;
unsigned int v22;
__int64 v23;
ULONG_PTR v24;
IoPages = HiberContext->IoPages;
HiberContext->IoProgress = 0;
memset((INT64)IoPages, 0i64);
LoaderMdl = HiberContext->LoaderMdl;
if( !LoaderMdl )
return 3221225495i64;
v6 = PopHiberScratchPages;
v7 = LoaderMdl->ByteCount >> 12;
MemImage->NoFreePages = v7;
if( v7 < v6 )
return 3221225495i64;
v8 = HiberContext->LoaderMdl + 1;
if( v6 )
{
v9 = IoPages;
v10 = v6;
do
{
Next = (int)v8->Next;
v8 = (_MDL *)((char *)v8 + 8);
*v9++ = Next;
--v10;
}
while( v10 );
}
PopWriteHiberPages(
HiberContext,
IoPages,
(4 * (unsigned __int64)(unsigned int)PopHiberScratchPages + 4095) >> 12,
HiberContext->ResumeContextPages + 2);
MemImage->NoFreePages = PopHiberScratchPages;
tcpxsum(0i64);
MemImage->FreeMapCheck = v12;
MemImage->HiberResumeXhciHandoffSkip = PopHiberResumeXhciHandoffSkip;
if( HiberContext->ResumeContext )
{
HiberContext->IoProgress = 1;
memset((INT64)IoPages, 0i64);
memmove((UINT8 *)IoPages, (UINT8 *)HiberContext->ResumeContext, HiberContext->ResumeContextPages << 12);
tcpxsum(0i64);
MemImage->ResumeContextCheck = v13;
ResumeContextPages = HiberContext->ResumeContextPages;
MemImage->ResumeContextPages = ResumeContextPages;
PopWriteHiberPages(HiberContext, IoPages, ResumeContextPages, 2ui64);
tcpxsum(0i64);
ResumeContextCheck = MemImage->ResumeContextCheck;
v17 = v15;
if( (_DWORD)ResumeContextCheck != v15 )
{
DbgPrint("Checksum for resume context page changed from %lx to %lx\n", ResumeContextCheck, v15);
KeBugCheckEx(0xA0u, 3ui64, MemImage->ResumeContextCheck, v17, 0x1CDBui64);
}
}
HiberContext->IoProgress = 2;
memset((INT64)IoPages, 0i64);
memmove((UINT8 *)IoPages, (UINT8 *)HiberContext->WakeState, 0x5C0ui64);
tcpxsum(0i64);
MemImage->WakeCheck = v18;
PopWriteHiberPages(HiberContext, IoPages, 1ui64, 1ui64);
tcpxsum(0i64);
WakeCheck = MemImage->WakeCheck;
v21 = v19;
if( (_DWORD)WakeCheck != v19 )
{
DbgPrint("Checksum for context page changed from %lx to %lx\n", WakeCheck, v19);
KeBugCheckEx(0xA0u, 3ui64, MemImage->WakeCheck, v21, 0x1CF1ui64);
}
tcpxsum(0i64);
v23 = MemImage->WakeCheck;
v24 = v22;
if( (_DWORD)v23 != v22 )
{
DbgPrint("Checksum for partial context page %lx doesn't match full %lx\n", v23, v22);
KeBugCheckEx(0xA0u, 4ui64, MemImage->WakeCheck, v24, 0x1CF8ui64);
}
return 0i64;
}Referenced by:
PopSaveHiberContext