CmRemoveDeviceFromContainerWorker

__int64 __fastcall CmRemoveDeviceFromContainerWorker(
        __int64 a1,
        const WCHAR *a2,
        const WCHAR *a3,
        const WCHAR *a4,
        _BYTE *a5){
  int CachedContextBaseKey; 
  __int64 v10; 
  __int64 v11; 
  __int64 v12; 
  __int64 v13; 
  __int64 v14; 
  __int64 v15; 
  __int64 v16; 
  int v18; 
  HANDLE KeyHandle; 
  HANDLE Handle; 
  HANDLE v21; 
  struct _UNICODE_STRING DestinationString; 
  *(_QWORD *)&DestinationString.Length = 0i64;
  v21 = 0i64;
  Handle = 0i64;
  KeyHandle = 0i64;
  v18 = 0;
  *a5 = 0;
  CachedContextBaseKey = PnpCtxGetCachedContextBaseKey(a1, 10, (__int64 *)&DestinationString);
  if( CachedContextBaseKey >= 0 )
  {
    v10 = 0i64;
    if( a1 )
      v10 = *(_QWORD *)(a1 + 224);
    CachedContextBaseKey = SysCtxRegOpenKey(v10, *(char **)&DestinationString.Length, a2, 0, 1u, &v21);
    if( CachedContextBaseKey >= 0 )
    {
      v11 = 0i64;
      if( a1 )
        v11 = *(_QWORD *)(a1 + 224);
      CachedContextBaseKey = SysCtxRegOpenKey(v11, (char *)v21, L"BaseContainers", 0, 1u, &Handle);
      if( CachedContextBaseKey >= 0 )
      {
        v12 = 0i64;
        if( a1 )
          v12 = *(_QWORD *)(a1 + 224);
        CachedContextBaseKey = SysCtxRegOpenKey(v12, (char *)Handle, a3, 0, 3u, &KeyHandle);
        if( CachedContextBaseKey >= 0 )
        {
          DestinationString = 0i64;
          if( (int)RtlInitUnicodeStringEx(&DestinationString, (WCHAR *)a4) >= 0 )
            ZwDeleteValueKey(KeyHandle, &DestinationString);
          CachedContextBaseKey = PnpCtxRegQueryInfoKey(v13, KeyHandle, 0i64, 0i64, &v18, 0i64, 0i64);
          if( CachedContextBaseKey >= 0 )
          {
            if( !v18 )
            {
              if( a1 && (v15 = *(_QWORD *)(a1 + 224)) != 0 )
                v16 = *(_QWORD *)(v15 + 8);
              else
                v16 = 0i64;
              RegRtlDeleteTreeInternal((char *)KeyHandle, 0i64, v16, 0);
            }
            CachedContextBaseKey = PnpCtxRegQueryInfoKey(v14, Handle, &v18, 0i64, 0i64, 0i64, 0i64);
            if( CachedContextBaseKey >= 0 )
            {
              if( !v18 )
              {
                CachedContextBaseKey = CmDeleteDeviceContainer(a1, a2);
                if( CachedContextBaseKey >= 0 )
                  *a5 = 1;
              }
              PnpObjectRaisePropertyChangeEvent(a1, (__int64)a4, 1i64, 0i64, 0i64, (__int64)&DEVPKEY_Device_ContainerId);
            }
          }
        }
      }
    }
  }
  if( CachedContextBaseKey == -1073741772 || CachedContextBaseKey == -1073741444 )
    CachedContextBaseKey = 0;
  if( KeyHandle )
    ZwClose(KeyHandle);
  if( Handle )
    ZwClose(Handle);
  if( v21 )
    ZwClose(v21);
  return(unsigned int)CachedContextBaseKey;
}

Referenced by:

CmRemoveDeviceFromContainer