PopDirectedDripsHandleResiliencyNotification
INT64 __fastcall PopDirectedDripsHandleResiliencyNotification(INT64 a1){
volatile INT64 *v1;
CHAR v3;
int v4;
INT64 v5;
v1 = (volatile INT64 *)(a1 + 136);
ExAcquirePushLockExclusiveEx(a1 + 136, 0i64);
v3 = *(_BYTE *)(a1 + 145);
v4 = *(_DWORD *)(a1 + 148);
if( (_InterlockedExchangeAdd64(v1, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
ExfTryToWakePushLock(v1);
KeAbPostRelease((PVOID)v1);
if( *(_BYTE *)(a1 + 144) != v3 )
{
PopDirectedDripsDiagPnpActionQueueAccountingUpdate(v5, v3);
if( v3 )
PopDirectedDripsSuspendDevices((INT32 *)a1);
else
PopDirectedDripsResumeDevices((VOID *)a1, 0);
}
*(_BYTE *)(a1 + 144) = v3;
ExAcquirePushLockExclusiveEx((UINT64)v1, 0i64);
if( *(_DWORD *)(a1 + 148) == v4 )
{
*(_BYTE *)(a1 + 152) = 1;
PopQueueWorkItem(a1 + 160, DelayedWorkQueue);
}
if( (_InterlockedExchangeAdd64(v1, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
ExfTryToWakePushLock(v1);
KeAbPostRelease((PVOID)v1);
return PopDeepSleepClearDisengageReason(8i64);
}Referenced by:
PopDirectedDripsWorkerRoutine