PopFxClearDeviceConstraints
INT64 __fastcall PopFxClearDeviceConstraints(INT64 a1){
ULONG_PTR v2;
int v3;
__int64 v4;
DEVICE_OBJECT *v5;
UINT64 v6;
signed __int32 v7;
unsigned __int8 v8;
unsigned __int64 v9;
UINT64 v10;
unsigned int i;
__int64 v12;
unsigned __int8 v13;
unsigned __int64 v14;
if( (unsigned int)PpmGetDeepSleepPlatformStateIndex() == -1 )
return(unsigned int)-1073741823;
if( !a1 )
return(unsigned int)-1073741811;
v4 = *(_QWORD *)(v2 + 64);
if( v4 && (*(_DWORD *)(v4 + 24) & 0x8000000) == 0 )
{
return(unsigned int)-1073741823;
}
else
{
PopFxAddRefDevice(v2);
if( (_InterlockedCompareExchange((volatile signed __int32 *)(a1 + 824), 0, 0) & 0x10) != 0 && *(_QWORD *)(a1 + 56) )
{
v5 = *(DEVICE_OBJECT **)(*(_QWORD *)(a1 + 48) + 32i64);
PopFxActivateDevice(v5, 0);
v3 = PopPepClearDripsDeviceVetoMask(*(INT64 **)(a1 + 56));
if( v3 >= 0 )
{
v7 = _InterlockedCompareExchange(&PopFxDeviceAccountingLevel, 0, 0);
KeAcquireSpinLockRaiseToDpc((UINT64 *)(a1 + 600), v6);
v9 = v8;
*(_DWORD *)(a1 + 616) = v7;
memset(a1 + 632, 0i64);
*(_BYTE *)(a1 + 608) = 0;
*(_QWORD *)(a1 + 624) = 0i64;
*(_DWORD *)(a1 + 612) = 5;
_InterlockedAnd((volatile signed __int32 *)(a1 + 824), 0xFFFFFFEF);
KxReleaseSpinLock((UINT64 *)(a1 + 600));
__writecr8(v9);
for( i = 0; i < *(_DWORD *)(a1 + 828); ++i )
{
v12 = *(_QWORD *)(*(_QWORD *)(a1 + 832) + 8i64 * i) + 200i64;
KeAcquireSpinLockRaiseToDpc((UINT64 *)v12, v10);
v14 = v13;
*(_DWORD *)(v12 + 16) = v7;
memset(v12 + 32, 0i64);
*(_DWORD *)(v12 + 12) = -1;
*(_BYTE *)(v12 + 8) = 0;
*(_QWORD *)(v12 + 24) = 0i64;
_InterlockedAnd((volatile signed __int32 *)(a1 + 824), 0xFFFFFEFF);
KxReleaseSpinLock((UINT64 *)v12);
__writecr8(v14);
}
}
PoFxIdleDevice(v5);
}
else
{
v3 = -1073741823;
}
if( _InterlockedExchangeAdd((volatile signed __int32 *)(a1 + 244), 0xFFFFFFFF) == 1 )
KeSetEvent((PRKEVENT)(a1 + 248), 0);
if( !v3 )
ZwUpdateWnfStateData();
}
return(unsigned int)v3;
}Referenced by:
PopPowerInformationInternal