CmGetDeviceMappedPropertyFromInstanceKeyRegValue

__int64 __fastcall CmGetDeviceMappedPropertyFromInstanceKeyRegValue(
        __int64 a1,
        const wchar_t *a2,
        void *a3,
        __int64 a4,
        __int64 a5,
        __int64 a6,
        int a7,
        _DWORD *a8){
  _DWORD *v8; 
  int v9; 
  _DWORD *v10; 
  HANDLE v11; 
  __int64 v13; 
  int v15; 
  int v16; 
  DEVPROPKEY **v17; 
  unsigned int i; 
  DEVPROPKEY *v19; 
  DEVPROPKEY **v20; 
  __int64 v21; 
  const WCHAR *v22; 
  __int64 v23; 
  int v24; 
  int v26; 
  int v27; 
  HANDLE Handle; 
  v8 = (_DWORD *)a5;
  v9 = 0;
  v10 = a8;
  v11 = 0i64;
  v27 = 0;
  v13 = a6;
  *(_DWORD *)a5 = 0;
  *v10 = 0;
  Handle = 0i64;
  if( v13 )
  {
    v15 = a7;
    v13 &= -(__int64)(a7 != 0);
  }
  else
  {
    v15 = 0;
  }
  v16 = *(_DWORD *)(a4 + 16);
  v17 = &off_140983E70;
  for( i = 0; i < 2; ++i )
  {
    v19 = *v17;
    v20 = v17;
    if( v16 == (*v17)->pid )
    {
      v21 = *(_QWORD *)a4 - *(_QWORD *)&v19->fmtid.Data1;
      if( *(_QWORD *)a4 == *(_QWORD *)&v19->fmtid.Data1 )
        v21 = *(_QWORD *)(a4 + 8) - *(_QWORD *)v19->fmtid.Data4;
      if( !v21 )
        break;
    }
    v20 = 0i64;
    v17 += 4;
  }
  if( !v20 )
    return(unsigned int)-1073741264;
  if( !a3 )
  {
    v9 = CmOpenDeviceRegKey(a1, a2, 16, 0, 1, 0, (__int64)&Handle, 0i64);
    if( v9 < 0 )
      goto LABEL_22;
    v11 = Handle;
  }
  v22 = (const WCHAR *)v20[2];
  if( *(_DWORD *)(a4 + 16) == 2 )
  {
    v23 = *(_QWORD *)a4 - *(_QWORD *)&DEVPKEY_Device_Reported.fmtid.Data1;
    if( *(_QWORD *)a4 == *(_QWORD *)&DEVPKEY_Device_Reported.fmtid.Data1 )
      v23 = *(_QWORD *)(a4 + 8) - *(_QWORD *)DEVPKEY_Device_Reported.fmtid.Data4;
    if( !v23 )
    {
      LODWORD(a6) = 0;
      LODWORD(a5) = 4;
      if( a3 )
        v11 = a3;
      if( (int)RegRtlQueryValue(v11, v22, &v27, &a6, (__int64)&a5) >= 0 && v27 == 4 && (_DWORD)a5 == 4 )
        v24 = a6;
      else
        v24 = 0;
      if( !v24 )
      {
LABEL_21:
        v9 = -1073741275;
        goto LABEL_22;
      }
      *a8 = 1;
      *v8 = 17;
      if( v15 )
      {
        *(_BYTE *)v13 = -1;
        goto LABEL_22;
      }
LABEL_44:
      v9 = -1073741789;
      goto LABEL_22;
    }
  }
  LODWORD(a5) = v15;
  if( a3 )
    v11 = a3;
  v26 = RegRtlQueryValue(v11, v22, &v27, (void *)v13, (__int64)&a5);
  if( v26 == -1073741772 || v26 == -1073741444 )
    goto LABEL_21;
  if( v26 && v26 != -1073741789 )
  {
    v9 = v26;
    goto LABEL_22;
  }
  *a8 = a5;
  *v8 = *((_DWORD *)v20 + 2);
  if( v26 || !v15 )
    goto LABEL_44;
LABEL_22:
  if( Handle )
    ZwClose(Handle);
  return(unsigned int)v9;
}

Referenced by:

CmGetDeviceMappedProperty
CmGetDeviceMappedPropertyKeys