WdipSemReserveInstanceTableEntry
_QWORD *__fastcall WdipSemReserveInstanceTableEntry(unsigned __int64 a1, GUID *a2){
_ETHREAD *CurrentThread;
_QWORD *v3;
_QWORD *v6;
_QWORD *v7;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v3 = 0i64;
--*((_WORD *)CurrentThread + 242);
ExAcquirePushLockExclusiveEx((UINT64)&qword_140C1A3B8, 0i64);
if( a1 && a2 )
{
if( (unsigned int)dword_140C1A3B0 >= 0x80 )
{
WdipSemLogInflightLimitExceededInformation((const _GUID *)a1, *(_WORD *)(a1 + 16), a2);
}
else if( !WdipSemQueryEnabledInstanceTable(a2) )
{
WdipSemBuildScenarioInstance(a1);
v3 = v6;
if( v6 )
{
v7 = (_QWORD *)qword_140C1A3A8;
if( *(INT64 ***)qword_140C1A3A8 != &WdipSemEnabledInstanceTable )
__fastfail(3u);
*v3 = &WdipSemEnabledInstanceTable;
v3[1] = v7;
*v7 = v3;
++dword_140C1A3B0;
qword_140C1A3A8 = (__int64)v3;
}
}
}
ExReleasePushLockEx((UINT64)&qword_140C1A3B8, 0i64);
KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
return v3;
}Referenced by:
WdipSemEnableScenario