CmpDoSort

UINT8 __fastcall CmpDoSort(_LIST_ENTRY *DriverListHead, _UNICODE_STRING *OrderList){
  unsigned __int16 *v3; 
  __int16 v4; 
  wchar_t *v5; 
  _LIST_ENTRY *v6; 
  wchar_t *i; 
  _LIST_ENTRY *Blink; 
  _LIST_ENTRY *v9; 
  _LIST_ENTRY *v10; 
  _LIST_ENTRY **p_Blink; 
  _LIST_ENTRY *Flink; 
  _LIST_ENTRY *v13; 
  UNICODE_STRING String1; 
  _LIST_ENTRY **v16; 
  String1 = 0i64;
  if( !CmpSortByTag(DriverListHead) )
    return 0;
  v4 = 0;
  v5 = (wchar_t *)*((_QWORD *)v3 + 1);
  v6 = DriverListHead;
  for( i = &v5[((unsigned __int64)*v3 >> 1) - 1]; i > v5; --i )
  {
    do
    {
      if( !*i )
        v4 = (__int16)i;
      --i;
    }
    while( i != v5 && *(i - 1) );
    Blink = DriverListHead->Blink;
    String1.Buffer = i;
    String1.Length = v4 - (_WORD)i;
    String1.MaximumLength = v4 - (_WORD)i;
    while( Blink != v6 )
    {
      v9 = Blink;
      if( Blink == DriverListHead )
        break;
      v10 = Blink;
      p_Blink = &Blink->Blink;
      Blink = Blink->Blink;
      v16 = p_Blink;
      if( v10[7].Flink && RtlEqualUnicodeString(&String1, (UNICODE_STRING *)&v10[6].Blink, 1u) )
      {
        Flink = v10->Flink;
        if( v10->Flink->Blink != v10
          || Blink->Flink != v10
          || (Blink->Flink = Flink,
              Flink->Blink = Blink,
              v13 = DriverListHead->Flink,
              DriverListHead->Flink->Blink != DriverListHead) )
        {
          __fastfail(3u);
        }
        v10->Flink = v13;
        if( v6 != DriverListHead )
          v9 = v6;
        v6 = v9;
        *v16 = DriverListHead;
        v13->Blink = v10;
        DriverListHead->Flink = v10;
      }
    }
  }
  return 1;
}

Referenced by:

CmpSortDriverList