CmSetInstallerClassMappedPropertyFromRegProp

__int64 __fastcall CmSetInstallerClassMappedPropertyFromRegProp(
        __int64 a1,
        __int64 a2,
        void *a3,
        __int64 a4,
        unsigned int a5,
        _BYTE *a6,
        int a7){
  int v7; 
  DEVPROPKEY **v8; 
  int *v9; 
  unsigned int v13; 
  int v14; 
  DEVPROPKEY *v15; 
  DEVPROPKEY **v16; 
  __int64 v17; 
  int v19; 
  unsigned int v20; 
  unsigned int v21; 
  unsigned int v22; 
  int v23; 
  v7 = *(_DWORD *)(a4 + 16);
  v8 = &CmClassRegPropMap;
  v9 = 0i64;
  v23 = 0;
  v13 = 0;
  v14 = 1;
  do
  {
    v15 = *v8;
    v16 = v8;
    if( v7 == (*v8)->pid )
    {
      v17 = *(_QWORD *)a4 - *(_QWORD *)&v15->fmtid.Data1;
      if( *(_QWORD *)a4 == *(_QWORD *)&v15->fmtid.Data1 )
        v17 = *(_QWORD *)(a4 + 8) - *(_QWORD *)v15->fmtid.Data4;
      if( !v17 )
        break;
    }
    ++v13;
    v8 += 3;
    v16 = 0i64;
  }
  while( v13 < 9 );
  if( !v16 )
    return 3221226032i64;
  v19 = *((_DWORD *)v16 + 2);
  v20 = *((_DWORD *)v16 + 3);
  if( a5 != v19 )
  {
    if( a5 == 25 )
    {
      if( v19 != 18 )
        return 3221225485i64;
    }
    else if( a5 >= 2 )
    {
      return 3221225485i64;
    }
  }
  v21 = *((_DWORD *)v16 + 4);
  if( v20 == 25 )
    return 3221225659i64;
  if( v20 != 27 )
    return CmSetInstallerClassRegProp(a1, a2, a3, v20, v21, a6, a7 & (unsigned int)-(a6 != 0i64));
  if( a6 )
  {
    if( !a7 )
      return 3221225485i64;
    if( *a6 != 0xFF )
    {
      if( *a6 )
        return 3221225485i64;
      v14 = 0;
    }
    v23 = v14;
    v9 = &v23;
    v22 = 4;
  }
  else
  {
    v22 = 0;
  }
  return CmSetInstallerClassRegProp(a1, a2, a3, 0x1Bu, v21, v9, v22);
}

Referenced by:

CmSetInstallerClassMappedProperty