PopFxClearDeviceConstraints
NTSTATUS __stdcall PopFxClearDeviceConstraints(INT64 a1){
__int64 v2;
int v3;
__int64 v4;
_DEVICE_OBJECT *v5;
signed __int32 v6;
unsigned __int64 v7;
unsigned int i;
__int64 v9;
unsigned __int64 v10;
UINT64 MatchingChangeStamp;
UINT64 CheckStamp;
if( (unsigned int)PpmGetDeepSleepPlatformStateIndex() == -1 )
return -1073741823;
if( !a1 )
return -1073741811;
v4 = *(_QWORD *)(v2 + 64);
if( v4 )
{
if( (*(_DWORD *)(v4 + 24) & 0x8000000) == 0 )
return -1073741823;
}
PopFxAddRefDevice((POP_FX_DEVICE *)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 )
{
v6 = _InterlockedCompareExchange((_DWORD *)&stru_140C23628 + 1058, 0, 0);
v7 = (unsigned __int8)KeAcquireSpinLockRaiseToDpc((UINT64 *)(a1 + 600));
*(_DWORD *)(a1 + 616) = v6;
memset((VOID *)(a1 + 632), 0i64, 0xC0u);
*(_BYTE *)(a1 + 608) = 0;
*(_QWORD *)(a1 + 624) = 0i64;
*(_DWORD *)(a1 + 612) = 5;
_InterlockedAnd((volatile signed __int32 *)(a1 + 824), 0xFFFFFFEF);
KxReleaseSpinLock((UINT64 *)(a1 + 600));
__writecr8(v7);
for( i = 0; i < *(_DWORD *)(a1 + 828); ++i )
{
v9 = *(_QWORD *)(*(_QWORD *)(a1 + 832) + 8i64 * i) + 200i64;
v10 = (unsigned __int8)KeAcquireSpinLockRaiseToDpc((UINT64 *)v9);
*(_DWORD *)(v9 + 16) = v6;
memset((VOID *)(v9 + 32), 0i64, 0xC0u);
*(_DWORD *)(v9 + 12) = -1;
*(_BYTE *)(v9 + 8) = 0;
*(_QWORD *)(v9 + 24) = 0i64;
_InterlockedAnd((volatile signed __int32 *)(a1 + 824), 0xFFFFFEFF);
KxReleaseSpinLock((UINT64 *)v9);
__writecr8(v10);
}
}
PoFxIdleDevice(v5);
}
else
{
v3 = -1073741823;
}
if( _InterlockedExchangeAdd((volatile signed __int32 *)(a1 + 244), 0xFFFFFFFF) == 1 )
KeSetEvent((PRKEVENT)(a1 + 248), 0, 0);
if( !v3 )
{
LODWORD(CheckStamp) = 0;
LODWORD(MatchingChangeStamp) = 0;
ZwUpdateWnfStateData(
&WNF_PO_DRIPS_DEVICE_CONSTRAINTS_UPDATED,
0i64,
0i64,
0i64,
0i64,
MatchingChangeStamp,
CheckStamp);
}
return v3;
}Referenced by:
PopPowerInformationInternal