SeAuditHandleDuplication

VOID __stdcall SeAuditHandleDuplication(
        VOID *SourceHandle,
        VOID *NewHandle,
        _EPROCESS *SourceProcess,
        _EPROCESS *TargetProcess){
  __int64 v8; 
  __int64 v9; 
  unsigned __int8 *v10; 
  int v11; 
  UINT8 IsKernelHandle; 
  INT8 v13; 
  unsigned int v14; 
  _SE_ADT_PARAMETER_TYPE v15; 
  __int64 v16; 
  unsigned __int64 v17; 
  UINT8 v18; 
  __int64 v19; 
  __int64 v20; 
  unsigned __int64 v21; 
  _SE_ADT_PARAMETER_TYPE v22; 
  unsigned int v23; 
  _QWORD SubjectContext[5]; 
  _SE_ADT_PARAMETER_ARRAY AuditParameters; 

  memset(&SubjectContext[1], 0, 32);
  SeCaptureSubjectContext((INT64)&SubjectContext[1]);
  v8 = SubjectContext[3];
  v9 = SubjectContext[3];
  if( SubjectContext[1] )
    v9 = SubjectContext[1];
  v10 = **(unsigned __int8 ***)(v9 + 152);
  memset(&AuditParameters, 0i64, sizeof(AuditParameters));
  v11 = v10[1];
  AuditParameters.CategoryId = 3;
  if( SubjectContext[1] )
    v8 = SubjectContext[1];
  *(_DWORD *)&AuditParameters.FlatSubCategoryId = 524411;
  AuditParameters.Parameters[0].Length = 4 * v11 + 8;
  AuditParameters.AuditId = 4690;
  AuditParameters.Parameters[1].Address = (void *)&SeSubsystemName;
  AuditParameters.Parameters[2].Data[0] = *(_QWORD *)(v8 + 24);
  AuditParameters.Parameters[0].Type = SeAdtParmTypeSid;
  AuditParameters.Parameters[0].Address = v10;
  AuditParameters.Parameters[1].Type = SeAdtParmTypeString;
  AuditParameters.Parameters[1].Length = 32;
  AuditParameters.Parameters[2].Type = SeAdtParmTypeLogonId;
  AuditParameters.Parameters[2].Length = 8;
  AuditParameters.Parameters[3].Type = SeAdtParmTypePtr;
  AuditParameters.Parameters[3].Length = 8;
  IsKernelHandle = ObpIsKernelHandle(SourceHandle, 0);
  AuditParameters.Parameters[4].Type = v15;
  v17 = v16 ^ 0xFFFFFFFF80000000ui64;
  AuditParameters.Parameters[4].Length = v14;
  AuditParameters.Parameters[5].Type = v15;
  if( !IsKernelHandle )
    v17 = (unsigned __int64)SourceHandle;
  AuditParameters.Parameters[4].Data[0] = (unsigned __int64)SourceProcess->UniqueProcessId;
  AuditParameters.Parameters[5].Length = v14;
  AuditParameters.Parameters[3].Data[0] = v17 & 0xFFFFFFFFFFFFFFFCui64;
  v18 = ObpIsKernelHandle(NewHandle, v13);
  v21 = v20 ^ v19;
  AuditParameters.Parameters[6].Type = v22;
  AuditParameters.Parameters[6].Length = v23;
  if( !v18 )
    v21 = (unsigned __int64)NewHandle;
  AuditParameters.Parameters[6].Data[0] = (unsigned __int64)TargetProcess->UniqueProcessId;
  AuditParameters.ParameterCount = 7;
  AuditParameters.Parameters[5].Data[0] = v21 & 0xFFFFFFFFFFFFFFFCui64;
  SepAdtLogAuditRecord(&AuditParameters);
  SeReleaseSubjectContext((PSECURITY_SUBJECT_CONTEXT)&SubjectContext[1]);
}

Referenced by:

ObAuditInheritedHandleProcedure
ObCompleteObjectDuplication