**
* This file is part of the mingw-w64 runtime package.
* No warranty is given; refer to the file DISCLAIMER within this package.
*/

#include <winapifamily.h>

#ifndef _ADTGEN_H
#define _ADTGEN_H

#if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)

#define AUDIT_TYPE_LEGACY 1
#define AUDIT_TYPE_WMI 2

typedef enum _AUDIT_PARAM_TYPE {
  APT_None = 1,
  APT_String,
  APT_Ulong,
  APT_Pointer,
  APT_Sid,
  APT_LogonId,
  APT_ObjectTypeList,
  APT_Luid,
  APT_Guid,
  APT_Time,
  APT_Int64,
  APT_IpAddress,
  APT_LogonIdWithSid
} AUDIT_PARAM_TYPE;

#define AP_ParamTypeBits 8
#define AP_ParamTypeMask __MSABI_LONG(0xff)

#define AP_FormatHex (__MSABI_LONG(0x1) << AP_ParamTypeBits)
#define AP_AccessMask (__MSABI_LONG(0x2) << AP_ParamTypeBits)
#define AP_Filespec (__MSABI_LONG(0x1) << AP_ParamTypeBits)
#define AP_SidAsLogonId (__MSABI_LONG(0x1) << AP_ParamTypeBits)
#define AP_PrimaryLogonId (__MSABI_LONG(0x1) << AP_ParamTypeBits)
#define AP_ClientLogonId (__MSABI_LONG(0x2) << AP_ParamTypeBits)
#define ApExtractType(TypeFlags) ((AUDIT_PARAM_TYPE) (TypeFlags & AP_ParamTypeMask))
#define ApExtractFlags(TypeFlags) ((TypeFlags & ~AP_ParamTypeMask))

#define _AUTHZ_SS_MAXSIZE 128

#define APF_AuditFailure 0x0
#define APF_AuditSuccess 0x1

#define APF_ValidFlags (APF_AuditSuccess)

#define AUTHZ_ALLOW_MULTIPLE_SOURCE_INSTANCES 0x1
#define AUTHZ_MIGRATED_LEGACY_PUBLISHER 0x2

#define AUTHZ_AUDIT_INSTANCE_INFORMATION 0x2

typedef struct _AUDIT_OBJECT_TYPE {
  GUID ObjectType;
  USHORT Flags;
  USHORT Level;
  ACCESS_MASK AccessMask;
} AUDIT_OBJECT_TYPE,*PAUDIT_OBJECT_TYPE;

typedef struct _AUDIT_OBJECT_TYPES {
  USHORT Count;
  USHORT Flags;
#ifdef __WIDL__
  [size_is (Count)]
#endif
  AUDIT_OBJECT_TYPE *pObjectTypes;
} AUDIT_OBJECT_TYPES,*PAUDIT_OBJECT_TYPES;

typedef struct _AUDIT_IP_ADDRESS {
  BYTE pIpAddress[_AUTHZ_SS_MAXSIZE];
} AUDIT_IP_ADDRESS,*PAUDIT_IP_ADDRESS;

typedef struct _AUDIT_PARAM {
  AUDIT_PARAM_TYPE Type;
  ULONG Length;
  DWORD Flags;
#ifdef __WIDL__
  [switch_type (AUDIT_PARAM_TYPE), switch_is (Type)]
#else
  __C89_NAMELESS
#endif
  union {
#ifdef __WIDL__
    [default]
#endif
    ULONG_PTR Data0;
#ifdef __WIDL__
    [case (APT_String)]
    [string]
#endif
    PWSTR String;
#ifdef __WIDL__
    [case (APT_Ulong, APT_Pointer)]
#endif
    ULONG_PTR u;
#ifdef __WIDL__
    [case (APT_Sid)]
#endif
    SID *psid;
#ifdef __WIDL__
    [case (APT_Guid)]
#endif
    GUID *pguid;
#ifdef __WIDL__
    [case (APT_LogonId)]
#endif
    ULONG LogonId_LowPart;
#ifdef __WIDL__
    [case (APT_ObjectTypeList)]
#endif
    AUDIT_OBJECT_TYPES *pObjectTypes;
#ifdef __WIDL__
    [case (APT_IpAddress)]
#endif
    AUDIT_IP_ADDRESS *pIpAddress;
  };
#ifdef __WIDL__
  [switch_type (AUDIT_PARAM_TYPE), switch_is (Type)]
#else
  __C89_NAMELESS
#endif
  union {
#ifdef __WIDL__
    [default]
#endif
    ULONG_PTR Data1;
#ifdef __WIDL__
    [case (APT_LogonId)]
#endif
    LONG LogonId_HighPart;
  };
} AUDIT_PARAM,*PAUDIT_PARAM;

typedef struct _AUDIT_PARAMS {
  ULONG Length;
  DWORD Flags;
  USHORT Count;
#ifdef __WIDL__
  [size_is (Count)]
#endif
  AUDIT_PARAM *Parameters;
} AUDIT_PARAMS,*PAUDIT_PARAMS;
typedef struct _AUTHZ_AUDIT_EVENT_TYPE_LEGACY {
  USHORT CategoryId;
  USHORT AuditId;
  USHORT ParameterCount;
} AUTHZ_AUDIT_EVENT_TYPE_LEGACY,*PAUTHZ_AUDIT_EVENT_TYPE_LEGACY;

typedef
#ifdef __WIDL__
[switch_type (BYTE)]
#endif
union _AUTHZ_AUDIT_EVENT_TYPE_UNION {
#ifdef __WIDL__
  [case (AUDIT_TYPE_LEGACY)]
#endif
  AUTHZ_AUDIT_EVENT_TYPE_LEGACY Legacy;
} AUTHZ_AUDIT_EVENT_TYPE_UNION,*PAUTHZ_AUDIT_EVENT_TYPE_UNION;

typedef
struct _AUTHZ_AUDIT_EVENT_TYPE_OLD {
  ULONG Version;
  DWORD dwFlags;
  LONG RefCount;
  ULONG_PTR hAudit;
  LUID LinkId;
#ifdef __WIDL__
  [switch_is (Version)]
#endif
  AUTHZ_AUDIT_EVENT_TYPE_UNION u;
} AUTHZ_AUDIT_EVENT_TYPE_OLD;

typedef
#ifdef __WIDL__
[handle]
#endif
AUTHZ_AUDIT_EVENT_TYPE_OLD *PAUTHZ_AUDIT_EVENT_TYPE_OLD;
#define AUTHZP_WPD_EVENT 0x10

typedef
#ifdef __WIDL__
[context_handle]
#endif
PVOID AUDIT_HANDLE,*PAUDIT_HANDLE;

#endif
#endif
