PopDirectedDripsInitializeBroadcast
NTSTATUS __stdcall PopDirectedDripsInitializeBroadcast(INT32 *a1){
char v2;
char v3;
CHAR v4;
int v5;
volatile signed __int32 *v6;
volatile signed __int32 *i;
unsigned int v8;
volatile signed __int32 *v9;
PFN_KE_GET_PROCESSOR_NUMBER_FROM_INDEX *v10;
int v11;
int v12;
char v13;
volatile signed __int32 *v14;
volatile signed __int32 *j;
__int64 v16;
__int64 v17;
volatile signed __int32 *v18;
PFN_KE_GET_PROCESSOR_NUMBER_FROM_INDEX *v20[2];
int v21;
int v22;
int v23;
int v24;
v24 = 0;
*(_OWORD *)v20 = 0i64;
v23 = 0;
v21 = 0;
_InterlockedOr(a1, 0);
v2 = 0;
PopDirectedDripsQueryMitigationStatus(&v23, &v24, &v21);
v3 = v21;
v4 = v21 | v24 & v23;
if( !(v21 | v24 & v23) )
return -1073741823;
IoControlPnpDeviceActionQueue(1u);
v6 = (volatile signed __int32 *)*(&PnpReplaceEvent + 831);
for( i = *(volatile signed __int32 **)(*(&PnpReplaceEvent + 831) + 8i64);
i;
i = (volatile signed __int32 *)*((_QWORD *)i + 1) )
{
v6 = i;
}
if( v6 != (volatile signed __int32 *)*(&PnpReplaceEvent + 831) )
{
do
{
_InterlockedAnd(v6 + 74, 0xFFFFFEFF);
*((_QWORD *)v6 + 92) = v6 + 182;
*((_QWORD *)v6 + 94) = v6 + 186;
*((_QWORD *)v6 + 93) = v6 + 186;
v8 = v6[190] & 0xFFF8FFFF;
*((_QWORD *)v6 + 91) = v6 + 182;
*((_DWORD *)v6 + 190) = v8;
*((_DWORD *)v6 + 191) = 0;
v9 = *(volatile signed __int32 **)v6;
if( *(_QWORD *)v6 )
{
do
{
v6 = v9;
v9 = (volatile signed __int32 *)*((_QWORD *)v9 + 1);
}
while( v9 );
}
else
{
v6 = (volatile signed __int32 *)*((_QWORD *)v6 + 2);
}
}
while( v6 != (volatile signed __int32 *)*(&PnpReplaceEvent + 831) );
v3 = v21;
}
PopFxBuildDirectedDripsCandidateDeviceList((_LIST_ENTRY *)v20);
v10 = v20[0];
v22 = 0;
v11 = 0;
if( (PFN_KE_GET_PROCESSOR_NUMBER_FROM_INDEX **)v20[0] == v20 )
goto LABEL_42;
do
{
v12 = PopDirectedDripsBuildBroadcastTreePartial((INT64)*(v10 - 103), v4, &v22);
v5 = v12;
if( v12 < 0 )
{
if( v12 != -1073741637 )
goto LABEL_43;
}
else
{
++v11;
}
v10 = (PFN_KE_GET_PROCESSOR_NUMBER_FROM_INDEX *)*v10;
}
while( v10 != (PFN_KE_GET_PROCESSOR_NUMBER_FROM_INDEX *)v20 );
if( v11 && (v13 = v22, v22) )
{
if( (v22 & 1) != 0 && (v3 & 1) == 0 )
{
_InterlockedOr(a1, 0x400u);
v3 = v21;
v13 = v22;
}
if( (v13 & 2) != 0 && (v3 & 2) == 0 )
{
v2 = 1;
v5 = -1073741267;
}
else
{
v14 = (volatile signed __int32 *)*(&PnpReplaceEvent + 831);
for( j = *(volatile signed __int32 **)(*(&PnpReplaceEvent + 831) + 8i64);
j;
j = (volatile signed __int32 *)*((_QWORD *)j + 1) )
{
v14 = j;
}
while( v14 != (volatile signed __int32 *)*(&PnpReplaceEvent + 831) )
{
if( (v14[190] & 0x30000) != 0 )
{
if( (v14[190] & 0x20000) != 0 )
{
v16 = *((_QWORD *)v14 + 97);
if( v16 )
++*(_DWORD *)(v16 + 160);
}
else if( (v14[190] & 0x10000) != 0 )
{
v17 = *((_QWORD *)v14 + 97);
if( v17 )
++*(_DWORD *)(v17 + 156);
}
_InterlockedOr(v14 + 74, 0x100u);
}
v18 = *(volatile signed __int32 **)v14;
if( *(_QWORD *)v14 )
{
do
{
v14 = v18;
v18 = (volatile signed __int32 *)*((_QWORD *)v18 + 1);
}
while( v18 );
}
else
{
v14 = (volatile signed __int32 *)*((_QWORD *)v14 + 2);
}
}
v5 = PoInitializeBroadcast();
}
}
else
{
LABEL_42:
v5 = -1073741823;
}
LABEL_43:
PopFxDestroyDirectedDripsCandidateDeviceList(v20);
if( v5 < 0 )
IoControlPnpDeviceActionQueue(0);
if( v2 )
{
PopAcquirePolicyLock();
PopPowerAggregatorHandleIntent(4ui64, 0i64, 0x2Aui64);
PopReleasePolicyLock();
}
return v5;
}Referenced by:
PopDirectedDripsSuspendDevices