PopDiagTraceDeepSleepConstraintRundown
VOID __fastcall PopDiagTraceDeepSleepConstraintRundown(INT64 a1, INT64 a2, EVENT_DESCRIPTOR *a3){
unsigned __int16 v3;
UINT64 v4;
unsigned int v5;
int v6;
unsigned __int64 v7;
unsigned __int64 v8;
int v9;
bool v10;
int *v11;
__int64 v12;
UINT64 UserDataCount;
unsigned __int16 v14;
int v15[10];
EVENT_DATA_DESCRIPTOR UserData;
__int64 v17[20];
v3 = 0;
if( PopDiagHandleRegistered
&& EtwEventEnabled(PopDiagHandle, (EVENT_DESCRIPTOR *)&POP_ETW_DEEP_SLEEP_CONSTRAINT_RUNDOWN, a3) )
{
KeAcquireSpinLockRaiseToDpc(&PopDeepSleepDisengageReasonLock, v4);
v5 = PopDeepSleepDisengageReasonMask;
v7 = (unsigned __int8)v6;
*(_QWORD *)&UserData.Size = 2i64;
v8 = (unsigned int)PopDeepSleepDisengageReasonMask
- (((unsigned __int64)(unsigned int)PopDeepSleepDisengageReasonMask >> 1) & 0x5555555555555555i64);
v14 = (0x101010101010101i64
* (((v8 & 0x3333333333333333i64)
+ ((v8 >> 2) & 0x3333333333333333i64)
+ (((v8 & 0x3333333333333333i64) + ((v8 >> 2) & 0x3333333333333333i64)) >> 4)) & 0xF0F0F0F0F0F0F0Fi64)) >> 56;
v9 = v14 + 1;
UserData.Ptr = (unsigned __int64)&v14;
v10 = !_BitScanForward((unsigned int *)&v6, PopDeepSleepDisengageReasonMask);
v15[0] = v6;
if( !v10 )
{
v11 = v15;
do
{
v5 &= v5 - 1;
v12 = 2i64 * v3++;
v17[v12] = (__int64)v11;
v17[v12 + 1] = 4i64;
v11 = &v15[v3];
v10 = !_BitScanForward((unsigned int *)&v12, v5);
*v11 = v12;
}
while( !v10 );
}
LODWORD(UserDataCount) = v9;
EtwWriteEx(
PopDiagHandle,
(EVENT_DESCRIPTOR *)&POP_ETW_DEEP_SLEEP_CONSTRAINT_RUNDOWN,
0i64,
0i64,
0i64,
0i64,
UserDataCount,
&UserData);
KxReleaseSpinLock(&PopDeepSleepDisengageReasonLock);
__writecr8(v7);
}
}Referenced by:
PopDiagTraceControlCallback