IoDetachDevice

VOID *__stdcall IoDetachDevice(PDEVICE_OBJECT TargetDevice){
  INT64 v1; 
  INT64 v2; 
  UINT8 v4; 
  _DEVOBJ_EXTENSION *DeviceObjectExtension; 
  VOID *result; 
  VOID *retaddr; 

  v4 = KeAcquireQueuedSpinLock(10i64, v1, v2);
  if( (MmVerifierData & 0x10) != 0 )
    IovDetachDevice(TargetDevice, retaddr);
  TargetDevice->AttachedDevice->DeviceObjectExtension->AttachedTo = 0i64;
  DeviceObjectExtension = TargetDevice->DeviceObjectExtension;
  TargetDevice->AttachedDevice = 0i64;
  if( (DeviceObjectExtension->ExtensionFlags & 7) == 0 || TargetDevice->ReferenceCount )
    KeReleaseQueuedSpinLock(LockQueueIoDatabaseLock, v4);
  else
    IopCompleteUnloadOrDelete(TargetDevice, 0, v4);
  return result;
}

Referenced by:

ViFilterDispatchPnp