PiDqPnPGetObjectPropertyKeys

INT64 __fastcall PiDqPnPGetObjectPropertyKeys(INT64 a1, UINT64 a2, VOID *a3, INT64 a4, VOID **a5, UINT64 *a6){
  unsigned int v7; 
  UINT64 v9; 
  VOID *PoolWithTag; 
  unsigned __int64 v11; 
  int ObjectPropertyKeys; 
  int v13; 
  __int64 v14; 
  int v16; 
  v7 = a2;
  v9 = 6000i64;
  *a5 = 0i64;
  while( 1 )
  {
    if( *a5 )
      ExFreePoolWithTag(*a5, 0x58706E50u);
    PoolWithTag = ExAllocatePoolWithTag(PagedPool, v9, 0x58706E50ui64);
    *a5 = PoolWithTag;
    if( !PoolWithTag )
      break;
    *(_DWORD *)a6 = 0;
    v11 = v9 / 0x14;
    if( v7 )
      ObjectPropertyKeys = PnpGetObjectPropertyKeys(
                             PiPnpRtlCtx,
                             a1,
                             v7,
                             (__int64)a3,
                             v16,
                             1,
                             (__int64)PoolWithTag,
                             v11,
                             (__int64)a6);
    else
      ObjectPropertyKeys = PnpGetGenericStorePropertyKeys(
                             PiPnpRtlCtx,
                             (char *)a3,
                             0i64,
                             1,
                             (__int64)PoolWithTag,
                             v11,
                             (unsigned int *)a6);
    v13 = ObjectPropertyKeys;
    if( ObjectPropertyKeys != -1073741789 )
      goto LABEL_13;
    v14 = *(unsigned int *)a6;
    if( (unsigned __int64)(20 * v14) > 0xFFFFFFFF )
    {
      v13 = -1073741675;
      goto LABEL_14;
    }
    v9 = (unsigned int)(20 * v14);
  }
  v13 = -1073741670;
LABEL_13:
  if( v13 >= 0 )
    goto LABEL_15;
LABEL_14:
  *(_DWORD *)a6 = 0;
LABEL_15:
  if( !*(_DWORD *)a6 && *a5 )
  {
    ExFreePoolWithTag(*a5, 0x58706E50u);
    *a5 = 0i64;
  }
  return(unsigned int)v13;
}

Referenced by:

PiDqActionDataGetAllPropertiesInAllLanguages
PiDqActionDataGetAllPropertiesInBestLanguage