KiSynchCounterSetCallback
NTSTATUS __stdcall KiSynchCounterSetCallback(_PCW_CALLBACK_TYPE Type, _PCW_CALLBACK_INFORMATION *Info, PVOID Context){
__int32 v3;
__int32 v4;
struct _PCW_BUFFER *Buffer;
ULONG v6;
ULONG ActiveProcessorCount;
_KPRCB **i;
_KPRCB *v9;
WCHAR v10;
NTSTATUS result;
struct _PCW_DATA Data;
struct _UNICODE_STRING DestinationString;
wchar_t pszDest[12];
DestinationString = 0i64;
if( Type == PcwCallbackAddCounter )
{
EtwReferenceSpinLockCounters(*(UINT64 *)&Type, (INT64)Info, (INT64)Context);
return 0;
}
v3 = Type - 1;
if( !v3 )
{
EtwDereferenceSpinLockCounters();
return 0;
}
v4 = v3 - 1;
if( v4 && v4 != 1 )
return 0;
Buffer = Info->EnumerateInstances.Buffer;
v6 = 0;
ActiveProcessorCount = KeQueryActiveProcessorCountEx(0xFFFFu);
if( !ActiveProcessorCount )
return 0;
for( i = &KiProcessorBlock; ; ++i )
{
v9 = *i;
RtlStringCbPrintfW(pszDest, 0x16ui64, (WCHAR *)L"%u");
RtlInitUnicodeString(&DestinationString, pszDest, v10);
Data.Size = 184;
Data.Data = (char *)v9 + 33984;
result = PcwAddInstance(Buffer, &DestinationString, v6, 1u, &Data);
if( result < 0 )
break;
if( ++v6 >= ActiveProcessorCount )
return 0;
}
return result;
}Referenced by:
No references.