PopEndMirroring
NTSTATUS __stdcall PopEndMirroring(UINT64 PassNumber){
ULONG_PTR v1;
int v2;
int v3;
NTSTATUS v4;
bool v5;
NTSTATUS v6;
void *v8;
void *v9;
struct _GROUP_AFFINITY Affinity;
unsigned __int16 *v11[2];
__int16 v12;
int v13;
__int16 v14;
struct _KDPC Dpc;
int v16;
v1 = (unsigned int)PassNumber;
v13 = 0;
v14 = 0;
Affinity = 0i64;
memset((INT64)&Dpc, 0i64);
v16 = 0;
if( !(_DWORD)v1 )
{
if( (*((_BYTE *)&PerfGlobalGroupMask + 20) & 1) != 0 )
EtwKernelMemoryRundown();
KeSetEvent(PopSleeperHandoff, 0);
KeWaitForSingleObject(&PopSleeperHandoff[1], Executive, 0, 0, 0i64);
v2 = PopBuildMemoryImageHeader((_POP_HIBER_CONTEXT *)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((INT64)&PopHibernateSystemContext, 0i64);
dword_140C503D0 = KeNumberProcessors_0;
HIDWORD(qword_140C503D8) = KeNumberProcessors_0;
LODWORD(qword_140C503D8) = 1;
if( ((unsigned __int8)&xmmword_140C503E0 & 0xF) != 0 )
RtlRaiseStatus(-2147483646);
xmmword_140C503E0 = 0i64;
KeInitializeDpc(&Dpc, PopInvokeStateHandlerTargetProcessor, &PopHibernateSystemContext);
v11[1] = (unsigned __int16 *)KeActiveProcessors.Bitmap[0];
v11[0] = (unsigned __int16 *)&KeActiveProcessors;
Dpc.Importance = 2;
v12 = 0;
while( !(unsigned int)KeEnumerateNextProcessor(&v16, v11) )
{
if( v16 )
{
v3 = dword_140C503D4;
if( !Dpc.DpcData )
Dpc.Number = v16 + 1280;
KeInsertQueueDpc(&Dpc, 0i64, 0i64);
while( v3 == dword_140C503D4 )
;
}
}
goto LABEL_19;
}
goto LABEL_23;
}
if( (_DWORD)v1 != 1 )
{
v2 = -1073741823;
goto LABEL_23;
}
v2 = *(_DWORD *)(HiberContext + 188);
if( v2 < 0 || (v2 = PopInvokeSystemStateHandler(PopHibernatePowerStateHandlerType, HiberContext), v2 < 0) )
{
LABEL_23:
IoAddTriageDumpDataBlock(&PopAction, 0x1C8ui64);
if( qword_140C23298 )
IoAddTriageDumpDataBlock(qword_140C23298, 0x1D8ui64);
if( HiberContext )
{
IoAddTriageDumpDataBlock((PVOID)HiberContext, 0x1C8ui64);
v8 = *(void **)(HiberContext + 168);
if( v8 )
IoAddTriageDumpDataBlock(v8, 0x178ui64);
v9 = *(void **)(HiberContext + 200);
if( v9 )
IoAddTriageDumpDataBlock(v9, 0x3E0ui64);
}
KeBugCheckEx(0xA0u, 9ui64, v2, v1, 0i64);
}
if( PoResumeFromHibernate )
v2 = 1073742484;
LABEL_19:
v4 = v2;
v5 = v2 == 1073742484;
v6 = 0;
if( v5 )
return v4;
return v6;
}Referenced by:
No references.