CmGetCommonClassRegKeyPath

VOID __stdcall CmGetCommonClassRegKeyPath(
        INT64 a1,
        const WCHAR *a2,
        INT16 a3,
        INT64 a4,
        INT64 a5,
        WCHAR *pszDest,
        size_t cchDest,
        INT64 a8){
  int v8; 
  int v11; 
  NTSTATUS v12; 
  const wchar_t *v13; 
  __int64 v14; 
  __int64 v15; 
  unsigned __int64 v16; 
  UINT64 v17; 
  WCHAR *v18; 
  __int64 v19; 
  __int64 v20; 
  unsigned __int64 v21; 
  WCHAR *pszFormat; 
  __int64 v23; 
  __int64 v24; 
  unsigned __int64 v25; 
  UINT64 dwFlags; 

  v8 = a4;
  if( (a3 & 0x60) == 96 )
    return;
  if( (unsigned __int8)a3 == 32 )
  {
    v11 = (unsigned __int8)a3 - 30;
    v12 = CmValidateInstallerClassName((WCHAR *)a1);
  }
  else
  {
    if( (unsigned __int8)a3 != 64 )
      return;
    v11 = 4;
    v12 = CmValidateInstallerClassName((WCHAR *)a1);
  }
  if( v12 < 0 )
    return;
  v13 = L"System\\CurrentControlSet\\Control\\Class";
  if( v11 != 2 )
    v13 = L"System\\CurrentControlSet\\Control\\DeviceClasses";
  if( (a3 & 0x200) != 0 )
  {
    if( v8 )
    {
      if( v8 == -1 )
        return;
      v23 = -1i64;
      v24 = -1i64;
      do
        ++v24;
      while( v13[v24] );
      v25 = v24 + 49;
      if( a2 )
      {
        do
          ++v23;
        while( a2[v23] );
        v25 += v23 + 1;
      }
      if( v25 > 0xFFFFFFFF )
        return;
      if( a8 )
        *(_DWORD *)a8 = v25;
      if( (unsigned int)v25 > cchDest )
        return;
      v17 = cchDest;
      v18 = pszDest;
      if( a2 )
      {
        LODWORD(dwFlags) = 2048;
        RtlStringCchPrintfExW(pszDest, cchDest, 0i64, 0i64, dwFlags, (WCHAR *)L"%s\\%04u\\%s\\%s");
        return;
      }
      pszFormat = L"%s\\%04u\\%s";
    }
    else
    {
      v19 = -1i64;
      v20 = -1i64;
      do
        ++v20;
      while( v13[v20] );
      v21 = v20 + 52;
      if( a2 )
      {
        do
          ++v19;
        while( a2[v19] );
        v21 += v19 + 1;
      }
      if( v21 > 0xFFFFFFFF )
        return;
      if( a8 )
        *(_DWORD *)a8 = v21;
      if( (unsigned int)v21 > cchDest )
        return;
      v17 = cchDest;
      v18 = pszDest;
      if( !a2 )
      {
LABEL_18:
        LODWORD(dwFlags) = 2048;
        RtlStringCchPrintfExW(v18, v17, 0i64, 0i64, dwFlags, (WCHAR *)L"%s\\%s");
        return;
      }
      pszFormat = (WCHAR *)L"%s\\%s\\%s";
    }
    LODWORD(dwFlags) = 2048;
    RtlStringCchPrintfExW(v18, v17, 0i64, 0i64, dwFlags, pszFormat);
    return;
  }
  v14 = -1i64;
  v15 = -1i64;
  do
    ++v15;
  while( v13[v15] );
  v16 = v15 + 1;
  if( a2 )
  {
    do
      ++v14;
    while( a2[v14] );
    v16 += v14 + 1;
  }
  if( v16 <= 0xFFFFFFFF )
  {
    if( a8 )
      *(_DWORD *)a8 = v16;
    if( (unsigned int)v16 <= cchDest )
    {
      v17 = cchDest;
      v18 = pszDest;
      if( !a2 )
      {
        LODWORD(dwFlags) = 2048;
        RtlStringCchPrintfExW(pszDest, cchDest, 0i64, 0i64, dwFlags, (WCHAR *)L"%s");
        return;
      }
      goto LABEL_18;
    }
  }
}

Referenced by:

CmDeleteCommonClassRegKeyWorker
CmOpenCommonClassRegKeyWorker
PiDqGetRelativeObjectRegPath