KiLogUserCetSetContextIpValidationFailure
VOID __fastcall KiLogUserCetSetContextIpValidationFailure(INT64 a1, INT64 a2, INT64 a3, UINT8 a4){
int v5;
int v6;
int v7;
struct _EX_RUNDOWN_REF *v8;
signed __int32 Ptr_high;
signed __int32 v10;
WORK_QUEUE_ITEM *Pool2;
INT64 v12;
v5 = a4;
v6 = a2;
v7 = a1;
v8 = (struct _EX_RUNDOWN_REF *)*((_QWORD *)KeGetCurrentThread() + 68);
_m_prefetchw((char *)&v8[314].Ptr + 4);
Ptr_high = HIDWORD(v8[314].Ptr);
do
{
v10 = Ptr_high;
Ptr_high = _InterlockedCompareExchange((volatile signed __int32 *)&v8[314].Ptr + 1, Ptr_high | 0x80000, Ptr_high);
}
while( v10 != Ptr_high );
if( (Ptr_high & 0x80000) == 0 )
{
Pool2 = (WORK_QUEUE_ITEM *)ExAllocatePool2(256i64, 0x40ui64, 0x63736C4Bui64);
if( Pool2 )
{
if( ExAcquireRundownProtection(v8 + 139) )
{
ObfReferenceObject(v8);
Pool2->List.Flink = 0i64;
Pool2->WorkerRoutine = (void(__fastcall *)(void *))KiLogUserCetSetContextIpValidationFailureWorker;
Pool2->Parameter = Pool2;
LODWORD(Pool2[1].List.Flink) = v7;
Pool2[1].List.Blink = (_LIST_ENTRY *)v8;
Pool2[1].WorkerRoutine = (void(__fastcall *)(void *))a3;
LODWORD(Pool2[1].Parameter) = v5;
HIDWORD(Pool2[1].Parameter) = v6;
ExQueueWorkItem(Pool2, DelayedWorkQueue);
}
else
{
ExFreePoolWithTag(Pool2, 0);
}
}
LODWORD(v12) = 0;
wil_details_FeatureReporting_ReportUsageToService(
&Feature_CET_User_Audit_Livedump__private_reporting,
0x178806Fui64,
0i64,
0i64,
(FEATURE_LOGGED_TRAITS *)&Feature_PdttSupport_logged_traits,
v12);
}
}Referenced by:
KeVerifyContextIpForUserCet