WdipSemDisableScenario

NTSTATUS __stdcall WdipSemDisableScenario(const _GUID *ProviderGuid, UINT16 Eid, const _GUID *ScenarioInstanceId){
  _ETHREAD *CurrentThread; 
  _WDIP_SEM_SCENARIO_INSTANCE_INFO *v4; 
  char v5; 
  int a5; 
  _WDIP_SEM_SCENARIO_INSTANCE_INFO *v10; 
  _ETHREAD *v12; 

  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 )
  {
    v5 = 1;
    goto LABEL_8;
  }
  v10 = WdipSemMarkInstanceForDeletion((_GUID *)ScenarioInstanceId);
  v4 = v10;
  if( !v10 )
  {
LABEL_14:
    a5 = -1073741823;
    goto LABEL_15;
  }
  a5 = WdipSemValidateEndEvent((_GUID *)ProviderGuid, Eid, *((_WDIP_SEM_SCENARIO_INFO **)v10 + 4));
  if( a5 < 0 )
    goto LABEL_15;
  WdipSemDisableContextProviders(v4, 0);
LABEL_8:
  if( a5 >= 0 )
  {
    if( EtwEventEnabled(*(&ExBootDevicesRemovedEvent + 560), &WDI_SEM_EVENT_SCENARIO_END) )
      WdipSemWriteSemActionsEvent((_GUID *)&WDI_SEM_EVENT_SCENARIO_END, (INT64)v4);
    WdipSemDeleteTransitionalInstance(v4);
    goto LABEL_12;
  }
LABEL_15:
  if( EtwEventEnabled(*(&ExBootDevicesRemovedEvent + 560), &WDI_SEM_EVENT_SCENARIO_END_FAILED) )
    WdipSemWriteSemFailureEvent(
      (const in6_addr *)&WDI_SEM_EVENT_SCENARIO_END_FAILED,
      (INT64)ProviderGuid,
      Eid,
      (INT64)ScenarioInstanceId,
      a5);
  if( v4 )
    WdipSemActivateInstance(v4);
LABEL_12:
  ExReleasePushLockEx((ULONG_PTR)&ExBootDevicesRemovedEvent + 4472, 0);
  KeLeaveCriticalRegionThread(KeGetCurrentThread());
  if( v5 )
  {
    v12 = (_ETHREAD *)KeGetCurrentThread();
    --v12->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