PopDiagTracePowerRequestCreate
VOID __fastcall PopDiagTracePowerRequestCreate(CHAR a1, INT64 a2, EVENT_DESCRIPTOR *a3){
EVENT_DESCRIPTOR *v5;
int *v6;
_DWORD *PoolWithTag;
_DWORD *v8;
WCHAR v9;
__int64 v10;
SIZE_T v11;
_WORD *v12;
__int64 v13;
unsigned __int16 v14;
wchar_t *v15;
INT64 v16;
int v17;
int v18;
bool v19;
int v20;
unsigned int v21;
unsigned __int16 v22;
unsigned __int16 v23;
__int64 v24;
EVENT_DESCRIPTOR *v25;
__int64 v26;
unsigned int v27;
__int64 v28;
__int64 v29;
__int64 v30;
__int64 v31;
UINT64 v32;
__int64 v33;
__int64 v34;
wchar_t *v35;
__int64 v36;
_WORD *v37;
__int64 v38;
wchar_t *v39;
unsigned __int16 v40;
__int16 v41;
int v42;
int v43;
int v44;
int v45;
int SessionId;
int v47;
int v48;
int v49;
int v50;
int v51;
INT64 v52;
SIZE_T NumberOfBytes[2];
struct _UNICODE_STRING DestinationString;
EVENT_DATA_DESCRIPTOR UserData;
int *v56;
__int64 v57;
int *v58;
__int64 v59;
int *p_SessionId;
__int64 v61;
int *v62;
__int64 v63;
int *v64;
__int64 v65;
int *v66;
__int64 v67;
int *v68;
__int64 v69;
INT64 v70;
__int64 v71;
INT64 v72;
__int64 v73;
INT64 v74;
__int64 v75;
__int16 *v76;
__int64 v77;
__int16 *v78;
__int64 v79;
SIZE_T v80;
int v81;
int v82;
wchar_t pszDest[24];
v52 = a2;
v40 = 0;
v41 = 0;
DestinationString = 0i64;
if( PopDiagHandleRegistered )
{
v5 = (EVENT_DESCRIPTOR *)&POP_ETW_EVENT_CREATE_POWER_REQUEST;
if( a1 )
v5 = (EVENT_DESCRIPTOR *)POP_ETW_EVENT_POWER_REQUEST_RUNDOWN;
if( EtwEventEnabled(PopDiagHandle, v5, a3) )
{
v6 = *(int **)(a2 + 80);
NumberOfBytes[0] = 0i64;
v42 = *v6;
v45 = 0;
SessionId = 0;
v43 = 0;
v47 = 0;
v48 = 0;
v49 = 0;
v44 = 0;
v51 = 0;
v50 = 0;
PoStoreRequester(*(_QWORD *)(a2 + 80), 0i64, NumberOfBytes, 0);
PoolWithTag = ExAllocatePoolWithTag(PagedPool, NumberOfBytes[0], 0x50455654ui64);
v8 = PoolWithTag;
if( PoolWithTag )
{
if( (int)PoStoreRequester(*(_QWORD *)(v52 + 80), (INT64)PoolWithTag, NumberOfBytes, 0) >= 0 )
{
if( v42 )
{
v45 = v8[6];
SessionId = MmGetSessionIdEx(*(_QWORD *)(*(_QWORD *)(v52 + 80) + 8i64));
v10 = *((_QWORD *)v8 + 2);
*(_OWORD *)NumberOfBytes = 0i64;
v11 = (SIZE_T)v8 + v10;
if( !v11 )
goto LABEL_54;
v12 = (_WORD *)v11;
v13 = 0x7FFFi64;
do
{
if( !*v12 )
break;
++v12;
--v13;
}
while( v13 );
if( v13 )
{
v14 = 2 * (v13 != 0 ? 0x7FFF - v13 : 0);
}
else
{
LABEL_54:
v11 = NumberOfBytes[1];
v14 = NumberOfBytes[0];
}
if( v42 == 2 )
{
RtlStringCbPrintfW(pszDest, 0x2Cui64, (WCHAR *)L"%d");
v15 = pszDest;
}
else
{
v15 = 0i64;
}
RtlInitUnicodeString(&DestinationString, v15, v9);
}
else
{
v34 = *((_QWORD *)v8 + 2);
v35 = (wchar_t *)((char *)v8 + *((_QWORD *)v8 + 3));
*(_OWORD *)NumberOfBytes = 0i64;
v11 = (SIZE_T)v8 + v34;
if( !v11 )
goto LABEL_53;
v36 = 0x7FFFi64;
v37 = (_WORD *)v11;
do
{
if( !*v37 )
break;
++v37;
--v36;
}
while( v36 );
if( v36 )
{
v14 = 2 * (v36 != 0 ? 0x7FFF - v36 : 0);
}
else
{
LABEL_53:
v11 = NumberOfBytes[1];
v14 = NumberOfBytes[0];
}
if( v35 )
{
v38 = 0x7FFFi64;
v39 = v35;
do
{
if( !*v39 )
break;
++v39;
--v38;
}
while( v38 );
if( v38 )
{
DestinationString.Buffer = v35;
DestinationString.Length = 2 * (v38 != 0 ? 0x7FFF - v38 : 0);
}
}
}
v16 = v52;
v17 = v43;
if( !*(_QWORD *)(v52 + 80) )
v17 = 1;
v43 = v17;
v18 = *(_DWORD *)(v52 + 20);
if( (v18 & 2) != 0 )
{
v47 = 1;
v18 = *(_DWORD *)(v52 + 20);
}
if( (v18 & 1) != 0 )
{
v48 = 1;
v18 = *(_DWORD *)(v52 + 20);
}
if( (v18 & 4) != 0 )
{
v49 = 1;
v18 = *(_DWORD *)(v52 + 20);
}
if( (v18 & 8) != 0 )
{
v50 = 1;
v18 = *(_DWORD *)(v52 + 20);
}
if( (v18 & 0x10) != 0 )
{
v51 = 1;
v18 = *(_DWORD *)(v52 + 20);
}
v19 = (v18 & 0x20) == 0;
v20 = v44;
v21 = 13;
if( !v19 )
v20 = 1;
*(_QWORD *)&UserData.Size = 8i64;
v44 = v20;
UserData.Ptr = (unsigned __int64)&v52;
v56 = &v42;
v58 = &v45;
p_SessionId = &SessionId;
v62 = &v43;
v64 = &v47;
v66 = &v48;
v68 = &v49;
v70 = v52 + 36;
v72 = v52 + 32;
v74 = v52 + 40;
v22 = v14 >> 1;
v23 = DestinationString.Length >> 1;
v76 = (__int16 *)&v40;
v78 = &v41;
v40 = v22;
v41 = DestinationString.Length >> 1;
v57 = 4i64;
v59 = 4i64;
v61 = 4i64;
v63 = 4i64;
v65 = 4i64;
v67 = 4i64;
v69 = 4i64;
v71 = 4i64;
v73 = 4i64;
v75 = 4i64;
v77 = 2i64;
v79 = 2i64;
if( v22 )
{
v21 = 14;
v80 = v11;
v81 = 2 * v22;
v82 = 0;
}
if( v23 )
{
v33 = 2i64 * v21;
*(&UserData.Ptr + v33) = (unsigned __int64)DestinationString.Buffer;
*(&UserData.Reserved + 2 * v33) = 0;
*(&UserData.Size + 2 * v33) = 2 * v23;
++v21;
}
v24 = 2i64 * v21;
v25 = (EVENT_DESCRIPTOR *)POP_ETW_EVENT_POWER_REQUEST_RUNDOWN;
*(&UserData.Ptr + v24) = (unsigned __int64)&v50;
*((_QWORD *)&UserData.Size + v24) = 4i64;
v26 = v21 + 1;
v27 = v21 + 2;
v26 *= 2i64;
*(&UserData.Ptr + v26) = (unsigned __int64)&v51;
*((_QWORD *)&UserData.Size + v26) = 4i64;
v28 = 2i64 * v27;
*(&UserData.Ptr + v28) = (unsigned __int64)&v44;
*((_QWORD *)&UserData.Size + v28) = 4i64;
v29 = v27 + 1;
v27 += 2;
v29 *= 2i64;
*(&UserData.Ptr + v29) = v16 + 44;
*((_QWORD *)&UserData.Size + v29) = 4i64;
v30 = 2i64 * v27;
*(&UserData.Ptr + v30) = v16 + 48;
*((_QWORD *)&UserData.Size + v30) = 4i64;
v31 = v27 + 1;
v32 = v27 + 2;
v31 *= 2i64;
*(&UserData.Ptr + v31) = v16 + 52;
*((_QWORD *)&UserData.Size + v31) = 4i64;
if( !a1 )
v25 = (EVENT_DESCRIPTOR *)&POP_ETW_EVENT_CREATE_POWER_REQUEST;
EtwWrite(PopDiagHandle, v25, 0i64, v32, &UserData);
}
ExFreePoolWithTag(v8, 0x50455654u);
}
}
}
}Referenced by:
PopCreateKernelPowerRequest
PopCreateUserPowerRequest
PopDiagTraceControlCallback