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.