CmMoveBaseContainer

NTSTATUS __stdcall CmMoveBaseContainer(WCHAR *BaseContainerId, WCHAR *FromContainerId, WCHAR *ToContainerId){
  WCHAR *v3; 
  HPNPCTX *v4; 
  WCHAR *v6; 
  NTSTATUS DevicesInBaseContainerList; 
  WCHAR *v9; 
  int v10; 
  WCHAR *i; 
  __int64 v12; 
  UINT8 *DeviceAlreadyInContainer; 
  WCHAR *v15; 
  WCHAR *v16; 
  UINT8 *v17; 
  INT64 v18; 
  UINT8 v19; 
  WCHAR *DeviceInstanceId; 

  v4 = (HPNPCTX *)*(&stru_140CF2E80 + 607);
  v6 = v3;
  DeviceInstanceId = 0i64;
  DevicesInBaseContainerList = CmGetDevicesInBaseContainerList(
                                 *(&stru_140CF2E80 + 607),
                                 ToContainerId,
                                 FromContainerId,
                                 &DeviceInstanceId);
  v9 = DeviceInstanceId;
  v10 = DevicesInBaseContainerList;
  if( DevicesInBaseContainerList >= 0 )
  {
    for( i = DeviceInstanceId; *i; i += v12 + 1 )
    {
      v10 = CmRemoveDeviceFromContainer(
              v4,
              ToContainerId,
              FromContainerId,
              i,
              (WCHAR *)DeviceAlreadyInContainer,
              v15,
              v16,
              v17,
              v18,
              v19);
      if( v10 < 0 )
        break;
      v10 = CmAddDeviceToContainer(v4, v6, FromContainerId, i, 0i64);
      if( v10 < 0 )
        break;
      v12 = -1i64;
      do
        ++v12;
      while( i[v12] );
    }
  }
  if( v9 )
    ExFreePoolWithTag(v9, 0);
  return v10;
}

Referenced by:

PiDcHandleCustomDeviceEvent