MiUpdatePerSessionProto
VOID __stdcall MiUpdatePerSessionProto(
_CONTROL_AREA *ControlArea,
_SUBSECTION *Subsection,
_MI_PER_SESSION_PROTOS *Protos,
UINT64 Insert){
INT64 *v4;
int v5;
unsigned __int64 v8;
__int64 v9;
bool v10;
__int64 v11;
v4 = (INT64 *)((char *)ControlArea + 72);
v5 = Insert;
v8 = ExAcquireSpinLockExclusive((PEX_SPIN_LOCK)ControlArea + 18);
if( !v5 )
{
RtlAvlRemoveNode((unsigned __int64 *)Subsection + 3, (__int64 *)Protos);
goto LABEL_9;
}
v9 = *((_QWORD *)Subsection + 3);
v10 = 0;
if( !v9 )
goto LABEL_8;
while( *((_DWORD *)Protos + 16) < *(_DWORD *)(v9 + 64) )
{
v11 = *(_QWORD *)v9;
if( !*(_QWORD *)v9 )
goto LABEL_8;
LABEL_5:
v9 = v11;
}
v11 = *(_QWORD *)(v9 + 8);
if( v11 )
goto LABEL_5;
v10 = 1;
LABEL_8:
RtlAvlInsertNodeEx((unsigned __int64 *)Subsection + 3, v9, v10, Protos);
LABEL_9:
ExReleaseSpinLockExclusiveFromDpcLevel(v4);
__writecr8(v8);
}Referenced by:
MiCreatePerSessionProtos
MiDereferenceSubsectionProtos