CmSetInstallerClassMappedPropertyFromRegValue

__int64 __fastcall CmSetInstallerClassMappedPropertyFromRegValue(
        __int64 a1,
        const WCHAR *a2,
        void *a3,
        __int64 a4,
        unsigned int a5,
        _BYTE *a6,
        ULONG a7){
  int v7; 
  int v8; 
  DEVPROPKEY **v10; 
  unsigned int i; 
  DEVPROPKEY *v15; 
  DEVPROPKEY **v16; 
  __int64 v17; 
  int v18; 
  int v19; 
  const WCHAR *v20; 
  ULONG v21; 
  HANDLE v22; 
  NTSTATUS v23; 
  __int64 v25; 
  __int64 v26; 
  __int64 v27; 
  __int64 v28; 
  __int64 v29; 
  wchar_t *v30; 
  HANDLE v31; 
  NTSTATUS v32; 
  __int64 v33; 
  int v34; 
  char *v35; 
  __int64 v36; 
  __int64 v37; 
  int v38; 
  HANDLE v39; 
  HANDLE Handle; 
  v7 = *(_DWORD *)(a4 + 16);
  v8 = 0;
  v38 = 0;
  v39 = 0i64;
  v10 = &off_140985790;
  Handle = 0i64;
  for( i = 0; i < 0xD; ++i )
  {
    v15 = *v10;
    v16 = v10;
    if( v7 == (*v10)->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;
    }
    v16 = 0i64;
    v10 += 4;
  }
  if( !v16 )
    return(unsigned int)-1073741802;
  v18 = *((_DWORD *)v16 + 2);
  if( a5 != v18 )
  {
    if( a5 == 25 )
    {
      if( v18 == 18 )
        goto LABEL_10;
    }
    else if( a5 < 2 )
    {
      goto LABEL_10;
    }
    return(unsigned int)-1073741811;
  }
LABEL_10:
  if( !a3 )
  {
    v8 = CmOpenInstallerClassRegKey(a1, a2, 0i64, (__int64)v10, 3, 0, (__int64)&v39, 0i64);
    if( v8 < 0 )
      goto LABEL_22;
  }
  v19 = *(_DWORD *)(a4 + 16);
  v20 = (const WCHAR *)v16[2];
  v21 = *((_DWORD *)v16 + 6);
  if( v19 != 7 )
    goto LABEL_49;
  v25 = *(_QWORD *)a4 - *(_QWORD *)&DEVPKEY_DeviceClass_NoInstallClass.fmtid.Data1;
  if( *(_QWORD *)a4 == *(_QWORD *)&DEVPKEY_DeviceClass_NoInstallClass.fmtid.Data1 )
    v25 = *(_QWORD *)(a4 + 8) - *(_QWORD *)DEVPKEY_DeviceClass_NoInstallClass.fmtid.Data4;
  if( v25 )
  {
LABEL_49:
    if( v19 != 8 )
      goto LABEL_85;
    v26 = *(_QWORD *)a4 - *(_QWORD *)&DEVPKEY_DeviceClass_NoDisplayClass.fmtid.Data1;
    if( *(_QWORD *)a4 == *(_QWORD *)&DEVPKEY_DeviceClass_NoDisplayClass.fmtid.Data1 )
      v26 = *(_QWORD *)(a4 + 8) - *(_QWORD *)DEVPKEY_DeviceClass_NoDisplayClass.fmtid.Data4;
    if( v26 )
    {
LABEL_85:
      if( v19 != 9 )
        goto LABEL_86;
      v27 = *(_QWORD *)a4 - *(_QWORD *)&DEVPKEY_DeviceClass_SilentInstall.fmtid.Data1;
      if( *(_QWORD *)a4 == *(_QWORD *)&DEVPKEY_DeviceClass_SilentInstall.fmtid.Data1 )
        v27 = *(_QWORD *)(a4 + 8) - *(_QWORD *)DEVPKEY_DeviceClass_SilentInstall.fmtid.Data4;
      if( v27 )
      {
LABEL_86:
        if( v19 != 10 )
          goto LABEL_15;
        v28 = *(_QWORD *)a4 - *(_QWORD *)&DEVPKEY_DeviceClass_NoUseClass.fmtid.Data1;
        if( *(_QWORD *)a4 == *(_QWORD *)&DEVPKEY_DeviceClass_NoUseClass.fmtid.Data1 )
          v28 = *(_QWORD *)(a4 + 8) - *(_QWORD *)DEVPKEY_DeviceClass_NoUseClass.fmtid.Data4;
        if( v28 )
        {
LABEL_15:
          if( v19 != 15 )
          {
            if( v19 != 2 )
            {
              if( v19 != 3 )
                goto LABEL_18;
              v36 = *(_QWORD *)a4 - *(_QWORD *)&DEVPKEY_DeviceClass_ClassName.fmtid.Data1;
              if( *(_QWORD *)a4 == *(_QWORD *)&DEVPKEY_DeviceClass_ClassName.fmtid.Data1 )
                v36 = *(_QWORD *)(a4 + 8) - *(_QWORD *)DEVPKEY_DeviceClass_ClassName.fmtid.Data4;
              if( v36 || a7 <= 0x40 )
              {
LABEL_18:
                v22 = v39;
                if( a3 )
                  v22 = a3;
                v23 = RegRtlSetValue(v22, v20, v21, a6, a7);
                if( v23 < 0 )
                  v8 = v23;
                goto LABEL_22;
              }
              goto LABEL_57;
            }
            v33 = *(_QWORD *)a4 - *(_QWORD *)&DEVPKEY_DeviceClass_DHPRebalanceOptOut.fmtid.Data1;
            if( *(_QWORD *)a4 == *(_QWORD *)&DEVPKEY_DeviceClass_DHPRebalanceOptOut.fmtid.Data1 )
              v33 = *(_QWORD *)(a4 + 8) - *(_QWORD *)DEVPKEY_DeviceClass_DHPRebalanceOptOut.fmtid.Data4;
            if( v33 )
              goto LABEL_18;
            if( !a7 )
              goto LABEL_57;
            if( *a6 == 0xFF )
            {
              v34 = 1;
LABEL_74:
              v35 = (char *)v39;
              v38 = v34;
              if( a3 )
                v35 = (char *)a3;
              v8 = PnpOpenPropertiesKey(a1, v35, 0i64, 2u, 1, v37, &Handle);
              if( v8 < 0 )
                goto LABEL_22;
              v31 = Handle;
              v30 = (wchar_t *)&v38;
              goto LABEL_62;
            }
            if( !*a6 )
            {
              v34 = 0;
              goto LABEL_74;
            }
            goto LABEL_57;
          }
          v29 = *(_QWORD *)a4 - DEVPKEY_DeviceClass_FSFilterClass;
          if( *(_QWORD *)a4 == DEVPKEY_DeviceClass_FSFilterClass )
            v29 = *(_QWORD *)(a4 + 8) - 0x6633D7A7C96808AFi64;
          if( v29 )
            goto LABEL_18;
        }
      }
    }
  }
  if( a7 )
  {
    if( *a6 == 0xFF )
    {
      v30 = L"1";
    }
    else
    {
      if( *a6 )
        goto LABEL_57;
      v30 = (wchar_t *)L"0";
    }
    v31 = v39;
    if( a3 )
      v31 = a3;
LABEL_62:
    v32 = RegRtlSetValue(v31, v20, v21, v30, 4u);
    if( v32 == -1073741444 )
    {
      v8 = -1073741772;
    }
    else if( v32 < 0 )
    {
      v8 = v32;
    }
    goto LABEL_22;
  }
LABEL_57:
  v8 = -1073741811;
LABEL_22:
  if( Handle )
    ZwClose(Handle);
  if( v39 )
    ZwClose(v39);
  return(unsigned int)v8;
}

Referenced by:

CmSetInstallerClassMappedProperty