PiHotSwapGetDefaultBusRemovalPolicy

VOID __stdcall PiHotSwapGetDefaultBusRemovalPolicy(_DEVICE_NODE *DeviceNode, _DEVICE_REMOVAL_POLICY *RemovalPolicy){
  _DEVICE_REMOVAL_POLICY v4; 
  struct _DEVICE_NODE_IOMMU_EXTENSION *IommuExtension; 
  _DEVICE_NODE *Parent; 

  if( DeviceNode->InstancePath.Length <= 8u || wcsnicmp(DeviceNode->InstancePath.Buffer, L"USB\\", 4u) )
  {
    v4 = RemovalPolicySuggestSurpriseRemoval;
    if( (DeviceNode->InstancePath.Length <= 0xAu
       || wcsnicmp(DeviceNode->InstancePath.Buffer, L"1394\\", 5u)
       && (DeviceNode->InstancePath.Length <= 0xAu || wcsnicmp(DeviceNode->InstancePath.Buffer, L"SBP2\\", 5u)))
      && (DeviceNode->InstancePath.Length <= 0xEu || wcsnicmp(DeviceNode->InstancePath.Buffer, L"PCMCIA\\", 7u)) )
    {
      if( DeviceNode->InstancePath.Length <= 8u
        || wcsnicmp(DeviceNode->InstancePath.Buffer, L"PCI\\", 4u)
        || (Parent = DeviceNode->Parent, Parent->ServiceName.Length != 12)
        || wcsicmp(Parent->ServiceName.Buffer, L"PCMCIA") )
      {
        IommuExtension = DeviceNode->IommuExtension;
        if( !IommuExtension || (*((_BYTE *)IommuExtension + 16) & 4) == 0 )
          v4 = 5 - (DeviceNode->Parent->RemovalPolicy != 5);
      }
    }
  }
  else
  {
    v4 = RemovalPolicySuggestSurpriseRemoval;
  }
  *RemovalPolicy = v4;
}

Referenced by:

PpHotSwapUpdateRemovalPolicy