CmGetInstallerClassMappedProperty

__int64 __fastcall CmGetInstallerClassMappedProperty(
        __int64 a1,
        const WCHAR *a2,
        void *a3,
        __int64 a4,
        __int64 a5,
        int *a6,
        wchar_t *a7,
        unsigned int a8,
        unsigned int *a9){
  unsigned int InstallerClassMappedPropertyFromRegProp; 
  DEVPROPKEY **v13; 
  DEVPROPKEY *v14; 
  DEVPROPKEY **v15; 
  unsigned int v16; 
  DEVPROPKEY *v17; 
  DEVPROPKEY **v18; 
  unsigned int v19; 
  DEVPROPKEY *v20; 
  __int64 v21; 
  __int64 v23; 
  __int64 v24; 
  __int64 v25; 
  InstallerClassMappedPropertyFromRegProp = -1073741802;
  *a9 = 0;
  if( !a4 )
  {
    v13 = &CmClassRegPropMap;
    while( 1 )
    {
      v14 = *v13;
      if( *v13 && *(_DWORD *)(a5 + 16) == v14->pid )
      {
        v23 = *(_QWORD *)a5 - *(_QWORD *)&v14->fmtid.Data1;
        if( *(_QWORD *)a5 == *(_QWORD *)&v14->fmtid.Data1 )
          v23 = *(_QWORD *)(a5 + 8) - *(_QWORD *)v14->fmtid.Data4;
        if( !v23 )
          break;
      }
      LODWORD(a4) = a4 + 1;
      v13 += 3;
      if( (unsigned int)a4 >= 9 )
        goto LABEL_6;
    }
    InstallerClassMappedPropertyFromRegProp = CmGetInstallerClassMappedPropertyFromRegProp(
                                                a1,
                                                (__int64)a2,
                                                (__int64)a3,
                                                a5,
                                                a6,
                                                a7,
                                                a8,
                                                a9);
    if( InstallerClassMappedPropertyFromRegProp != -1073741802 )
      return InstallerClassMappedPropertyFromRegProp;
LABEL_6:
    v15 = &off_140985790;
    v16 = 0;
    while( 1 )
    {
      v17 = *v15;
      if( *(_DWORD *)(a5 + 16) == (*v15)->pid )
      {
        v24 = *(_QWORD *)a5 - *(_QWORD *)&v17->fmtid.Data1;
        if( *(_QWORD *)a5 == *(_QWORD *)&v17->fmtid.Data1 )
          v24 = *(_QWORD *)(a5 + 8) - *(_QWORD *)v17->fmtid.Data4;
        if( !v24 )
          break;
      }
      ++v16;
      v15 += 4;
      if( v16 >= 0xD )
        goto LABEL_9;
    }
    InstallerClassMappedPropertyFromRegProp = CmGetInstallerClassMappedPropertyFromRegValue(
                                                a1,
                                                a2,
                                                a3,
                                                a5,
                                                a6,
                                                (unsigned __int64)a7,
                                                a8,
                                                a9);
    if( InstallerClassMappedPropertyFromRegProp != -1073741802 )
      return InstallerClassMappedPropertyFromRegProp;
LABEL_9:
    if( *(_DWORD *)(a5 + 16) != 2 )
      goto LABEL_10;
    v25 = *(_QWORD *)a5 - *(_QWORD *)&DEVPKEY_DeviceClass_ClassCoInstallers.fmtid.Data1;
    if( *(_QWORD *)a5 == *(_QWORD *)&DEVPKEY_DeviceClass_ClassCoInstallers.fmtid.Data1 )
      v25 = *(_QWORD *)(a5 + 8) - *(_QWORD *)DEVPKEY_DeviceClass_ClassCoInstallers.fmtid.Data4;
    if( v25
      || (InstallerClassMappedPropertyFromRegProp = CmGetInstallerClassMappedPropertyFromCoInstallers(
                                                      a1,
                                                      a2,
                                                      (__int64)v15,
                                                      a6,
                                                      (__int64)a7,
                                                      a8,
                                                      (__int64)a9),
          InstallerClassMappedPropertyFromRegProp == -1073741802) )
    {
LABEL_10:
      v18 = &off_140983F60;
      v19 = 0;
      while( 1 )
      {
        v20 = *v18;
        if( *(_DWORD *)(a5 + 16) == (*v18)->pid )
        {
          v21 = *(_QWORD *)a5 - *(_QWORD *)&v20->fmtid.Data1;
          if( *(_QWORD *)a5 == *(_QWORD *)&v20->fmtid.Data1 )
            v21 = *(_QWORD *)(a5 + 8) - *(_QWORD *)v20->fmtid.Data4;
          if( !v21 )
            break;
        }
        ++v19;
        v18 += 2;
        if( v19 >= 4 )
          return InstallerClassMappedPropertyFromRegProp;
      }
      return(unsigned int)CmGetInstallerClassMappedPropertyFromComposite(
                             a1,
                             a2,
                             (char *)a3,
                             a5,
                             a6,
                             (unsigned __int64)a7,
                             a8,
                             a9);
    }
  }
  return InstallerClassMappedPropertyFromRegProp;
}

Referenced by:

PnpDispatchInstallerClass