PiCollapseRebalanceRequests
UINT8 __stdcall PiCollapseRebalanceRequests(_LIST_ENTRY *ListHead){
UINT64 v1;
INT64 v3;
_LIST_ENTRY *Blink;
unsigned __int8 v5;
unsigned __int64 v6;
INT64 *v7;
INT64 **v8;
_LIST_ENTRY *v9;
_LIST_ENTRY *i;
KeAcquireSpinLockRaiseToDpc(&PnpSpinLock, v1);
v3 = PnpEnumerationRequestList;
Blink = ListHead->Blink;
v6 = v5;
if( (INT64 *)PnpEnumerationRequestList != &PnpEnumerationRequestList )
{
do
{
v7 = *(INT64 **)v3;
if( *(_BYTE *)(v3 + 28) )
break;
if( *(_DWORD *)(v3 + 24) == 6 && *(_BYTE *)(v3 + 32) )
{
v8 = *(INT64 ***)(v3 + 8);
if( v7[1] != v3
|| *v8 != (INT64 *)v3
|| (*v8 = v7, v7[1] = (INT64)v8, v9 = ListHead->Blink, v9->Flink != ListHead) )
{
__fastfail(3u);
}
*(_QWORD *)v3 = ListHead;
*(_QWORD *)(v3 + 8) = v9;
v9->Flink = (_LIST_ENTRY *)v3;
ListHead->Blink = (_LIST_ENTRY *)v3;
}
v3 = (INT64)v7;
}
while( v7 != &PnpEnumerationRequestList );
}
KxReleaseSpinLock(&PnpSpinLock);
__writecr8(v6);
for( i = Blink->Flink; i != ListHead; i = i->Flink )
{
ObfDereferenceObjectWithTag(i[1].Flink, 0x746C6644ui64);
i[1].Flink = 0i64;
}
return Blink != ListHead->Blink;
}Referenced by:
PnpProcessRebalance