CmOpenCommonClassRegKey

__int64 __fastcall CmOpenCommonClassRegKey(
        __int64 a1,
        const WCHAR *a2,
        unsigned int a3,
        unsigned int a4,
        int a5,
        char a6,
        __int64 a7,
        _DWORD *a8){
  unsigned int v11; 
  __int64(__fastcall *v12)(__int64, const WCHAR *, _QWORD, __int64, int, _DWORD *); 
  int v13; 
  int v14; 
  int v15; 
  int v17; 
  _DWORD result[4]; 
  unsigned int v20; 
  int v21; 
  int v22; 
  char v23; 
  void **v24; 
  int v25[14]; 
  memset((INT64)result, 0i64);
  if( (unsigned __int8)a3 == 32 )
  {
    v11 = 2;
  }
  else
  {
    if( (unsigned __int8)a3 != 64 )
    {
      v15 = -1073741811;
      goto LABEL_7;
    }
    v11 = 4;
  }
  v12 = *(__int64(__fastcall **)(__int64, const WCHAR *, _QWORD, __int64, int, _DWORD *))(a1 + 504);
  v22 = a5;
  v21 = a4;
  v24 = (void **)a7;
  v23 = a6;
  v20 = a3;
  if( v12 )
  {
    v13 = v12(a1, a2, v11, 11i64, 1, result);
    if( v13 == -1073741822 )
    {
      v12 = 0i64;
    }
    else
    {
      if( v13 == -1073741536 )
        goto LABEL_17;
      if( v13 )
        return(unsigned int)-1073741595;
    }
  }
  v14 = CmOpenCommonClassRegKeyWorker(a1, a2, v20, v21, v22, v23, v24, v25);
  v15 = v14;
  if( !v12 )
    goto LABEL_7;
  result[0] = v14;
  v17 = v12(a1, a2, v11, 11i64, 2, result);
  if( v17 == -1073741822 )
    goto LABEL_7;
  if( v17 == -1073741536 )
  {
LABEL_17:
    v15 = result[0];
    goto LABEL_7;
  }
  if( v17 )
    return(unsigned int)-1073741595;
LABEL_7:
  if( v15 >= 0 && a8 )
    *a8 = v25[0];
  return(unsigned int)v15;
}

Referenced by:

CmOpenInstallerClassRegKey
CmOpenInterfaceClassRegKey