PiDmInitializeComparisonObject

NTSTATUS __stdcall PiDmInitializeComparisonObject(
        WCHAR *ObjectName,
        PNP_OBJECT_TYPE ObjectType,
        PI_DM_OBJECT *ComparisonObject){
  WCHAR *Buffer; 
  NTSTATUS result; 
  __int64 v6; 
  WCHAR *v7; 
  unsigned __int16 Length; 
  unsigned __int16 MaximumLength; 
  _UNICODE_STRING String; 

  *((_QWORD *)ComparisonObject + 2) = ObjectName;
  ComparisonObject[7] = ObjectType;
  Buffer = ObjectName;
  result = 0;
  String = 0i64;
  if( !ObjectName )
    goto LABEL_13;
  v6 = 0x7FFFi64;
  v7 = ObjectName;
  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( ObjectType == 3 )
    {
      if( Length <= 8u )
        return -1073741772;
      String.Length = Length - 8;
      String.Buffer = Buffer + 4;
      String.MaximumLength = MaximumLength - 8;
    }
    return RtlHashUnicodeString(&String, 1u, 0i64, (UINT64 *)ComparisonObject + 3);
  }
  return result;
}

Referenced by:

PiDmAddCacheReferenceForObject
PiDmLookupObject
PiPnpRtlObjectEventCreate