CmAddDeviceToContainerWorker
__int64 __fastcall CmAddDeviceToContainerWorker(
__int64 a1,
const WCHAR *a2,
const WCHAR *a3,
const WCHAR *a4,
_BYTE *a5){
_BYTE *v5;
int v10;
HANDLE v11;
int v12;
int Value;
__int64 v15;
__int64 v16;
__int64 v17;
__int64 v18;
char v19[4];
ULONG v20;
ULONG v21;
HANDLE Handle;
HANDLE v23;
HANDLE v24;
v5 = a5;
v24 = 0i64;
v23 = 0i64;
Handle = 0i64;
*a5 = 0;
v19[0] = 0;
v21 = 0;
v20 = 0;
v10 = CmCreateDeviceContainer(a1, a2, (__int64)a3, &v24, v19);
v11 = v24;
v12 = v10;
if( v10 >= 0 )
{
v12 = PnpCtxRegCreateKey(a1, (__int64)v24, L"BaseContainers", 0, 4u, 0i64, &v23, &v21);
if( v12 >= 0 )
{
v12 = PnpCtxRegCreateKey(a1, (__int64)v23, a3, 0, 3u, 0i64, &Handle, &v20);
if( v12 >= 0 )
{
if( v20 == 2 )
{
LODWORD(a5) = 0;
Value = RegRtlQueryValue(Handle, a4, 0i64, 0i64, (__int64)&a5);
v12 = Value;
if( Value == -1073741772 || Value == -1073741444 )
{
v12 = 0;
}
else if( !Value )
{
*v5 = 1;
goto LABEL_9;
}
}
if( v12 >= 0 && !*v5 )
{
v12 = RegRtlSetValue(Handle, a4, 0, 0i64, 0);
if( v12 >= 0 )
PnpObjectRaisePropertyChangeEvent(a1, (__int64)a4, 1i64, 0i64, 0i64, (__int64)&DEVPKEY_Device_ContainerId);
}
}
}
}
if( v12 == -1073741444 )
v12 = -1073741772;
if( v12 < 0 )
{
if( v20 == 1 )
{
if( a1 && (v15 = *(_QWORD *)(a1 + 224)) != 0 )
v16 = *(_QWORD *)(v15 + 8);
else
v16 = 0i64;
RegRtlDeleteKeyTransacted((char *)Handle, 0i64, v16);
}
if( v21 == 1 )
{
if( a1 && (v17 = *(_QWORD *)(a1 + 224)) != 0 )
v18 = *(_QWORD *)(v17 + 8);
else
v18 = 0i64;
RegRtlDeleteKeyTransacted((char *)v23, 0i64, v18);
}
if( v19[0] == 1 )
CmDeleteDeviceContainer(a1, a2);
}
LABEL_9:
if( Handle )
ZwClose(Handle);
if( v23 )
ZwClose(v23);
if( v11 )
ZwClose(v11);
return(unsigned int)v12;
}Referenced by:
CmAddDeviceToContainer