CmRemovePanelDeviceWorker

__int64 __fastcall CmRemovePanelDeviceWorker(__int64 a1, const WCHAR *a2, const WCHAR *a3, _BYTE *a4){
  int CachedContextBaseKey; 
  __int64 v9; 
  __int64 v10; 
  __int64 v11; 
  HANDLE v12; 
  __int64 v13; 
  __int64 v14; 
  HANDLE KeyHandle; 
  HANDLE Handle; 
  struct _UNICODE_STRING DestinationString; 
  int v19; 
  *(_QWORD *)&DestinationString.Length = 0i64;
  Handle = 0i64;
  KeyHandle = 0i64;
  v19 = 0;
  *a4 = 0;
  CachedContextBaseKey = PnpCtxGetCachedContextBaseKey(a1, 11, (__int64 *)&DestinationString);
  if( CachedContextBaseKey >= 0 )
  {
    v9 = a1 ? *(_QWORD *)(a1 + 224) : 0i64;
    CachedContextBaseKey = SysCtxRegOpenKey(v9, *(char **)&DestinationString.Length, a2, 0, 1u, &Handle);
    if( CachedContextBaseKey >= 0 )
    {
      v10 = a1 ? *(_QWORD *)(a1 + 224) : 0i64;
      CachedContextBaseKey = SysCtxRegOpenKey(v10, (char *)Handle, L"Devices", 0, 3u, &KeyHandle);
      if( CachedContextBaseKey >= 0 )
      {
        DestinationString = 0i64;
        CachedContextBaseKey = RtlInitUnicodeStringEx(&DestinationString, (WCHAR *)a3);
        if( CachedContextBaseKey >= 0 )
          CachedContextBaseKey = ZwDeleteValueKey(KeyHandle, &DestinationString);
        if( CachedContextBaseKey == -1073741772 || CachedContextBaseKey == -1073741444 || CachedContextBaseKey >= 0 )
        {
          v12 = KeyHandle;
          *a4 = 1;
          CachedContextBaseKey = PnpCtxRegQueryInfoKey(v11, v12, 0i64, 0i64, &v19, 0i64, 0i64);
          if( CachedContextBaseKey >= 0 )
          {
            if( !v19 )
            {
              if( a1 && (v13 = *(_QWORD *)(a1 + 224)) != 0 )
                v14 = *(_QWORD *)(v13 + 8);
              else
                v14 = 0i64;
              RegRtlDeleteTreeInternal((char *)KeyHandle, 0i64, v14, 0);
            }
            PnpObjectRaisePropertyChangeEvent(a1, (__int64)a3, 1i64, 0i64, 0i64, (__int64)&DEVPKEY_Device_PanelId);
          }
        }
      }
    }
  }
  if( CachedContextBaseKey == -1073741772 || CachedContextBaseKey == -1073741444 )
    CachedContextBaseKey = 0;
  if( KeyHandle )
    ZwClose(KeyHandle);
  if( Handle )
    ZwClose(Handle);
  return(unsigned int)CachedContextBaseKey;
}

Referenced by:

CmRemovePanelDevice