PipLookupGroupName

CHAR *__fastcall PipLookupGroupName(PCUNICODE_STRING String1, int a2){
  __int64 v2; 
  unsigned __int16 Length; 
  __int64 v6; 
  CHAR *result; 
  __int64 i; 
  v2 = IopGroupListHead;
  if( IopGroupListHead )
  {
    Length = String1->Length;
    while( 1 )
    {
      if( Length >= *(_WORD *)(v2 + 32) )
      {
        if( Length <= *(_WORD *)(v2 + 32) )
        {
          if( RtlEqualUnicodeString((UNICODE_STRING *)String1, (UNICODE_STRING *)(v2 + 32), 1u) )
            return(CHAR *)v2;
          for( i = *(_QWORD *)(v2 + 16); i; i = *(_QWORD *)(i + 16) )
          {
            if( RtlEqualUnicodeString((UNICODE_STRING *)String1, (UNICODE_STRING *)(i + 32), 1u) )
              return(CHAR *)i;
            v2 = *(_QWORD *)(v2 + 16);
          }
          if( a2 )
          {
            result = PipCreateEntry((const VOID **)String1);
            *(_QWORD *)(v2 + 16) = result;
            return result;
          }
          return 0i64;
        }
        v6 = *(_QWORD *)(v2 + 8);
        if( !v6 )
        {
          if( !a2 )
            return 0i64;
          result = PipCreateEntry((const VOID **)String1);
          *(_QWORD *)(v2 + 8) = result;
          return result;
        }
      }
      else
      {
        v6 = *(_QWORD *)v2;
        if( !*(_QWORD *)v2 )
        {
          if( !a2 )
            return 0i64;
          result = PipCreateEntry((const VOID **)String1);
          *(_QWORD *)v2 = result;
          return result;
        }
      }
      v2 = v6;
    }
  }
  if( !a2 )
    return 0i64;
  result = PipCreateEntry((const VOID **)String1);
  IopGroupListHead = (__int64)result;
  return result;
}

Referenced by:

IopInitializeBootDrivers
IopInitializeSystemDrivers
PipCheckDependencies