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