WdipSemUpdateProviderTableWithEvent
NTSTATUS __fastcall WdipSemUpdateProviderTableWithEvent(_GUID *ProviderGuid){
NTSTATUS v1;
__int64 ProviderTable;
_GUID *v5;
_GUID *v6;
v1 = 0;
if( !ProviderGuid )
return -1073741811;
ProviderTable = WdipSemQueryProviderTable(ProviderGuid);
if( ProviderTable )
{
*(_QWORD *)ProviderGuid[2].Data4 = ProviderTable;
}
else if( (unsigned int)OldNumProviders >= 0x400 )
{
if( EtwEventEnabled(*(&ExBootDevicesRemovedEvent + 560), &WDI_SEM_EVENT_INIT_PROVIDER_MAX) )
WdipSemWriteProviderLimitExceededEvent(ProviderGuid);
return -1073741823;
}
else
{
v5 = (_GUID *)WdipSemFastAllocate(WDI_SEM_ALLOC_PROVIDER, 0x50ui64);
v6 = v5;
if( v5 )
{
memset(v5, 0i64, 0x50u);
*v6 = *ProviderGuid;
*((_QWORD *)&ExBootDevicesRemovedEvent + (unsigned int)OldNumProviders + 568) = v6;
LODWORD(OldNumProviders) = OldNumProviders + 1;
*(_QWORD *)ProviderGuid[2].Data4 = v6;
}
else
{
return -1073741670;
}
}
return v1;
}Referenced by:
WdipSemUpdateProviderTableWithScenario