PipCheckDependencies

UINT64 __stdcall PipCheckDependencies(PVOID KeyHandle){
  WCHAR v1; 
  PVOID v3; 
  unsigned int v4; 
  int v5; 
  const WCHAR *v6; 
  __int64 MaximumLength; 
  CHAR *v8; 
  struct _UNICODE_STRING DestinationString; 
  PVOID P; 
  P = 0i64;
  DestinationString = 0i64;
  if( IopGetRegistryValue(KeyHandle, (PWCHAR)L"DependOnGroup", 0i64, (KEY_VALUE_FULL_INFORMATION **)&P) < 0 )
    return 1i64;
  v3 = P;
  v4 = 1;
  v5 = *((_DWORD *)P + 3);
  v6 = (const WCHAR *)((char *)P + *((unsigned int *)P + 2));
  if( v5 )
  {
    while( 1 )
    {
      RtlInitUnicodeString(&DestinationString, v6, v1);
      MaximumLength = DestinationString.MaximumLength;
      DestinationString.Length = DestinationString.MaximumLength;
      v8 = PipLookupGroupName(&DestinationString, 0);
      if( v8 )
      {
        if( !*((_DWORD *)v8 + 7) )
          break;
      }
      v6 = (const WCHAR *)((char *)v6 + MaximumLength);
      v5 -= MaximumLength;
      if( !v5 )
        goto LABEL_8;
    }
    v4 = 0;
  }
LABEL_8:
  ExFreePoolWithTag(v3, 0);
  return v4;
}

Referenced by:

IopInitializeBootDrivers
IopInitializeSystemDrivers