SeAuditPlugAndPlay

void __fastcall SeAuditPlugAndPlay(
        unsigned __int16 *a1,
        unsigned __int16 *a2,
        unsigned __int16 *a3,
        unsigned __int16 *a4,
        unsigned __int16 *a5,
        __int64 a6,
        unsigned __int16 *a7,
        int a8,
        char a9){
  ULONG v13; 
  ULONG v14; 
  _QWORD *PrimaryToken; 
  void *ClientToken; 
  unsigned __int8 *v17; 
  ULONG_PTR v18; 
  __int64 v19; 
  UINT8 pbPreventCoaf[8]; 
  struct _SECURITY_SUBJECT_CONTEXT SubjectContext; 
  _SE_ADT_PARAMETER_ARRAY_EX result; 
  SubjectContext.ClientToken = 0i64;
  SubjectContext.ImpersonationLevel = 0x80000000;
  memset(&SubjectContext.ImpersonationLevel + 1, 0, 20);
  memset((INT64)&result, 0i64);
  pbPreventCoaf[0] = 0;
  if( a8 )
  {
    switch( a8 )
    {
      case 1:
        v13 = 6419;
        break;
      case 2:
        v13 = 6420;
        break;
      case 3:
        v13 = 6421;
        break;
      case 4:
        v13 = 6422;
        break;
      case 5:
        v13 = 6423;
        break;
      case 6:
        v13 = 6424;
        break;
      default:
        return;
    }
    v14 = 0;
  }
  else
  {
    v13 = 6416;
    v14 = 1;
  }
  result.ParameterCount = 0;
  result.AuditId = v13;
  result.CategoryId = 5;
  result.FlatSubCategoryId = 137;
  result.Version = v14;
  result.Type = 8;
  if( !a9 )
    result.Type = 16;
  SeCaptureSubjectContext(&SubjectContext);
  PrimaryToken = SubjectContext.PrimaryToken;
  ClientToken = SubjectContext.PrimaryToken;
  if( SubjectContext.ClientToken )
    ClientToken = SubjectContext.ClientToken;
  if( SubjectContext.ClientToken )
    PrimaryToken = SubjectContext.ClientToken;
  v17 = (unsigned __int8 *)**((_QWORD **)ClientToken + 19);
  v18 = PrimaryToken[3];
  result.Parameters[result.ParameterCount].Type = SeAdtParmTypeSid;
  result.Parameters[result.ParameterCount].Length = 4 * v17[1] + 8;
  result.Parameters[result.ParameterCount++].Address = v17;
  result.Parameters[result.ParameterCount].Type = SeAdtParmTypeString;
  result.Parameters[result.ParameterCount].Length = 32;
  result.Parameters[result.ParameterCount++].Address = &SeSubsystemName;
  result.Parameters[result.ParameterCount].Type = SeAdtParmTypeLogonId;
  result.Parameters[result.ParameterCount].Length = 8;
  result.Parameters[result.ParameterCount++].Data[0] = v18;
  result.Parameters[result.ParameterCount].Type = SeAdtParmTypeString;
  result.Parameters[result.ParameterCount].Length = *a1 + 16;
  result.Parameters[result.ParameterCount++].Address = a1;
  result.Parameters[result.ParameterCount].Type = SeAdtParmTypeString;
  result.Parameters[result.ParameterCount].Length = *a2 + 16;
  result.Parameters[result.ParameterCount].Address = a2;
  v19 = ++result.ParameterCount;
  result.Parameters[v19].Type = SeAdtParmTypeGuid;
  result.Parameters[result.ParameterCount].Length = 16;
  result.Parameters[result.ParameterCount++].Address = (PVOID)a6;
  result.Parameters[result.ParameterCount].Type = SeAdtParmTypeString;
  result.Parameters[result.ParameterCount].Length = *a7 + 16;
  result.Parameters[result.ParameterCount++].Address = a7;
  result.Parameters[result.ParameterCount].Type = SeAdtParmTypeMultiSzString;
  result.Parameters[result.ParameterCount].Length = *a3 + 16;
  result.Parameters[result.ParameterCount++].Address = a3;
  result.Parameters[result.ParameterCount].Type = SeAdtParmTypeMultiSzString;
  result.Parameters[result.ParameterCount].Length = *a4 + 16;
  result.Parameters[result.ParameterCount++].Address = a4;
  result.Parameters[result.ParameterCount].Type = SeAdtParmTypeMultiSzString;
  result.Parameters[result.ParameterCount].Length = *a5 + 16;
  result.Parameters[result.ParameterCount++].Address = a5;
  AdtpWriteToEtwEx(&result, pbPreventCoaf);
  SeReleaseSubjectContext(&SubjectContext);
}

Referenced by:

PiAuditDeviceOperation