PopFxDestroyDripsBlockingDeviceList
VOID __fastcall PopFxDestroyDripsBlockingDeviceList(_QWORD *a1){
__int64 *v2;
__int64 v3;
void *v4;
while( 1 )
{
v2 = (__int64 *)*a1;
if( (_QWORD *)*a1 == a1 )
break;
if( (_QWORD *)v2[1] != a1 || (v3 = *v2, *(__int64 **)(*v2 + 8) != v2) )
__fastfail(3u);
*a1 = v3;
*(_QWORD *)(v3 + 8) = a1;
v4 = (void *)v2[3];
if( v4 )
{
ExFreePoolWithTag(v4, 0x4D584650u);
v2[3] = 0i64;
*((_DWORD *)v2 + 8) = 0;
}
PopFxReleaseDevice((UINT64)(v2 - 109));
}
ExReleasePushLockEx((UINT64)&PopFxBlockingDeviceListLock, 0i64);
KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
IoLockUnlockPnpDeviceTree(0);
}Referenced by:
PopDripsWatchdogCallbackHandler
PopDripsWatchdogTakeAction
PopFxBuildDripsBlockingDeviceList