SepAdtObjectReferenceAuditAlarm

VOID __stdcall SepAdtObjectReferenceAuditAlarm(
        VOID *Object,
        _SECURITY_SUBJECT_CONTEXT *SubjectSecurityContext,
        UINT64 DesiredAccess,
        UINT8 AccessGranted){
  _UNICODE_STRING *v4; 
  void *ClientToken; 
  void *PrimaryToken; 
  unsigned __int8 **v10; 
  unsigned __int8 *v11; 
  unsigned __int64 v12; 
  NTSTATUS NameString; 
  int v14; 
  int Length; 
  int v16; 
  unsigned int v17; 
  _UNICODE_STRING *TypeName; 
  _OBJECT_NAME_INFORMATION *ObjectNameInfo; 
  _SE_ADT_PARAMETER_ARRAY AuditParameters; 

  ObjectNameInfo = 0i64;
  v4 = 0i64;
  ClientToken = SubjectSecurityContext->ClientToken;
  PrimaryToken = SubjectSecurityContext->PrimaryToken;
  v17 = DesiredAccess;
  TypeName = 0i64;
  if( ClientToken )
    v10 = (unsigned __int8 **)*((_QWORD *)ClientToken + 19);
  else
    v10 = (unsigned __int8 **)*((_QWORD *)PrimaryToken + 19);
  v11 = *v10;
  v12 = *((_QWORD *)PrimaryToken + 3);
  memset(&AuditParameters, 0i64, sizeof(AuditParameters));
  AuditParameters.CategoryId = 3;
  AuditParameters.FlatSubCategoryId = 120;
  AuditParameters.AuditId = 4691;
  AuditParameters.Type = 8;
  if( !AccessGranted )
    AuditParameters.Type = 16;
  NameString = SepQueryNameString(Object, (PVOID *)&ObjectNameInfo);
  if( NameString >= 0 )
  {
    NameString = SepQueryTypeString(Object, &TypeName);
    if( NameString < 0 )
    {
      v4 = TypeName;
    }
    else
    {
      v14 = v11[1];
      AuditParameters.Parameters[0].Type = SeAdtParmTypeSid;
      AuditParameters.Parameters[0].Address = v11;
      AuditParameters.Parameters[1].Length = 32;
      AuditParameters.Parameters[2].Type = SeAdtParmTypeLogonId;
      AuditParameters.Parameters[0].Length = 4 * v14 + 8;
      AuditParameters.Parameters[1].Address = (void *)&SeSubsystemName;
      AuditParameters.Parameters[1].Type = SeAdtParmTypeString;
      AuditParameters.Parameters[2].Length = 8;
      if( ClientToken )
        AuditParameters.Parameters[2].Data[0] = *((_QWORD *)ClientToken + 3);
      else
        AuditParameters.Parameters[2].Data[0] = v12;
      v4 = TypeName;
      if( TypeName )
      {
        Length = TypeName->Length;
        AuditParameters.Parameters[3].Type = SeAdtParmTypeString;
        AuditParameters.Parameters[3].Length = Length + 16;
        AuditParameters.Parameters[3].Address = TypeName;
      }
      if( ObjectNameInfo )
      {
        v16 = *(_WORD *)ObjectNameInfo;
        AuditParameters.Parameters[4].Type = SeAdtParmTypeString;
        AuditParameters.Parameters[4].Length = v16 + 16;
        AuditParameters.Parameters[4].Address = ObjectNameInfo;
      }
      AuditParameters.Parameters[5].Data[0] = v17;
      AuditParameters.Parameters[6].Data[0] = v17;
      AuditParameters.Parameters[7].Data[0] = (unsigned __int64)SubjectSecurityContext->ProcessAuditId;
      AuditParameters.Parameters[5].Type = SeAdtParmTypeAccessMask;
      AuditParameters.Parameters[5].Length = 4;
      AuditParameters.Parameters[5].Data[1] = 3i64;
      AuditParameters.Parameters[6].Type = SeAdtParmTypeHexUlong;
      AuditParameters.Parameters[6].Length = 4;
      AuditParameters.Parameters[7].Type = SeAdtParmTypePtr;
      AuditParameters.Parameters[7].Length = 8;
      AuditParameters.ParameterCount = 8;
      SepAdtLogAuditRecord(&AuditParameters);
    }
  }
  if( ObjectNameInfo )
    ExFreePoolWithTag(ObjectNameInfo, 0);
  if( v4 )
    ExFreePoolWithTag(v4, 0);
  if( NameString < 0 )
    SepAuditFailed((unsigned int)NameString);
}

Referenced by:

SeObjectReferenceAuditAlarm