CmpSortByTag

UINT8 __stdcall CmpSortByTag(_LIST_ENTRY *DriverListHead){
  _LIST_ENTRY *Flink; 
  _LIST_ENTRY *Blink; 
  _LIST_ENTRY *v4; 
  _LIST_ENTRY *v5; 
  _LIST_ENTRY *v6; 
  _LIST_ENTRY *v7; 
  _LIST_ENTRY *i; 
  _LIST_ENTRY *v9; 

  Flink = DriverListHead->Flink;
  Blink = DriverListHead->Blink;
  v4 = DriverListHead->Flink->Flink;
  if( DriverListHead->Flink != Blink )
  {
    while( 1 )
    {
      if( LODWORD(Flink[8].Blink) > LODWORD(v4[8].Blink) )
      {
        v5 = v4->Flink;
        v6 = Flink;
        if( v4 != Blink )
          v6 = Blink;
        Blink = v6;
        if( v5->Blink != v4 )
          goto LABEL_16;
        v7 = v4->Blink;
        if( v7->Flink != v4 )
          goto LABEL_16;
        v7->Flink = v5;
        v5->Blink = v7;
        for( i = DriverListHead->Flink; i != Flink; i = i->Flink )
        {
          if( LODWORD(i[8].Blink) >= LODWORD(v4[8].Blink) )
            break;
        }
        v9 = i->Blink;
        if( v9->Flink != i )
LABEL_16:
          __fastfail(3u);
        v4->Flink = i;
        v4->Blink = v9;
        v9->Flink = v4;
        i->Blink = v4;
        v4 = Flink;
      }
      else
      {
        Flink = v4;
      }
      if( Flink == Blink )
        break;
      v4 = v4->Flink;
    }
  }
  return 1;
}

Referenced by:

CmpDoSort