SepAdtLogAuditRecord
VOID __stdcall SepAdtLogAuditRecord(_SE_ADT_PARAMETER_ARRAY *AuditParameters){
unsigned __int8 CurrentIrql;
POOL_TYPE v3;
_QWORD *PoolWithTag;
INT64 v5;
void *ThreadServerSilo;
PVOID *v7;
int v8;
PVOID v9;
unsigned int v10;
void *v11;
INT64 v12;
void *v13;
char v14[8];
_KAPC_STATE ApcState;
if( !SepRmAuditingEnabled && (AuditParameters->Flags & 2) != 0 )
return;
CurrentIrql = KeGetCurrentIrql();
v3 = NonPagedPoolNx;
if( CurrentIrql != 2 )
v3 = PagedPool;
PoolWithTag = ExAllocatePoolWithTag(v3, 0x40ui64, 0x69416553ui64);
v5 = (INT64)PoolWithTag;
if( !PoolWithTag )
{
if( AuditParameters->AuditId != 521 )
SepAuditFailedRaisedIrql(3221225626i64);
return;
}
PoolWithTag[5] = 0i64;
*((_DWORD *)PoolWithTag + 12) = 0;
*((_DWORD *)PoolWithTag + 5) = 1;
*((_DWORD *)PoolWithTag + 8) = 1;
if( KeIsExecutingInArbitraryThreadContext() )
ThreadServerSilo = 0i64;
else
ThreadServerSilo = (void *)PsGetThreadServerSilo((INT64)KeGetCurrentThread());
*(_QWORD *)(v5 + 56) = ThreadServerSilo;
if( ThreadServerSilo )
ObfReferenceObjectWithTag(ThreadServerSilo, 0x69416553u);
v7 = (PVOID *)(v5 + 24);
v8 = SepAdtMarshallAuditRecord(AuditParameters, (void **)(v5 + 24), (_DWORD *)(v5 + 16), v3);
if( v8 < 0 )
{
v13 = *(void **)(v5 + 56);
if( v13 )
ObfDereferenceObjectWithTag(v13, 0x69416553ui64);
ExFreePoolWithTag((PVOID)v5, 0);
LODWORD(SepAdtLastAuditFailStatus) = v8;
_InterlockedIncrement(&SepAdtAuditFailureCount);
if( AuditParameters->AuditId == 521 )
goto LABEL_33;
v12 = (unsigned int)v8;
}
else
{
if( !SepRmAuditingEnabled )
{
v9 = *v7;
if( (*((_DWORD *)*v7 + 5) & 2) != 0 )
{
if( *(_QWORD *)(v5 + 56) )
{
ObfDereferenceObjectWithTag(*(PVOID *)(v5 + 56), 0x69416553ui64);
v9 = *(PVOID *)(v5 + 24);
}
ExFreePoolWithTag(v9, 0);
ExFreePoolWithTag((PVOID)v5, 0);
return;
}
}
v10 = *((_DWORD *)*v7 + 3);
*(_DWORD *)(v5 + 36) = v10;
if( AuditParameters->AuditId == 521 && (AuditParameters->Flags & 0x10) != 0 )
{
if( v10 <= 0x1D0 )
{
memset(&ApcState, 0, sizeof(ApcState));
KiStackAttachProcess((_KPROCESS *)SepRmLsaCallProcess, 0i64, &ApcState);
SepRmDispatchDataToLsa(v5);
KiUnstackDetachProcess(&ApcState, 0i64);
}
goto LABEL_33;
}
v14[0] = 0;
if( SepQueueWorkItem((INT64)&SepLsaAuditQueueInfo, v5, (BYTE *)v14) )
goto LABEL_33;
v11 = *(void **)(v5 + 56);
if( v11 )
ObfDereferenceObjectWithTag(v11, 0x69416553ui64);
ExFreePoolWithTag(*v7, 0);
ExFreePoolWithTag((PVOID)v5, 0);
if( v14[0] )
goto LABEL_33;
v12 = 3221225473i64;
}
SepAuditFailedRaisedIrql(v12);
LABEL_33:
if( SepAdtAuditFailureCount && CurrentIrql < 2u && AuditParameters->AuditId != 521 )
SepAdtLogAuditFailureEvent((unsigned int)SepAdtLastAuditFailStatus, 0);
}Referenced by:
SeAdtRegistryValueChangedAuditAlarm
SeAuditBootConfiguration
SeAuditFipsCryptoSelftests
SeAuditHandleDuplication
SeAuditHardLinkCreationWithTransaction
SeAuditProcessCreation
SeAuditProcessExit
SeAuditSystemTimeChange
SeAuditTransactionStateChange
SeOperationAuditAlarm
SeReportSecurityEventWithSubCategory
SepAdtCloseObjectAuditAlarm
SepAdtDeleteObjectAuditAlarm
SepAdtGenerateDiscardAudit
SepAdtLogAuditFailureEvent
SepAdtObjectReferenceAuditAlarm
SepAdtOpenObjectAuditAlarm
SepAdtOpenObjectForDeleteAuditAlarm
SepAdtPrivilegeObjectAuditAlarm
SepAdtPrivilegedServiceAuditAlarm
SepAdtSecurityDescriptorChangedAuditAlarm
SepAdtStagingEvent
SepAdtTokenRightAdjusted
SepAuditAssignPrimaryToken