WdipSemEnableScenario
NTSTATUS __stdcall WdipSemEnableScenario(const _GUID *ProviderGuid, UINT16 Eid, const _GUID *ScenarioInstanceId){
_ETHREAD *CurrentThread;
_WDIP_SEM_SCENARIO_INSTANCE_INFO *v4;
char v5;
int a5;
_WDIP_SEM_SCENARIO_INFO *ScenarioTable;
_WDIP_SEM_SCENARIO_INSTANCE_INFO *v11;
_ETHREAD *v13;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v4 = 0i64;
v5 = 0;
--CurrentThread->Tcb.KernelApcDisable;
ExAcquirePushLockSharedEx((_EX_PUSH_LOCK *)&ExBootDevicesRemovedEvent + 559, 0i64);
if( !ProviderGuid || !ScenarioInstanceId )
{
a5 = -1073741811;
goto LABEL_15;
}
if( !*(&ExBootDevicesRemovedEvent + 4464) )
goto LABEL_14;
a5 = WdipSemGetLoggerIds();
if( a5 >= 0 )
{
ScenarioTable = WdipSemQueryScenarioTable((_GUID *)ProviderGuid, Eid);
if( ScenarioTable )
{
v11 = WdipSemReserveInstanceTableEntry(ScenarioTable, (_GUID *)ScenarioInstanceId);
v4 = v11;
if( v11 )
{
WdipSemEnableContextProviders(v11);
goto LABEL_8;
}
}
LABEL_14:
a5 = -1073741823;
goto LABEL_15;
}
v5 = 1;
LABEL_8:
if( a5 >= 0 )
{
if( EtwEventEnabled(*(&ExBootDevicesRemovedEvent + 560), &WDI_SEM_EVENT_SCENARIO_START) )
WdipSemWriteSemActionsEvent((_GUID *)&WDI_SEM_EVENT_SCENARIO_START, (INT64)v4);
WdipSemActivateInstance(v4);
goto LABEL_12;
}
LABEL_15:
if( EtwEventEnabled(*(&ExBootDevicesRemovedEvent + 560), &WDI_SEM_EVENT_SCENARIO_START_FAILED) )
WdipSemWriteSemFailureEvent(
(const in6_addr *)&WDI_SEM_EVENT_SCENARIO_START_FAILED,
(INT64)ProviderGuid,
Eid,
(INT64)ScenarioInstanceId,
a5);
if( v4 )
WdipSemDeleteTransitionalInstance(v4);
LABEL_12:
ExReleasePushLockEx((ULONG_PTR)&ExBootDevicesRemovedEvent + 4472, 0);
KeLeaveCriticalRegionThread(KeGetCurrentThread());
if( v5 )
{
v13 = (_ETHREAD *)KeGetCurrentThread();
--v13->Tcb.KernelApcDisable;
ExAcquirePushLockExclusiveEx((_EX_PUSH_LOCK *)&ExBootDevicesRemovedEvent + 559, 0i64);
if( *(&ExBootDevicesRemovedEvent + 4464) )
WdipSemShutdown();
ExReleasePushLockEx((ULONG_PTR)&ExBootDevicesRemovedEvent + 4472, 0);
KeLeaveCriticalRegionThread(KeGetCurrentThread());
}
return a5;
}Referenced by:
WdipStartEndScenario