CompareNamesCaseSensitive

_COMPARISON __stdcall CompareNamesCaseSensitive(_STRING *Prefix, _STRING *Name){
  __int64 Length; 
  unsigned int v3; 
  char *Buffer; 
  _SIZE_T v7; 
  char *v8; 
  unsigned int v9; 
  unsigned int v10; 
  char *v11; 
  __int64 v12; 
  char *v13; 
  unsigned __int8 v14; 
  unsigned __int8 v15; 
  char v16; 
  char v17; 
  unsigned __int8 v18; 
  unsigned __int8 v19; 
  unsigned int i; 

  Length = Prefix->Length;
  v3 = Name->Length;
  if( (_WORD)Length == 1 && *Prefix->Buffer == 92 && (unsigned __int16)v3 > 1u && *Name->Buffer == 92 )
    return 1;
  Buffer = Name->Buffer;
  v7 = Prefix->Length;
  v8 = Prefix->Buffer;
  if( (unsigned __int16)Length >= (unsigned __int16)v3 )
    v7 = v3;
  v9 = v7;
  v10 = (unsigned int)RtlCompareMemory(v8, Buffer, v7);
  if( v10 < v9 )
  {
    v11 = Prefix->Buffer;
    v12 = 0i64;
    v13 = Name->Buffer;
    v14 = 0;
    v15 = 0;
    v16 = v11[v10];
    v17 = v13[v10];
    if( v16 != 92 )
      v14 = v11[v10];
    v18 = v14;
    if( v17 != 92 )
      v15 = v13[v10];
    v19 = v15;
    if( (_BYTE)NlsMbCodePageTag )
    {
      if( v16 == 92 )
      {
        for( i = 0; i < v10; i += (NlsLeadByteInfoTable[(unsigned __int8)v11[i]] != 0) + 1 )
          ;
        v18 = v14;
        if( i != v10 )
          v18 = 92;
      }
      v19 = v15;
      if( v17 == 92 )
      {
        if( v10 )
        {
          do
            LODWORD(v12) = (NlsLeadByteInfoTable[(unsigned __int8)v13[v12]] != 0) + 1 + v12;
          while( (unsigned int)v12 < v10 );
        }
        v19 = v15;
        if( (_DWORD)v12 != v10 )
          v19 = 92;
      }
    }
    if( v18 < v19 )
      return 0;
    if( v18 > v19 )
      return 3;
  }
  if( (unsigned int)Length < v3 )
    return Name->Buffer[Length] == 92;
  if( (unsigned int)Length <= v3 )
    return 2;
  else
    return 3;
}

Referenced by:

PfxFindPrefix
PfxInsertPrefix