WdipSemEnableScenario
INT64 __fastcall WdipSemEnableScenario(const _GUID *ProviderGuid, UINT16 Eid, const _GUID *ScenarioInstanceId){
_ETHREAD *CurrentThread;
struct SLIST_ENTRY *v4;
char v5;
EVENT_DESCRIPTOR *v9;
int LoggerIds;
unsigned __int64 ScenarioTable;
struct SLIST_ENTRY *v12;
_ETHREAD *v14;
INT64 NtStatus;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v4 = 0i64;
v5 = 0;
--*((_WORD *)CurrentThread + 242);
ExAcquirePushLockSharedEx((UINT64)&WdipSemPushLock, 0i64);
if( !ProviderGuid || !ScenarioInstanceId )
{
LoggerIds = -1073741811;
goto LABEL_15;
}
if( !WdipSemEnabled )
goto LABEL_14;
LoggerIds = WdipSemGetLoggerIds();
if( LoggerIds >= 0 )
{
ScenarioTable = WdipSemQueryScenarioTable(ProviderGuid, Eid);
if( ScenarioTable )
{
v12 = (struct SLIST_ENTRY *)WdipSemReserveInstanceTableEntry(ScenarioTable, (GUID *)ScenarioInstanceId);
v4 = v12;
if( v12 )
{
WdipSemEnableContextProviders((INT64)v12);
goto LABEL_8;
}
}
LABEL_14:
LoggerIds = -1073741823;
goto LABEL_15;
}
v5 = 1;
LABEL_8:
if( LoggerIds >= 0 )
{
if( EtwEventEnabled(WdipSemRegHandle, (EVENT_DESCRIPTOR *)&WDI_SEM_EVENT_SCENARIO_START, v9) )
WdipSemWriteSemActionsEvent((GUID *)&WDI_SEM_EVENT_SCENARIO_START, (INT64)v4);
WdipSemActivateInstance((__int64)v4);
goto LABEL_12;
}
LABEL_15:
if( EtwEventEnabled(WdipSemRegHandle, (EVENT_DESCRIPTOR *)&WDI_SEM_EVENT_SCENARIO_START_FAILED, v9) )
{
LODWORD(NtStatus) = LoggerIds;
WdipSemWriteSemFailureEvent(&WDI_SEM_EVENT_SCENARIO_START_FAILED, ProviderGuid, Eid, ScenarioInstanceId, NtStatus);
}
if( v4 )
WdipSemDeleteTransitionalInstance(v4);
LABEL_12:
ExReleasePushLockEx((UINT64)&WdipSemPushLock, 0i64);
KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
if( v5 )
{
v14 = (_ETHREAD *)KeGetCurrentThread();
--*((_WORD *)v14 + 242);
ExAcquirePushLockExclusiveEx((UINT64)&WdipSemPushLock, 0i64);
if( WdipSemEnabled )
WdipSemShutdown();
ExReleasePushLockEx((UINT64)&WdipSemPushLock, 0i64);
KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
}
return(unsigned int)LoggerIds;
}Referenced by:
WdipStartEndScenario