PiDmInitializeComparisonObject

NTSTATUS __fastcall PiDmInitializeComparisonObject(_WORD *a1, INT64 a2, INT64 a3){
  int v3; 
  wchar_t *Buffer; 
  NTSTATUS result; 
  __int64 v6; 
  _WORD *v7; 
  unsigned __int16 Length; 
  unsigned __int16 MaximumLength; 
  UNICODE_STRING String; 
  *(_QWORD *)(a3 + 16) = a1;
  *(_DWORD *)(a3 + 28) = a2;
  v3 = a2;
  Buffer = a1;
  result = 0;
  String = 0i64;
  if( !a1 )
    goto LABEL_13;
  v6 = 0x7FFFi64;
  v7 = a1;
  do
  {
    if( !*v7 )
      break;
    ++v7;
    --v6;
  }
  while( v6 );
  result = v6 == 0 ? 0xC000000D : 0;
  if( v6 )
  {
    Length = 2 * (v6 != 0 ? 0x7FFF - v6 : 0);
    String.Buffer = Buffer;
    String.Length = Length;
    MaximumLength = Length + 2;
    String.MaximumLength = Length + 2;
  }
  else
  {
LABEL_13:
    Buffer = String.Buffer;
    MaximumLength = String.MaximumLength;
    Length = String.Length;
  }
  if( result >= 0 )
  {
    if( v3 == 3 )
    {
      if( Length <= 8u )
        return -1073741772;
      String.Length = Length - 8;
      String.Buffer = Buffer + 4;
      String.MaximumLength = MaximumLength - 8;
    }
    return RtlHashUnicodeString(&String, 1u, 0i64, (UINT64 *)(a3 + 24));
  }
  return result;
}

Referenced by:

PiDmAddCacheReferenceForObject
PiDmLookupObject
PiPnpRtlObjectEventCreate