EtwpProviderArrivalCallback
NTSTATUS __stdcall EtwpProviderArrivalCallback(_WMI_LOGGER_CONTEXT *LoggerContext, CHAR Mode, _ETW_REG_ENTRY *RegEntry){
void *Callback;
NTSTATUS v7;
NTSTATUS DbgIdForRegEntry;
char *v9;
NTSTATUS FileNameForAddress;
unsigned int v12;
_UNICODE_STRING FilePath;
char v14[512];
Callback = RegEntry->Callback;
*(_DWORD *)(&FilePath.MaximumLength + 1) = 0;
v7 = 0;
if( !Callback )
return -1073741503;
if( (RegEntry->Flags & 0x20) != 0 || (LoggerContext->Flags & 0x2000000) != 0 )
{
*(_DWORD *)&FilePath.Length = 0x2000000;
FilePath.Buffer = (wchar_t *)v14;
if( Mode )
FileNameForAddress = MmGetFileNameForAddress(Callback, &FilePath);
else
FileNameForAddress = RtlPcToFilePath(Callback, &FilePath);
v7 = FileNameForAddress;
if( FileNameForAddress >= 0 )
EtwpTrackBinaryForSession((INT64)LoggerContext, (UINT8 **)&FilePath, (INT64)&RegEntry->GuidEntry->Guid);
if( (char *)FilePath.Buffer != v14 )
ExFreePoolWithTag(FilePath.Buffer, 0);
}
if( (RegEntry->Flags & 8) == 0 )
return v7;
if( (LoggerContext->LoggerMode & 0x80u) == 0 )
{
v12 = 512;
*(_QWORD *)&FilePath.Length = v14;
DbgIdForRegEntry = EtwpLocateDbgIdForRegEntry(
Mode,
(INT64)RegEntry,
(_XSTATE_CONFIGURATION *)&FilePath,
(_XSTATE_CONFIGURATION *)&v12);
v9 = *(char **)&FilePath.Length;
v7 = DbgIdForRegEntry;
if( DbgIdForRegEntry >= 0 )
{
EtwpTrackDebugIdForSession(LoggerContext, *(_QWORD *)&FilePath.Length, v12);
if( (LoggerContext->LoggerMode & 0x80000) != 0
&& (!(_BYTE)KdDebuggerNotPresent && !KdPitchDebugger || KdEventLoggingPresent) )
{
EtwpSendDbgId(LoggerContext);
}
}
if( v9 != v14 )
ExFreePoolWithTag(v9, 0);
return v7;
}
return -1073741637;
}Referenced by:
EtwpAddRegEntryToGroup
EtwpEnableGuid
EtwpTrackGuidEntryRegistrations
EtwpTrackProviderBinary
EtwpTrackProviderRegistration