PopDirectedDripsUmMarkTestDevices
VOID __stdcall PopDirectedDripsUmMarkTestDevices(){
signed __int32 v0;
signed __int32 v1;
_ETHREAD *CurrentThread;
INT64 v3;
INT64 v4;
_QWORD *v5;
_QWORD *i;
__int64 v7;
_QWORD *v8;
INT64 v9;
INT64 v10;
int Buffer[2];
__int64 v12;
INT64 v13;
_m_prefetchw(&PopDirectedDripsUmTestDeviceCount);
v0 = PopDirectedDripsUmTestDeviceCount;
do
{
v1 = v0;
v0 = _InterlockedCompareExchange(&PopDirectedDripsUmTestDeviceCount, v0, v0);
}
while( v1 != v0 );
if( v0 )
{
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--*((_WORD *)CurrentThread + 242);
ExAcquirePushLockSharedEx((UINT64)&PopDirectedDripsUmLock, 0i64);
v13 = PopWnfCsEnterScenarioId;
PopDirectedDripsNotify(PopDirectedDripsUmTestPermissive != 0 ? 4 : 2, &v13, v3, v4);
IoLockUnlockPnpDeviceTree(1);
v5 = IopRootDeviceNode;
for( i = (_QWORD *)*((_QWORD *)IopRootDeviceNode + 1); i; i = (_QWORD *)i[1] )
v5 = i;
while( v5 != IopRootDeviceNode )
{
if( v5[10] )
{
Buffer[1] = *((unsigned __int16 *)v5 + 20) >> 1;
v12 = v5[6];
Buffer[0] = 1;
LODWORD(v7) = RtlLookupElementGenericTableAvl(&PopDirectedDripsUmTestDeviceTable, Buffer);
if( v7 )
PopDirectedDripsMarkCandidateDevice(v5[10]);
}
v8 = (_QWORD *)*v5;
if( *v5 )
{
do
{
v5 = v8;
v8 = (_QWORD *)v8[1];
}
while( v8 );
}
else
{
v5 = (_QWORD *)v5[2];
}
}
IoLockUnlockPnpDeviceTree(0);
PopDirectedDripsNotify(PopDirectedDripsUmTestPermissive != 0 ? 5 : 3, &v13, v9, v10);
PopReleaseRwLock((UINT64)&PopDirectedDripsUmLock);
}
}Referenced by:
PopDirectedDripsIdleResiliencyCallback