SeAuditProcessExit

VOID __stdcall SeAuditProcessExit(_EPROCESS *Process, INT64 ExitStatus){
  unsigned __int64 v3; 
  NTSTATUS AllocatedFullProcessImageName; 
  _ADAPTER_OBJECT *v5; 
  unsigned __int8 **MasterAdapter; 
  unsigned __int8 *v7; 
  unsigned int v8; 
  _UNICODE_STRING *ImageName; 
  _SE_ADT_PARAMETER_ARRAY AuditParameters; 

  ImageName = 0i64;
  v3 = (unsigned int)ExitStatus;
  memset(&AuditParameters, 0i64, sizeof(AuditParameters));
  AllocatedFullProcessImageName = PsGetAllocatedFullProcessImageNameEx(Process, &ImageName);
  if( AllocatedFullProcessImageName < 0 )
  {
    SepAuditFailed((unsigned int)AllocatedFullProcessImageName);
  }
  else
  {
    v5 = (_ADAPTER_OBJECT *)PsReferencePrimaryToken(Process);
    *(_DWORD *)&AuditParameters.FlatSubCategoryId = 524422;
    AuditParameters.AuditId = 4689;
    AuditParameters.CategoryId = 5;
    MasterAdapter = (unsigned __int8 **)v5->MasterAdapter;
    AuditParameters.Parameters[1].Address = (void *)&SeSubsystemName;
    AuditParameters.Parameters[2].Data[0] = (unsigned __int64)v5->AdapterObject.ScatterBufferListHead;
    v7 = *MasterAdapter;
    AuditParameters.Parameters[4].Data[0] = (unsigned __int64)Process->UniqueProcessId;
    AuditParameters.Parameters[0].Type = SeAdtParmTypeSid;
    LODWORD(MasterAdapter) = v7[1];
    AuditParameters.Parameters[0].Address = v7;
    AuditParameters.Parameters[1].Type = SeAdtParmTypeString;
    AuditParameters.Parameters[1].Length = 32;
    AuditParameters.Parameters[2].Type = SeAdtParmTypeLogonId;
    AuditParameters.Parameters[0].Length = 4 * (_DWORD)MasterAdapter + 8;
    AuditParameters.Parameters[5].Address = ImageName;
    AuditParameters.Parameters[2].Length = 8;
    AuditParameters.Parameters[3].Type = SeAdtParmTypeHexUlong;
    v8 = ImageName->Length + 16;
    AuditParameters.Parameters[3].Length = 4;
    AuditParameters.Parameters[5].Length = v8;
    AuditParameters.Parameters[3].Data[0] = v3;
    AuditParameters.Parameters[4].Type = SeAdtParmTypePtr;
    AuditParameters.Parameters[4].Length = 8;
    AuditParameters.Parameters[5].Type = SeAdtParmTypeFileSpec;
    AuditParameters.ParameterCount = 6;
    SepAdtLogAuditRecord(&AuditParameters);
    HalPutDmaAdapter(v5);
  }
  if( ImageName )
    ExFreePoolWithTag(ImageName, 0);
}

Referenced by:

PspExitThread