EtwTimLogUserCetSetContextIpValidationFailure
void __fastcall EtwTimLogUserCetSetContextIpValidationFailure(int a1, __int64 a2, void *a3, int a4, int a5){
__int64 *v5;
__int64 *v6;
const wchar_t *v7;
unsigned __int16 v9;
unsigned int v10;
int v11;
const wchar_t *v12;
wchar_t *Buffer;
int Length;
__int16 v15;
unsigned int v16;
unsigned __int16 *Pool2;
unsigned __int16 *v18;
unsigned __int16 v19;
__int64 v20;
__int64 v21;
__int64 v22;
EVENT_DESCRIPTOR *v23;
unsigned int v24;
int v25;
__int64 v26;
__int64 v27;
UINT64 v28;
UINT64 v29;
unsigned __int16 *v30;
__int16 v31[2];
__int16 v32[2];
__int16 v33[2];
int v34;
int v35;
PVOID BaseAddress;
UINT64 a3a;
UINT64 v38;
__int64 v39;
_UNICODE_STRING P;
struct _EVENT_DATA_DESCRIPTOR v41;
int *v42;
__int64 v43;
int *v44;
__int64 v45;
__int64 v46;
int v47[2];
int *v48;
__int64 v49;
wchar_t *v50;
int v51[2];
UINT64 *v52;
__int64 v53;
int *v54;
__int64 v55;
__int64 v56;
int v57[2];
int *v58;
__int64 v59;
PVOID *p_BaseAddress;
__int64 v61;
__int64 *v62;
__int64 v63;
struct _EVENT_DATA_DESCRIPTOR UserData;
const wchar_t *v65;
int v66;
int v67;
__int16 *v68;
__int64 v69;
const wchar_t *v70;
int v71;
int v72;
__int64 v73[20];
int v74;
v74 = a4;
v5 = *(__int64 **)(a2 + 1472);
v6 = &EmptyUnicodeString;
v35 = a1;
a3a = 0i64;
BaseAddress = a3;
if( v5 )
v6 = v5;
v7 = L"(null)";
P = 0i64;
v9 = *(_WORD *)v6;
v10 = 12;
*(_QWORD *)&UserData.Size = 2i64;
if( v9 )
{
v31[0] = v9 >> 1;
UserData.Ptr = (unsigned __int64)v31;
v11 = *(unsigned __int16 *)v6;
v12 = (const wchar_t *)v6[1];
}
else
{
v31[0] = 6;
UserData.Ptr = (unsigned __int64)v31;
v12 = L"(null)";
v11 = 12;
}
v65 = v12;
v66 = v11;
v67 = 0;
EtwpQueryProcessCommandLine((_EPROCESS *)a2, &P);
Buffer = P.Buffer;
LOWORD(v34) = P.Length;
v69 = 2i64;
if( P.Length )
{
v70 = P.Buffer;
v68 = v33;
Length = P.Length;
v15 = P.Length >> 1;
}
else
{
v70 = L"(null)";
v68 = v33;
Length = 12;
v15 = 6;
}
v71 = Length;
v33[0] = v15;
v72 = 0;
v16 = EtwpTiFillProcessIdentity(v73, a2, &a3a) + 4;
Pool2 = (unsigned __int16 *)ExAllocatePool2(256i64, 0x200ui64, 0x6E734954ui64);
v18 = Pool2;
if( Pool2
&& (ZwQueryVirtualMemory((PVOID)0xFFFFFFFFFFFFFFFFi64, BaseAddress, MemorySectionName, Pool2, 0x200ui64, 0i64) >= 0 ? (v19 = *v18) : (*v18 = 0, v19 = 0),
v19) )
{
v32[0] = v19 >> 1;
v20 = 2i64 * v16;
*(&UserData.Ptr + v20) = (unsigned __int64)v32;
*((_QWORD *)&UserData.Size + v20) = 2i64;
v10 = *v18;
v7 = (const wchar_t *)*((_QWORD *)v18 + 1);
}
else
{
v32[0] = 6;
v21 = 2i64 * v16;
*(&UserData.Ptr + v21) = (unsigned __int64)v32;
*((_QWORD *)&UserData.Size + v21) = 2i64;
}
v22 = 2i64 * (v16 + 1);
v23 = (EVENT_DESCRIPTOR *)MITIGATION_AUDIT_USER_CET_SET_CONTEXT_IP_VALIDATION_FAILURE;
v24 = v16 + 2;
*(&UserData.Ptr + v22) = (unsigned __int64)v7;
*(&UserData.Size + 2 * v22) = v10;
*(&UserData.Reserved + 2 * v22) = 0;
v25 = v35;
v26 = 2i64 * v24++;
*(&UserData.Ptr + v26) = (unsigned __int64)&v74;
*((_QWORD *)&UserData.Size + v26) = 4i64;
v27 = 2i64 * v24;
v28 = v24 + 1;
*(&UserData.Ptr + v27) = (unsigned __int64)&a5;
v29 = EtwSecurityMitigationsRegHandle;
*((_QWORD *)&UserData.Size + v27) = 4i64;
if( v25 != 1 )
v23 = (EVENT_DESCRIPTOR *)&MITIGATION_ENFORCE_USER_CET_SET_CONTEXT_IP_VALIDATION_FAILURE;
EtwWrite(v29, v23, 0i64, v28, &UserData);
if( (unsigned int)dword_140C02BB0 > 5 && tlgKeywordOn((__int64)&dword_140C02BB0, 0x400000000000i64) )
{
v35 = v25;
v42 = &v35;
v43 = 4i64;
v44 = v47;
v46 = v6[1];
v47[0] = *(unsigned __int16 *)v6;
v48 = v51;
v51[0] = (unsigned __int16)v34;
v38 = a3a;
v52 = &v38;
v54 = v57;
v56 = *((_QWORD *)v30 + 1);
v57[0] = *v30;
v34 = v74;
v58 = &v34;
LODWORD(BaseAddress) = a5;
p_BaseAddress = &BaseAddress;
v62 = &v39;
v45 = 2i64;
v47[1] = 0;
v49 = 2i64;
v50 = Buffer;
v51[1] = 0;
v53 = 8i64;
v55 = 2i64;
v57[1] = 0;
v59 = 4i64;
v61 = 4i64;
v39 = 0x1000000i64;
v63 = 8i64;
tlgWriteTransfer_EtwWriteTransfer(
(__int64)&dword_140C02BB0,
(unsigned __int8 *)byte_14002C565,
0i64,
0i64,
0xDu,
&v41);
}
if( Buffer )
ExFreePoolWithTag(Buffer, 0);
if( v18 )
ExFreePoolWithTag(v18, 0);
}Referenced by:
KiLogUserCetSetContextIpValidationFailureWorker