PipCheckForUnsatisfiedDependencies

UINT8 __stdcall PipCheckForUnsatisfiedDependencies(_DEVICE_NODE *DeviceNode, UINT64 DependencyTypes){
  _DEVICE_OBJECT *PhysicalDeviceObject; 
  unsigned __int8 v3; 
  _LIST_ENTRY *ProviderList; 
  void *v5; 
  _LIST_ENTRY *Flink; 
  _DEVICE_NODE *v8; 
  UINT64 DependencyTypesa; 
  _DEVICE_OBJECT *Provider; 

  PhysicalDeviceObject = DeviceNode->PhysicalDeviceObject;
  LODWORD(DependencyTypesa) = 0;
  v3 = DependencyTypes;
  Provider = 0i64;
  ProviderList = PiGetProviderList(PhysicalDeviceObject);
  Flink = ProviderList->Flink;
  if( ProviderList->Flink != ProviderList )
  {
    while( 1 )
    {
      PiEnumerateProviderListEntry(Flink, &Provider, &DependencyTypesa);
      Flink = Flink->Flink;
      v8 = (_DEVICE_NODE *)(Provider ? Provider->DeviceObjectExtension->DeviceNode : v5);
      if( !Provider || !v8 || (v3 & (unsigned __int8)DependencyTypesa & 3) != 0 && !PipIsProviderStarted(v8) )
        break;
      if( Flink == ProviderList )
        return(unsigned __int8)v5;
    }
    LOBYTE(v5) = 1;
  }
  return(unsigned __int8)v5;
}

Referenced by:

PipAttemptDependentStart
PnpCheckForActiveDependencies