PpHotSwapUpdateRemovalPolicy

VOID __stdcall PpHotSwapUpdateRemovalPolicy(_DEVICE_NODE *DeviceNode){
  unsigned int Characteristics; 
  int v3; 
  int v4; 
  wchar_t *Buffer; 
  NTSTATUS DeviceRegProp; 
  UINT64 v7; 
  _DEVICE_NODE *DetachableNode; 
  _DEVICE_REMOVAL_POLICY RemovalPolicy; 
  UINT64 CmRegPropType; 
  UINT64 PropertySize; 

  DetachableNode = 0i64;
  RemovalPolicy = RemovalPolicyNotDetermined;
  LODWORD(CmRegPropType) = 0;
  PiHotSwapGetDetachableNode(DeviceNode, &DetachableNode);
  if( !DetachableNode )
  {
    *(_WORD *)&DeviceNode->RemovalPolicy = 257;
    return;
  }
  Characteristics = DeviceNode->PhysicalDeviceObject->Characteristics;
  v3 = Characteristics & 0x300;
  if( (Characteristics & 0x4000) != 0 )
    goto LABEL_19;
  if( (Characteristics & 0x8000) != 0 )
  {
LABEL_18:
    v4 = 3;
    goto LABEL_17;
  }
  if( v3 == 512 )
  {
LABEL_19:
    v4 = 2;
    goto LABEL_17;
  }
  if( v3 == 768 )
    goto LABEL_18;
  if( DeviceNode != DetachableNode )
  {
    v4 = 6;
LABEL_17:
    RemovalPolicy = v4;
    goto LABEL_10;
  }
  PiHotSwapGetDefaultBusRemovalPolicy(DeviceNode, &RemovalPolicy);
  v4 = RemovalPolicy;
LABEL_10:
  if( DeviceNode != DetachableNode )
  {
    if( v4 > DeviceNode->Parent->RemovalPolicy )
      v4 = DeviceNode->Parent->RemovalPolicy;
    RemovalPolicy = v4;
  }
  LODWORD(v7) = 0;
  DeviceNode->RemovalPolicy = v4;
  DeviceNode->HardwareRemovalPolicy = v4;
  Buffer = DeviceNode->InstancePath.Buffer;
  LODWORD(PropertySize) = 4;
  DeviceRegProp = CmGetDeviceRegProp(
                    *(&stru_140CF2E80 + 607),
                    Buffer,
                    0i64,
                    34i64,
                    &CmRegPropType,
                    (UINT8 *)&RemovalPolicy,
                    &PropertySize,
                    v7);
  if( DeviceRegProp >= 0 )
  {
    if( (_DWORD)CmRegPropType != 4 )
      DeviceRegProp = -1073741584;
    if( DeviceRegProp >= 0 && (unsigned int)(RemovalPolicy - 2) <= 1 )
      DeviceNode->RemovalPolicy = RemovalPolicy;
  }
}

Referenced by:

PiProcessNewDeviceNode