CmGetMatchingDevicePanelListWorker

__int64 __fastcall CmGetMatchingDevicePanelListWorker(
        __int64 a1,
        __int64 a2,
        __int64 a3,
        _WORD *a4,
        unsigned int a5,
        unsigned int *a6,
        int a7){
  int CachedContextBaseKey; 
  _DWORD *PoolWithTag; 
  _DWORD *v13; 
  void *v14; 
  unsigned int v15; 
  unsigned int v16; 
  void *v18; 
  v18 = 0i64;
  *a6 = 0;
  if( a5 )
    *a4 = 0;
  CachedContextBaseKey = PnpCtxGetCachedContextBaseKey(a1, 11, (__int64 *)&v18);
  if( CachedContextBaseKey >= 0 )
  {
    PoolWithTag = ExAllocatePoolWithTag(PagedPool, 0xA0ui64, 0x52504E50ui64);
    v13 = PoolWithTag;
    if( PoolWithTag )
    {
      memset((INT64)PoolWithTag, 0i64);
      v14 = v18;
      v13[38] = a7;
      *v13 = 1;
      *((_QWORD *)v13 + 15) = a2;
      *((_QWORD *)v13 + 16) = a3;
      *((_QWORD *)v13 + 17) = a4;
      v13[36] = a5;
      CachedContextBaseKey = PnpCtxRegEnumKeyWithCallback(
                               a1,
                               v14,
                               (__int64)CmDevicePanelEnumSubkeyCallback,
                               (__int64)v13);
      if( CachedContextBaseKey >= 0 )
      {
        v15 = v13[37];
        *a6 = v15;
        if( v15 )
        {
          v16 = v15 + 1;
          *a6 = v16;
          if( a4 && a5 >= v16 )
            a4[v16 - 1] = 0;
          else
            CachedContextBaseKey = -1073741789;
        }
      }
      ExFreePoolWithTag(v13, 0);
    }
    else
    {
      return(unsigned int)-1073741801;
    }
  }
  return(unsigned int)CachedContextBaseKey;
}

Referenced by:

CmGetMatchingDevicePanelList