EncodeAttributeName

UINT64 __stdcall EncodeAttributeName(UINT8 *Value, UINT64 ValueSize, WCHAR **EncodedString){
  unsigned int v3; 
  unsigned int v5; 
  UINT8 *v6; 
  unsigned int v7; 
  WCHAR *v8; 
  __int64 v9; 
  UINT8 v10; 
  WCHAR *v11; 
  __int64 v12; 

  v3 = 0;
  v5 = ValueSize;
  v6 = Value;
  v7 = 0;
  if( !Value || !(_DWORD)ValueSize || !EncodedString )
    return 87i64;
  if( (ValueSize & 1) != 0 )
  {
    return 1336;
  }
  else
  {
    v8 = (WCHAR *)SddlpAlloc((unsigned int)(5 * ValueSize) + 2i64, ValueSize, (UINT64)EncodedString);
    *EncodedString = v8;
    if( v8 )
    {
      v9 = v5 >> 1;
      if( (_DWORD)v9 )
      {
        do
        {
          v10 = IsEncodedAttributeChar(*(_WORD *)v6);
          v11 = *EncodedString;
          v12 = v7;
          if( v10 )
          {
            v11[v7] = 37;
            v11[v7 + 1] = a0123456789abcd[(unsigned __int64)*(unsigned __int16 *)v6 >> 12];
            v11[v7 + 2] = a0123456789abcd[v6[1] & 0xF];
            v11[v7 + 3] = a0123456789abcd[(*(_WORD *)v6 >> 4) & 0xF];
            v11[v7 + 4] = a0123456789abcd[*v6 & 0xF];
            v7 += 5;
          }
          else
          {
            ++v7;
            v11[v12] = *(_WORD *)v6;
          }
          v6 += 2;
          --v9;
        }
        while( v9 );
      }
    }
    else
    {
      return 8;
    }
  }
  return v3;
}

Referenced by:

GetPrintableAttributeName
LocalGetStringForRelativeAttribute