PopDirectedDripsHandleResiliencyNotification
NTSTATUS __stdcall PopDirectedDripsHandleResiliencyNotification(INT64 a1){
_EX_PUSH_LOCK *v1;
CHAR v3;
int v4;
INT64 v5;
NTSTATUS result;
v1 = (_EX_PUSH_LOCK *)(a1 + 136);
ExAcquirePushLockExclusiveEx((_EX_PUSH_LOCK *)(a1 + 136), 0i64);
v3 = *(_BYTE *)(a1 + 145);
v4 = *(_DWORD *)(a1 + 148);
if( (_InterlockedExchangeAdd64(&v1->_bf_0, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
ExfTryToWakePushLock(v1);
KeAbPostRelease(v1);
if( *(_BYTE *)(a1 + 144) != v3 )
{
PopDirectedDripsDiagPnpActionQueueAccountingUpdate(v5, v3);
if( v3 )
PopDirectedDripsSuspendDevices((INT32 *)a1);
else
PopDirectedDripsResumeDevices((VOID *)a1);
}
*(_BYTE *)(a1 + 144) = v3;
ExAcquirePushLockExclusiveEx(v1, 0i64);
if( *(_DWORD *)(a1 + 148) == v4 )
{
*(_BYTE *)(a1 + 152) = 1;
PopQueueWorkItem((_POP_WORK_ITEM *)(a1 + 160));
}
if( (_InterlockedExchangeAdd64(&v1->_bf_0, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
ExfTryToWakePushLock(v1);
KeAbPostRelease(v1);
PopDeepSleepClearDisengageReason(PopDeepSleepDisengageReasonDirectedDripsTransition);
return result;
}Referenced by:
PopDirectedDripsWorkerRoutine