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