VrpPreQueryKeyName
INT64 __stdcall VrpPreQueryKeyName(REG_QUERY_KEY_NAME *QueryNameInfo){
char *ObjectContext;
__int64 *v3;
__int64 *v4;
int v5;
__int64 v6;
unsigned __int16 *v7;
__int64 v8;
ULONG v9;
unsigned int v10;
UINT8 *v11;
__int64 v13[3];
GUID ActivityId;
struct _EVENT_DATA_DESCRIPTOR v15[2];
int *v16;
__int64 v17;
__int64 v18;
int v19;
int v20;
__int64 *v21;
__int64 v22;
ActivityId = 0i64;
EtwActivityIdControl(3u, &ActivityId);
ObjectContext = (char *)QueryNameInfo->ObjectContext;
v13[1] = (__int64)ObjectContext;
if( (unsigned int)CallbackContext <= 2 )
{
v3 = &EmptyUnicodeString;
}
else
{
v3 = &EmptyUnicodeString;
v4 = (__int64 *)(ObjectContext + 16);
if( !*((_QWORD *)ObjectContext + 3) )
v4 = &EmptyUnicodeString;
v5 = *(unsigned __int16 *)v4;
v6 = v4[1];
v16 = &v19;
v17 = 2i64;
v18 = v6;
v19 = v5;
v20 = 0;
tlgWriteTransfer_EtwWriteTransfer(
(__int64)&CallbackContext,
(unsigned __int8 *)byte_140023579,
&ActivityId,
0i64,
4u,
v15);
}
v7 = (unsigned __int16 *)(ObjectContext + 16);
v13[2] = (__int64)(ObjectContext + 16);
v8 = (__int64)(ObjectContext + 16);
v13[0] = (__int64)(ObjectContext + 16);
v9 = *((unsigned __int16 *)ObjectContext + 8) + 18;
*QueryNameInfo->ReturnLength = v9;
if( QueryNameInfo->Length >= v9 )
{
v11 = (UINT8 *)&QueryNameInfo->ObjectNameInfo[1];
memmove(v11, *((UINT8 **)ObjectContext + 3), *v7);
*(_WORD *)&v11[2 * ((unsigned __int64)*v7 >> 1)] = 0;
QueryNameInfo->ObjectNameInfo->Name.Length = *v7;
QueryNameInfo->ObjectNameInfo->Name.MaximumLength = *v7;
QueryNameInfo->ObjectNameInfo->Name.Buffer = (wchar_t *)v11;
v10 = -1073740541;
v8 = v13[0];
}
else
{
v10 = -1073741820;
}
if( (unsigned int)CallbackContext > 5 )
{
if( *((_QWORD *)ObjectContext + 3) )
v3 = (__int64 *)v8;
v16 = &v19;
v18 = v3[1];
v19 = *(unsigned __int16 *)v3;
v21 = v13;
v17 = 2i64;
v20 = 0;
LODWORD(v13[0]) = v10;
v22 = 4i64;
tlgWriteTransfer_EtwWriteTransfer(
(__int64)&CallbackContext,
(unsigned __int8 *)byte_1400233F5,
&ActivityId,
0i64,
5u,
v15);
}
return v10;
}Referenced by:
VrpRegistryCallback