WdipSemReserveInstanceTableEntry

_WDIP_SEM_SCENARIO_INSTANCE_INFO *__stdcall WdipSemReserveInstanceTableEntry(
        _WDIP_SEM_SCENARIO_INFO *Scenario,
        _GUID *ScenarioInstanceId){
  _ETHREAD *CurrentThread; 
  _WDIP_SEM_SCENARIO_INSTANCE_INFO *v3; 
  _WDIP_SEM_SCENARIO_INSTANCE_INFO **v6; 

  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v3 = 0i64;
  --CurrentThread->Tcb.KernelApcDisable;
  ExAcquirePushLockExclusiveEx((_EX_PUSH_LOCK *)&ExBootDevicesRemovedEvent + 567, 0i64);
  if( Scenario && ScenarioInstanceId )
  {
    if( *(&ExBootDevicesRemovedEvent + 1132) >= 0x80u )
    {
      WdipSemLogInflightLimitExceededInformation((const _GUID *)Scenario, *((_WORD *)Scenario + 8), ScenarioInstanceId);
    }
    else if( !WdipSemQueryEnabledInstanceTable(ScenarioInstanceId) )
    {
      v3 = WdipSemBuildScenarioInstance(Scenario, ScenarioInstanceId);
      if( v3 )
      {
        v6 = (_WDIP_SEM_SCENARIO_INSTANCE_INFO **)*(&ExBootDevicesRemovedEvent + 565);
        if( (_UNKNOWN *)**(&ExBootDevicesRemovedEvent + 565) != (_UNKNOWN *)((char *)&ExBootDevicesRemovedEvent + 4512) )
          __fastfail(3u);
        *(_QWORD *)v3 = (char *)&ExBootDevicesRemovedEvent + 4512;
        *((_QWORD *)v3 + 1) = v6;
        *v6 = v3;
        ++*(&ExBootDevicesRemovedEvent + 1132);
        *(&ExBootDevicesRemovedEvent + 565) = v3;
      }
    }
  }
  ExReleasePushLockEx((ULONG_PTR)&ExBootDevicesRemovedEvent + 4536, 0);
  KeLeaveCriticalRegionThread(KeGetCurrentThread());
  return v3;
}

Referenced by:

WdipSemEnableScenario