PopDirectedDripsInitializeBroadcast
INT64 __fastcall PopDirectedDripsInitializeBroadcast(volatile INT32 *rcx0){
char v2;
char v3;
CHAR v4;
int v5;
volatile signed __int32 *v6;
volatile signed __int32 *i;
unsigned int v8;
volatile signed __int32 *v9;
volatile INT32 *v10;
int v11;
int v12;
char v13;
PVOID v14;
_QWORD *j;
__int64 v16;
__int64 v17;
_QWORD *v18;
volatile INT32 *v20[2];
INT64 a3;
int v22;
int a1;
int a2;
a2 = 0;
*(_OWORD *)v20 = 0i64;
a1 = 0;
LODWORD(a3) = 0;
_InterlockedOr(rcx0, 0);
v2 = 0;
PopDirectedDripsQueryMitigationStatus(&a1, &a2, &a3);
v3 = a3;
v4 = a3 | a2 & a1;
if( (unsigned int)a3 | a2 & a1 )
{
IoControlPnpDeviceActionQueue(1u);
v6 = (volatile signed __int32 *)IopRootDeviceNode;
for( i = (volatile signed __int32 *)*((_QWORD *)IopRootDeviceNode + 1);
i;
i = (volatile signed __int32 *)*((_QWORD *)i + 1) )
{
v6 = i;
}
if( v6 != IopRootDeviceNode )
{
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 != IopRootDeviceNode );
v3 = a3;
}
PopFxBuildDirectedDripsCandidateDeviceList(v20);
v10 = v20[0];
v22 = 0;
v11 = 0;
if( (volatile INT32 **)v20[0] == v20 )
goto LABEL_42;
do
{
v12 = PopDirectedDripsBuildBroadcastTreePartial(*((_QWORD *)v10 - 103), v4, &v22);
v5 = v12;
if( v12 < 0 )
{
if( v12 != -1073741637 )
goto LABEL_43;
}
else
{
++v11;
}
v10 = *(volatile INT32 **)v10;
}
while( v10 != (volatile INT32 *)v20 );
if( v11 && (v13 = v22, v22) )
{
if( (v22 & 1) != 0 && (v3 & 1) == 0 )
{
_InterlockedOr(rcx0, 0x400u);
v3 = a3;
v13 = v22;
}
if( (v13 & 2) != 0 && (v3 & 2) == 0 )
{
v2 = 1;
v5 = -1073741267;
}
else
{
v14 = IopRootDeviceNode;
for( j = (_QWORD *)*((_QWORD *)IopRootDeviceNode + 1); j; j = (_QWORD *)j[1] )
v14 = j;
while( v14 != IopRootDeviceNode )
{
if( (*((_DWORD *)v14 + 190) & 0x30000) != 0 )
{
if( (*((_DWORD *)v14 + 190) & 0x20000) != 0 )
{
v16 = *((_QWORD *)v14 + 97);
if( v16 )
++*(_DWORD *)(v16 + 160);
}
else if( (*((_DWORD *)v14 + 190) & 0x10000) != 0 )
{
v17 = *((_QWORD *)v14 + 97);
if( v17 )
++*(_DWORD *)(v17 + 156);
}
_InterlockedOr((volatile signed __int32 *)v14 + 74, 0x100u);
}
v18 = *(_QWORD **)v14;
if( *(_QWORD *)v14 )
{
do
{
v14 = v18;
v18 = (_QWORD *)v18[1];
}
while( v18 );
}
else
{
v14 = (PVOID)*((_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();
}
}
else
{
return(unsigned int)-1073741823;
}
return(unsigned int)v5;
}Referenced by:
PopDirectedDripsSuspendDevices