PiDcUpdateDeviceContainerMembership
NTSTATUS __stdcall PiDcUpdateDeviceContainerMembership(
PWCHAR DeviceInstanceId,
PVOID DeviceInstanceKey,
PWCHAR BaseContainerId){
NTSTATUS DeviceRegProp;
__int64 v7;
char v9[4];
int v10;
int v11;
PVOID P;
wchar_t Str2[40];
__int16 PrevContainerId[40];
wchar_t ContainerId[40];
v9[0] = 0;
P = 0i64;
v11 = 0;
v10 = 0;
DeviceRegProp = PiPnpRtlBeginOperation((__int64 **)&P);
if( DeviceRegProp >= 0 )
{
v10 = 78;
DeviceRegProp = CmGetDeviceRegProp(
PiPnpRtlCtx,
DeviceInstanceId,
(__int64)DeviceInstanceKey,
37,
(__int64)&v11,
(__int64)Str2,
(__int64)&v10,
0);
if( DeviceRegProp >= 0 && wcsicmp(BaseContainerId, Str2) )
{
DeviceRegProp = CmGetDeviceContainerIdFromBase(PiPnpRtlCtx, DeviceInstanceId, Str2, (wchar_t *)PrevContainerId);
if( DeviceRegProp < 0 )
goto LABEL_15;
DeviceRegProp = CmRemoveDeviceFromContainer(
PiPnpRtlCtx,
(const WCHAR *)PrevContainerId,
(__int64)Str2,
(__int64)DeviceInstanceId);
if( DeviceRegProp < 0 )
goto LABEL_15;
PiDcResetChildDeviceContainers(DeviceInstanceId, (const WCHAR *)PrevContainerId);
}
else if( DeviceRegProp == -1073741275 )
{
DeviceRegProp = 0;
}
if( DeviceRegProp >= 0 )
{
DeviceRegProp = CmGetDeviceContainerIdFromBase(PiPnpRtlCtx, DeviceInstanceId, BaseContainerId, ContainerId);
if( DeviceRegProp >= 0 )
{
v7 = -1i64;
do
++v7;
while( BaseContainerId[v7] );
DeviceRegProp = CmSetDeviceRegProp(
PiPnpRtlCtx,
DeviceInstanceId,
(__int64)DeviceInstanceKey,
0x25u,
1u,
(__int64)BaseContainerId,
2 * (int)v7 + 2,
0);
if( DeviceRegProp >= 0 )
{
if( wcscmp((PWCHAR)L"{00000000-0000-0000-0000-000000000000}", BaseContainerId) )
{
DeviceRegProp = CmAddDeviceToContainer(PiPnpRtlCtx, ContainerId, BaseContainerId, DeviceInstanceId, v9);
if( DeviceRegProp >= 0 && !v9[0] )
PiDcContainerRequiresConfiguration(ContainerId);
}
}
}
}
}
LABEL_15:
if( P )
PiPnpRtlEndOperation(P);
return DeviceRegProp;
}Referenced by:
PiProcessNewDeviceNode
PipProcessStartPhase3