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