PoTraceSystemTimerResolution
char __fastcall PoTraceSystemTimerResolution(char a1, __int64 a2, EVENT_DESCRIPTOR *a3){
__int64 v5;
bool v6;
UINT64 v7;
EVENT_DESCRIPTOR *v8;
unsigned __int16 *v9;
_ETHREAD *CurrentThread;
__int64 v11;
__int64 v12;
__int16 v13;
int v14;
int v15;
UINT64 v16;
EVENT_DESCRIPTOR *v17;
int *v18;
__int16 v20;
int v21;
int v22;
int v23;
int v24;
EVENT_DATA_DESCRIPTOR UserData;
int *v26;
int v27;
int v28;
__int16 *v29;
int v30;
int v31;
__int64 v32;
int v33;
int v34;
int *v35;
int v36;
int v37;
_DWORD *v38;
int v39;
int v40;
if( a1 )
{
v7 = PopDiagHandle;
LOBYTE(v5) = EtwEventEnabled(PopDiagHandle, (EVENT_DESCRIPTOR *)&POP_ETW_EVENT_TIME_RESOLUTION_REQUEST_RUNDOWN, a3);
v6 = 1;
if( !(_BYTE)v5 )
{
LOBYTE(v5) = EtwEventEnabled(v7, (EVENT_DESCRIPTOR *)&POP_ETW_EVENT_TIME_RESOLUTION_STACK_RUNDOWN, v8);
if( !(_BYTE)v5 )
v6 = 0;
}
}
else
{
LOBYTE(v5) = EtwEventEnabled(PopDiagHandle, (EVENT_DESCRIPTOR *)&POP_ETW_EVENT_STRS, a3);
v6 = v5;
}
if( PopDiagHandleRegistered && v6 )
{
v9 = *(unsigned __int16 **)(a2 + 1472);
v20 = *v9 >> 1;
v22 = *(_DWORD *)(a2 + 2104);
v21 = 0;
if( !a1 )
{
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
if( (*((_DWORD *)CurrentThread + 29) & 0x400) != 0 || *((_BYTE *)CurrentThread + 586) == 1 )
v11 = 0i64;
else
v11 = *((_QWORD *)CurrentThread + 30);
if( v11 )
{
if( *(_QWORD *)(*((_QWORD *)KeGetCurrentThread() + 23) + 1408i64)
&& (v12 = *(_QWORD *)(*((_QWORD *)KeGetCurrentThread() + 23) + 1408i64)) != 0
&& ((v13 = *(_WORD *)(v12 + 8), v13 == 332) || v13 == 452) )
{
v14 = *(_DWORD *)(v11 + 12128);
}
else
{
v14 = *(_DWORD *)(v11 + 5920);
}
v21 = v14;
}
}
v23 = *(_DWORD *)(a2 + 1088);
UserData.Ptr = (unsigned __int64)&v22;
UserData.Size = 4;
UserData.Reserved = 0;
v26 = &v23;
v27 = 4;
v28 = 0;
v29 = &v20;
v30 = 2;
v31 = 0;
v15 = *v9;
v5 = *((_QWORD *)v9 + 1);
v32 = v5;
v33 = v15;
v34 = 0;
if( a1 )
{
if( (*(_DWORD *)(a2 + 1124) & 0x1000) != 0 )
LOBYTE(v5) = EtwWrite(
PopDiagHandle,
(EVENT_DESCRIPTOR *)&POP_ETW_EVENT_TIME_RESOLUTION_REQUEST_RUNDOWN,
0i64,
4ui64,
&UserData);
v18 = *(int **)(a2 + 2096);
if( !v18 || !*v18 )
return v5;
v22 = *(_DWORD *)(a2 + 2108);
v24 = *v18;
v35 = &v24;
v38 = v18 + 2;
v39 = 8 * v24;
v40 = 0;
v16 = 6i64;
v17 = (EVENT_DESCRIPTOR *)&POP_ETW_EVENT_TIME_RESOLUTION_STACK_RUNDOWN;
}
else
{
v35 = &v21;
v16 = 5i64;
v17 = (EVENT_DESCRIPTOR *)&POP_ETW_EVENT_STRS;
}
v36 = 4;
v37 = 0;
LOBYTE(v5) = EtwWrite(PopDiagHandle, v17, 0i64, v16, &UserData);
}
return v5;
}Referenced by:
ExTraceTimerResolution
NtSetTimerResolution