CmpInsertCallbackInListByAltitude
INT64 __fastcall CmpInsertCallbackInListByAltitude(INT64 a1, CHAR a2){
_ETHREAD *CurrentThread;
unsigned int v3;
_LIST_ENTRY *Flink;
NTSTATUS v7;
_LIST_ENTRY *Blink;
_LIST_ENTRY *v9;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v3 = 0;
--*((_WORD *)CurrentThread + 242);
ExAcquirePushLockExclusiveEx((UINT64)&CmpCallbackListLock, 0i64);
*(_QWORD *)(a1 + 24) = ++CmpCallbackCookie;
Flink = CallbackListHead.Flink;
if( CallbackListHead.Flink != &CallbackListHead )
{
do
{
v7 = RtlCompareAltitudes((UNICODE_STRING *)&Flink[3], (UNICODE_STRING *)(a1 + 48));
if( v7 )
{
if( v7 < 0 )
break;
}
else if( !a2 )
{
goto LABEL_12;
}
Flink = Flink->Flink;
}
while( Flink != &CallbackListHead );
if( !v7 && !a2 )
{
LABEL_12:
v3 = -1071906799;
goto LABEL_8;
}
}
Blink = Flink->Blink;
v9 = Blink->Flink;
if( Blink->Flink->Blink != Blink )
__fastfail(3u);
*(_QWORD *)a1 = v9;
*(_QWORD *)(a1 + 8) = Blink;
v9->Blink = (_LIST_ENTRY *)a1;
Blink->Flink = (_LIST_ENTRY *)a1;
_InterlockedIncrement(&CmpCallBackCount);
LABEL_8:
ExReleasePushLockEx((UINT64)&CmpCallbackListLock, 0i64);
KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
return v3;
}Referenced by:
CmpRegisterCallbackInternal