PipCheckForUnsatisfiedDependencies

char __fastcall PipCheckForUnsatisfiedDependencies(__int64 a1, unsigned __int8 a2){
  DEVICE_OBJECT *v2; 
  LIST_ENTRY *ProviderList; 
  __int64 v5; 
  LIST_ENTRY *Flink; 
  __int64 v8; 
  UINT64 DependencyTypes; 
  DEVICE_OBJECT *Provider; 
  v2 = *(DEVICE_OBJECT **)(a1 + 32);
  LODWORD(DependencyTypes) = 0;
  Provider = 0i64;
  ProviderList = PiGetProviderList(v2);
  Flink = ProviderList->Flink;
  if( ProviderList->Flink != ProviderList )
  {
    while( 1 )
    {
      PiEnumerateProviderListEntry(Flink, &Provider, &DependencyTypes);
      Flink = Flink->Flink;
      v8 = Provider ? *(_QWORD *)(*((_QWORD *)Provider + 39) + 40i64) : v5;
      if( !Provider || !v8 || (a2 & (unsigned __int8)DependencyTypes & 3) != 0 && !PipIsProviderStarted(v8) )
        break;
      if( Flink == ProviderList )
        return v5;
    }
    LOBYTE(v5) = 1;
  }
  return v5;
}

Referenced by:

PipAttemptDependentStart
PnpCheckForActiveDependencies