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