CmpCompareCompressedName

INT64 __stdcall CmpCompareCompressedName(
        UNICODE_STRING *SearchName,
        WCHAR *CompressedName,
        UINT64 NameLength,
        UINT64 CompareFlags){
  char v4; 
  unsigned __int16 v5; 
  unsigned __int16 v6; 
  wchar_t *Buffer; 
  UINT16 v9; 
  unsigned int v10; 

  v4 = CompareFlags;
  v5 = SearchName->Length >> 1;
  v6 = NameLength;
  Buffer = SearchName->Buffer;
  if( v5 )
  {
    while( v6 )
    {
      v9 = *Buffer++;
      v10 = *(unsigned __int8 *)CompressedName;
      CompressedName = (WCHAR *)((char *)CompressedName + 1);
      if( v9 != (_WORD)v10 )
      {
        if( (v4 & 1) == 0 && v9 >= 0x61u )
        {
          if( v9 > 0x7Au )
            v9 = NLS_UPCASE(v9);
          else
            v9 -= 32;
        }
        if( (v4 & 2) == 0 && v10 >= 0x61 )
        {
          if( v10 > 0x7A )
            LOWORD(v10) = NLS_UPCASE(v10);
          else
            LOWORD(v10) = v10 - 32;
        }
        if( v9 != (unsigned __int16)v10 )
          return v9 - (unsigned int)(unsigned __int16)v10;
      }
      --v6;
      if( !--v5 )
        return v5 - (unsigned int)v6;
    }
  }
  return v5 - (unsigned int)v6;
}

Referenced by:

CmpCheckLexicographicalOrder
CmpCompareKeysByName
CmpDoCompareKeyName
CmpFindKcbInHashEntryByCompressedName
CmpFindKcbInHashEntryByName
CmpFindNameInListCellWithStatus
CmpGetNameControlBlock
CmpSortedValueEnumStackValueCompareFunction