PiCollapseRebalanceRequests
bool __fastcall PiCollapseRebalanceRequests(_LIST_ENTRY *a1){
unsigned __int8 v2;
__int64 *v3;
_LIST_ENTRY *Blink;
unsigned __int64 v5;
__int64 *v6;
__int64 **v7;
_LIST_ENTRY *v8;
_LIST_ENTRY *i;
v2 = KeAcquireSpinLockRaiseToDpc((UINT64 *)&PnpReplaceEvent + 50);
v3 = (__int64 *)*(&PnpReplaceEvent + 48);
Blink = a1->Blink;
v5 = v2;
if( (_UNKNOWN *)*(&PnpReplaceEvent + 48) != (_UNKNOWN *)((char *)&PnpReplaceEvent + 384) )
{
do
{
v6 = (__int64 *)*v3;
if( *((_BYTE *)v3 + 28) )
break;
if( *((_DWORD *)v3 + 6) == 6 && *((_BYTE *)v3 + 32) )
{
v7 = (__int64 **)v3[1];
if( (__int64 *)v6[1] != v3 || *v7 != v3 || (*v7 = v6, v6[1] = (__int64)v7, v8 = a1->Blink, v8->Flink != a1) )
__fastfail(3u);
*v3 = (__int64)a1;
v3[1] = (__int64)v8;
v8->Flink = (_LIST_ENTRY *)v3;
a1->Blink = (_LIST_ENTRY *)v3;
}
v3 = v6;
}
while( v6 != (__int64 *)((char *)&PnpReplaceEvent + 384) );
}
KxReleaseSpinLock((UINT64 *)&PnpReplaceEvent + 50);
__writecr8(v5);
for( i = Blink->Flink; i != a1; i = i->Flink )
{
ObfDereferenceObjectWithTag(i[1].Flink, 0x746C6644ui64);
i[1].Flink = 0i64;
}
return Blink != a1->Blink;
}Referenced by:
PnpProcessRebalance