PiDqActionDataGetRequestedProperties

__int64 __fastcall PiDqActionDataGetRequestedProperties(
        __int64 a1,
        unsigned int a2,
        __int64 a3,
        char a4,
        const wchar_t *a5,
        __int64 a6,
        unsigned int a7,
        _QWORD *a8,
        _DWORD *a9){
  int v9; 
  unsigned int v10; 
  VOID *PoolWithTag; 
  unsigned int v12; 
  __int64 v13; 
  __int64 v14; 
  VOID *v15; 
  __int64 Property; 
  INT64 v17; 
  int v18; 
  __int128 v20; 
  INT64 v21; 
  HANDLE Handle; 
  PVOID P; 
  v9 = 0;
  Handle = 0i64;
  v10 = a2;
  P = 0i64;
  *a9 = 0;
  PoolWithTag = ExAllocatePoolWithTag(PagedPool, 48i64 * a7, 0x58706E50ui64);
  *a8 = PoolWithTag;
  if( !PoolWithTag )
  {
    v9 = -1073741670;
    goto LABEL_12;
  }
  PiPnpRtlBeginOperation((__int64 **)&P);
  v12 = 0;
  if( !a7 )
    goto LABEL_12;
  v13 = (unsigned int)*a9;
  v14 = a6 + 20;
  while( 1 )
  {
    v15 = 0i64;
    Property = *a8 + 48 * v13;
    if( !*(_DWORD *)v14 )
      goto LABEL_5;
    if( *(_DWORD *)v14 != 1 )
      break;
    v10 = 0;
    if( !Handle )
    {
      v9 = PiDqOpenObjectRegKey(1, a3, a2, 1, 0, a1, (__int64)&Handle);
      if( v9 == -1073741772 )
      {
        v9 = 0;
        Handle = (HANDLE)-1i64;
      }
    }
    if( Handle == (HANDLE)-1i64 )
    {
      *(_OWORD *)Property = *(_OWORD *)(v14 - 20);
      v20 = *(_OWORD *)(v14 - 4);
      *(_DWORD *)(Property + 32) = 0;
      *(_QWORD *)(Property + 40) = 0i64;
      *(_DWORD *)(Property + 36) = 0;
      *(_OWORD *)(Property + 16) = v20;
      goto LABEL_9;
    }
    v15 = Handle;
LABEL_5:
    if( v9 < 0 )
      goto LABEL_12;
    v17 = a6 + 32i64 * v12;
    if( a4 )
    {
      LODWORD(v21) = *(_DWORD *)v14;
      v18 = PiDqPnPGetObjectPropertyInBestLocale(a3, v10, v15, v17, v21, (WCHAR *)a5, (DEVPROPERTY *)Property);
    }
    else
    {
      v18 = PiDqPnPGetObjectProperty(
              a3,
              v10,
              (char *)v15,
              v17,
              *(_DWORD *)v14,
              *(NTSTRSAFE_PCWSTR *)(v14 + 4),
              Property);
    }
    v9 = v18;
    if( v18 < 0 )
      goto LABEL_12;
LABEL_9:
    ++*a9;
    ++v12;
    v13 = (unsigned int)*a9;
    v14 += 32i64;
    if( v12 >= a7 )
      goto LABEL_12;
    v10 = a2;
  }
  v9 = -1073741811;
LABEL_12:
  if( (char *)Handle - 1 <= (char *)0xFFFFFFFFFFFFFFFDi64 )
    ZwClose(Handle);
  if( P )
    PiPnpRtlEndOperation(P);
  return(unsigned int)v9;
}

Referenced by:

PiDqActionDataCreate