CmClassSubkeyCallback

__int64 __fastcall CmClassSubkeyCallback(__int64 a1, __int64 a2, const wchar_t *a3, unsigned int *a4){
  char *v4; 
  unsigned __int8(__fastcall *v8)(__int64, const wchar_t *, _QWORD, _QWORD); 
  unsigned int v9; 
  unsigned int v10; 
  __int64 v12; 
  UINT64 dwFlags; 
  struct _UNICODE_STRING DestinationString; 
  HANDLE Handle; 
  Handle = 0i64;
  v4 = (char *)*((_QWORD *)a4 + 1);
  DestinationString = 0i64;
  if( v4
    && (a1 ? (v12 = *(_QWORD *)(a1 + 224)) : (v12 = 0i64), (int)SysCtxRegOpenKey(v12, v4, a3, 0, 0x20019u, &Handle) >= 0) )
  {
    ZwClose(Handle);
  }
  else if( ((unsigned __int8)*a4 == 2 || *a4 == 4)
         && (int)CmValidateInstallerClassName(a1, a3) >= 0
         && (int)RtlInitUnicodeStringEx(&DestinationString, (WCHAR *)a3) >= 0 )
  {
    v8 = (unsigned __int8(__fastcall *)(__int64, const wchar_t *, _QWORD, _QWORD))*((_QWORD *)a4 + 2);
    v9 = DestinationString.MaximumLength >> 1;
    if( !v8 || v8(a1, a3, *a4, *((_QWORD *)a4 + 3)) )
    {
      a4[11] += v9;
      v10 = a4[10];
      if( v10 > v9 )
      {
        LODWORD(dwFlags) = 2304;
        RtlStringCchCopyExW(*((WCHAR **)a4 + 4), v10, (WCHAR *)a3, 0i64, 0i64, dwFlags);
        *((_QWORD *)a4 + 4) += 2i64 * v9;
        a4[10] -= v9;
      }
    }
  }
  return 0i64;
}

Referenced by:

No references.