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