KiSynchNumaCounterSetCallback
INT64 __stdcall KiSynchNumaCounterSetCallback(PCW_CALLBACK_TYPE Type, PCW_CALLBACK_INFORMATION *Info, PVOID Context){
INT64 v5;
UINT64 v6;
INT64 v7;
__int32 v8;
__int32 v9;
struct _PCW_BUFFER *Buffer;
unsigned int v11;
bool i;
__int64 v13;
__int64 v14;
__int16 v15;
int v16;
_SYNCH_COUNTERS *v17;
_SYNCH_COUNTERS *v18;
WCHAR v19;
INT64 v20;
WCHAR v21;
WCHAR v22;
ULONG Id;
struct _UNICODE_STRING DestinationString;
struct _PCW_DATA v25;
__int128 v26;
__int64 v27;
struct _PCW_DATA Data;
INT64 result[24];
INT64 v30[24];
wchar_t pszDest[12];
v27 = 0i64;
v26 = 0i64;
memset((INT64)result, 0i64);
memset((INT64)v30, 0i64);
Id = 0;
DestinationString = 0i64;
if( Type == PcwCallbackAddCounter )
{
EtwReferenceSpinLockCounters(v6, v5, v7);
return 0i64;
}
v8 = Type - 1;
if( !v8 )
{
EtwDereferenceSpinLockCounters();
return 0i64;
}
v9 = v8 - 1;
if( v9 && v9 != 1 )
return 0i64;
Buffer = Info->EnumerateInstances.Buffer;
v11 = 0;
for( i = KeNumberNodes != 0; i; i = v11 < (unsigned __int16)KeNumberNodes )
{
v13 = *((_QWORD *)&KeNodeBlock + v11);
v14 = *(_QWORD *)(v13 + 136);
if( v14 )
{
v15 = *(_WORD *)(v13 + 144);
memset((INT64)result, 0i64);
*((_QWORD *)&v26 + 1) = v14;
v16 = 0;
LOWORD(v27) = v15;
*(_QWORD *)&v26 = 0i64;
while( !(unsigned int)KeEnumerateNextProcessor(&Id, (unsigned __int16 **)&v26) )
{
v17 = (_SYNCH_COUNTERS *)((char *)*(&KiProcessorBlock + Id) + 33984);
KiAddSynchCounters((_SYNCH_COUNTERS *)result, v17);
KiAddSynchCounters((_SYNCH_COUNTERS *)v30, v18);
RtlStringCbPrintfW(pszDest, 0x16ui64, (WCHAR *)&stru_1407D2340.Xmm15);
RtlInitUnicodeString(&DestinationString, pszDest, v19);
Data.Data = v17;
Data.Size = 184;
LODWORD(v20) = PcwAddInstance(Buffer, &DestinationString, Id, 1u, &Data);
if( (int)v20 < 0 )
return v20;
++v16;
}
RtlStringCbPrintfW(pszDest, 0x16ui64, (WCHAR *)&stru_1407D2340.TrapFrame);
RtlInitUnicodeString(&DestinationString, pszDest, v21);
v25.Data = result;
v25.Size = 184;
LODWORD(v20) = PcwAddInstance(Buffer, &DestinationString, v11 + KeMaximumProcessors, 1u, &v25);
if( (int)v20 < 0 )
return v20;
}
++v11;
}
RtlStringCbPrintfW(pszDest, 0x16ui64, (WCHAR *)&stru_1407D2340.MxCsr);
RtlInitUnicodeString(&DestinationString, pszDest, v22);
v25.Data = v30;
v25.Size = 184;
LODWORD(v20) = PcwAddInstance(
Buffer,
&DestinationString,
KeMaximumProcessors + (unsigned __int16)KeNumberNodes,
1u,
&v25);
return v20;
}Referenced by:
No references.