PopEndMirroring
NTSTATUS __stdcall PopEndMirroring(UINT64 PassNumber){
unsigned __int64 v1;
NTSTATUS v2;
int v3;
int v4;
NTSTATUS v5;
bool v6;
NTSTATUS v7;
VOID *v9;
VOID *v10;
_GROUP_AFFINITY Affinity;
_KAFFINITY_ENUMERATION_CONTEXT Context;
_KDPC Dpc;
UINT64 ProcIndex;
v1 = (unsigned int)PassNumber;
*(_DWORD *)(&Context.CurrentIndex + 1) = 0;
*(&Context.CurrentIndex + 3) = 0;
Affinity = 0i64;
memset(&Dpc, 0i64, sizeof(Dpc));
LODWORD(ProcIndex) = 0;
if( !(_DWORD)v1 )
{
if( (BYTE4(xmmword_140CFB490) & 1) != 0 )
EtwKernelMemoryRundown();
KeSetEvent(qword_140C50438, 0, 1u);
KeWaitForSingleObject((UINT64)qword_140C50438 + 24, 0, 0, 0, 0i64);
v2 = PopBuildMemoryImageHeader(HiberContext, 0i64);
if( v2 >= 0 )
{
Affinity.Reserved[1] = 0;
*(_DWORD *)&Affinity.Group = (unsigned __int16)((unsigned int)KiProcessorIndexToNumberMappingTable[0] >> 6);
Affinity.Mask = 1i64 << (KiProcessorIndexToNumberMappingTable[0] & 0x3F);
Affinity.Reserved[2] = 0;
KeSetSystemGroupAffinityThread(&Affinity, 0i64);
KeGetCurrentIrql();
__writecr8(2ui64);
memset(&qword_140C503A0, 0i64, 0x50u);
dword_140C503D0 = KeNumberProcessors_0;
HIDWORD(qword_140C503D8) = KeNumberProcessors_0;
LODWORD(qword_140C503D8) = 1;
if( ((unsigned __int8)&stru_140C503E0 & 0xF) != 0 )
RtlRaiseStatus(-2147483646);
stru_140C503E0 = 0i64;
KeInitializeDpc(&Dpc, PopInvokeStateHandlerTargetProcessor, &qword_140C503A0);
Context.CurrentMask = KeActiveProcessors.Bitmap[0];
Context.Affinity = &KeActiveProcessors;
Dpc.Importance = 2;
Context.CurrentIndex = 0;
while( 1 )
{
KeEnumerateNextProcessor(&ProcIndex, &Context);
if( v3 )
break;
if( (_DWORD)ProcIndex )
{
v4 = dword_140C503D4;
if( !Dpc.DpcData )
Dpc.Number = ProcIndex + 1280;
KeInsertQueueDpc((UINT64)&Dpc, 0i64, 0i64);
while( v4 == dword_140C503D4 )
;
}
}
goto LABEL_19;
}
goto LABEL_23;
}
if( (_DWORD)v1 != 1 )
{
v2 = -1073741823;
goto LABEL_23;
}
v2 = *((_DWORD *)HiberContext + 47);
if( v2 < 0
|| (v2 = PopInvokeSystemStateHandler(PopHibernatePowerStateHandlerType, (POP_HIBER_CONTEXT *)HiberContext), v2 < 0) )
{
LABEL_23:
IoAddTriageDumpDataBlock(&PopAction, (_BYTE *)0x1C8);
if( qword_140C23298 )
IoAddTriageDumpDataBlock(qword_140C23298, (_BYTE *)0x1D8);
if( HiberContext )
{
IoAddTriageDumpDataBlock(HiberContext, (_BYTE *)0x1C8);
v9 = (VOID *)*((_QWORD *)HiberContext + 21);
if( v9 )
IoAddTriageDumpDataBlock(v9, (_BYTE *)0x178);
v10 = (VOID *)*((_QWORD *)HiberContext + 25);
if( v10 )
IoAddTriageDumpDataBlock(v10, (_BYTE *)0x3E0);
}
KeBugCheckEx(0xA0u, (PVOID)9, (PVOID)v2, (PVOID)v1, 0i64);
}
if( PoResumeFromHibernate )
v2 = 1073742484;
LABEL_19:
v5 = v2;
v6 = v2 == 1073742484;
v7 = 0;
if( v6 )
return v5;
return v7;
}Referenced by:
No references.