NtPrivilegedServiceAuditAlarm

NTSTATUS __stdcall NtPrivilegedServiceAuditAlarm(
        _UNICODE_STRING *SubsystemName,
        _UNICODE_STRING *ServiceName,
        VOID *ClientToken,
        PRIVILEGE_SET *Privileges,
        UINT8 AccessGranted){
  char PreviousMode; 
  int v10; 
  INT64 v11; 
  INT64 v12; 
  _ADAPTER_OBJECT *v13; 
  unsigned int PrivilegeCount; 
  UINT64 v15; 
  char *v16; 
  VOID **PoolWithTag; 
  _PRIVILEGE_SET *v18; 
  _UNICODE_STRING *v19; 
  _UNICODE_STRING *v20; 
  NTSTATUS v22; 
  INT64 v23; 
  PVOID *Object; 
  POBJECT_HANDLE_INFORMATION HandleInformation; 
  INT64 v26; 
  INT64 v27; 
  int v28; 
  PVOID v29; 
  VOID **v30; 
  _UNICODE_STRING *CapturedServiceName; 
  _UNICODE_STRING *DestString; 
  _SECURITY_SUBJECT_CONTEXT SubjectContext; 
  unsigned int v34; 
  unsigned int v35; 

  v30 = 0i64;
  memset(&SubjectContext, 0, sizeof(SubjectContext));
  DestString = 0i64;
  CapturedServiceName = 0i64;
  PreviousMode = KeGetCurrentThread()->PreviousMode;
  SeCaptureSubjectContext((INT64)&SubjectContext);
  if( !SeCheckAuditPrivilege(&SubjectContext, PreviousMode) )
  {
    v22 = -1073741727;
LABEL_36:
    SeReleaseSubjectContext(&SubjectContext);
    return v22;
  }
  v29 = 0i64;
  v10 = ObReferenceObjectByHandle(ClientToken, 8ui64, (_OBJECT_TYPE *)SeTokenObjectType, PreviousMode, &v29, 0i64);
  v28 = v10;
  if( v10 < 0 )
  {
    SeReleaseSubjectContext(&SubjectContext);
    if( v10 == -1073741816 )
      return v10;
    v23 = (unsigned int)v10;
LABEL_33:
    SepAuditFailed(v23);
    return v10;
  }
  v13 = (_ADAPTER_OBJECT *)v29;
  if( *((_DWORD *)v29 + 48) == 2 && *((int *)v29 + 49) < 1 )
  {
    HalPutDmaAdapter((PADAPTER_OBJECT)v29);
    v22 = -1073741659;
    goto LABEL_36;
  }
  if( SubsystemName
    && (v10 = SepProbeAndCaptureString_U(
                SubsystemName,
                &DestString,
                v11,
                v12,
                (INT64)Object,
                (INT64)HandleInformation,
                v26,
                v27),
        v28 = v10,
        v10 < 0)
    || ServiceName
    && (v10 = SepProbeAndCaptureString_U(
                ServiceName,
                &CapturedServiceName,
                v11,
                v12,
                (INT64)Object,
                (INT64)HandleInformation,
                v26,
                v27),
        v28 = v10,
        v10 < 0) )
  {
    v18 = (_PRIVILEGE_SET *)v30;
  }
  else
  {
    if( ((unsigned __int8)Privileges & 3) != 0 )
      ExRaiseDatatypeMisalignment();
    PrivilegeCount = Privileges->PrivilegeCount;
    v34 = PrivilegeCount;
    if( PrivilegeCount >= 0x43 )
    {
      v10 = -1073741811;
      v18 = (_PRIVILEGE_SET *)v30;
    }
    else
    {
      v15 = 12 * PrivilegeCount + 8;
      v35 = 12 * PrivilegeCount + 8;
      if( 12 * PrivilegeCount != -8 )
      {
        v16 = (char *)Privileges + (unsigned int)v15;
        if( (unsigned __int64)v16 > 0x7FFFFFFF0000i64 || v16 < (char *)Privileges )
          MEMORY[0x7FFFFFFF0000] = 0;
      }
      PoolWithTag = ExAllocatePoolWithTag(1ui64, v15, 1917871443i64);
      v18 = (_PRIVILEGE_SET *)PoolWithTag;
      v30 = PoolWithTag;
      if( PoolWithTag )
      {
        memmove(PoolWithTag, Privileges, 12 * PrivilegeCount + 8);
        v18->PrivilegeCount = PrivilegeCount;
        v10 = v28;
      }
      else
      {
        v10 = -1073741670;
      }
    }
    v13 = (_ADAPTER_OBJECT *)v29;
  }
  if( v10 < 0 )
  {
    if( DestString )
      ExFreePoolWithTag(DestString, 0);
    if( CapturedServiceName )
      ExFreePoolWithTag(CapturedServiceName, 0);
    if( v18 )
      ExFreePoolWithTag(v18, 0);
    SeReleaseSubjectContext(&SubjectContext);
    HalPutDmaAdapter(v13);
    if( v10 != -1073741670 )
      return v10;
    v23 = 3221225626i64;
    goto LABEL_33;
  }
  v19 = CapturedServiceName;
  v20 = DestString;
  SepAdtPrivilegedServiceAuditAlarm(
    &SubjectContext,
    DestString,
    CapturedServiceName,
    (_TOKEN *)v13,
    (_TOKEN *)SubjectContext.PrimaryToken,
    v18,
    AccessGranted);
  if( v20 )
    ExFreePoolWithTag(v20, 0);
  if( v19 )
    ExFreePoolWithTag(v19, 0);
  if( v18 )
    ExFreePoolWithTag(v18, 0);
  HalPutDmaAdapter(v13);
  SeReleaseSubjectContext(&SubjectContext);
  return 0;
}

Referenced by:

No references.