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