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

#ifndef __WIDL__
#include <_mingw_unicode.h>
#include <wtypes.h>
#endif

#include <winapifamily.h>

#ifdef __cplusplus
extern "C" {
#endif

#if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
#define AccFree LocalFree

  typedef enum _SE_OBJECT_TYPE {
    SE_UNKNOWN_OBJECT_TYPE = 0,
    SE_FILE_OBJECT,
    SE_SERVICE,
    SE_PRINTER,
    SE_REGISTRY_KEY,
    SE_LMSHARE,
    SE_KERNEL_OBJECT,
    SE_WINDOW_OBJECT,
    SE_DS_OBJECT,
    SE_DS_OBJECT_ALL,
    SE_PROVIDER_DEFINED_OBJECT,
    SE_WMIGUID_OBJECT,
    SE_REGISTRY_WOW64_32KEY,
  } SE_OBJECT_TYPE;

  typedef enum _TRUSTEE_TYPE {
    TRUSTEE_IS_UNKNOWN,
    TRUSTEE_IS_USER,
    TRUSTEE_IS_GROUP,
    TRUSTEE_IS_DOMAIN,
    TRUSTEE_IS_ALIAS,
    TRUSTEE_IS_WELL_KNOWN_GROUP,
    TRUSTEE_IS_DELETED,
    TRUSTEE_IS_INVALID,
    TRUSTEE_IS_COMPUTER
  } TRUSTEE_TYPE;
  typedef enum _TRUSTEE_FORM {
    TRUSTEE_IS_SID,
    TRUSTEE_IS_NAME,
    TRUSTEE_BAD_FORM,
    TRUSTEE_IS_OBJECTS_AND_SID,
    TRUSTEE_IS_OBJECTS_AND_NAME
  } TRUSTEE_FORM;

  typedef enum _MULTIPLE_TRUSTEE_OPERATION {
    NO_MULTIPLE_TRUSTEE,
    TRUSTEE_IS_IMPERSONATE,
  } MULTIPLE_TRUSTEE_OPERATION;

  typedef struct _OBJECTS_AND_SID {
    DWORD ObjectsPresent;
    GUID ObjectTypeGuid;
    GUID InheritedObjectTypeGuid;
    SID *pSid;
  } OBJECTS_AND_SID, *POBJECTS_AND_SID;

  typedef struct _OBJECTS_AND_NAME_A {
    DWORD ObjectsPresent;
    SE_OBJECT_TYPE ObjectType;
    LPSTR ObjectTypeName;
    LPSTR InheritedObjectTypeName;
    LPSTR ptstrName;
  } OBJECTS_AND_NAME_A, *POBJECTS_AND_NAME_A;

  typedef struct _OBJECTS_AND_NAME_W {
    DWORD ObjectsPresent;
    SE_OBJECT_TYPE ObjectType;
    LPWSTR ObjectTypeName;
    LPWSTR InheritedObjectTypeName;
    LPWSTR ptstrName;
  } OBJECTS_AND_NAME_W, *POBJECTS_AND_NAME_W;

  __MINGW_TYPEDEF_AW(OBJECTS_AND_NAME_)
  __MINGW_TYPEDEF_AW(POBJECTS_AND_NAME_)

  typedef struct _TRUSTEE_A {
    struct _TRUSTEE_A *pMultipleTrustee;
    MULTIPLE_TRUSTEE_OPERATION MultipleTrusteeOperation;
    TRUSTEE_FORM TrusteeForm;
    TRUSTEE_TYPE TrusteeType;
#ifdef __WIDL__
    [switch_is (TrusteeForm)] union {
      [case (TRUSTEE_IS_NAME)] LPSTR ptstrName;
      [case (TRUSTEE_IS_SID)] SID *pSid;
      [case (TRUSTEE_IS_OBJECTS_AND_SID)] OBJECTS_AND_SID *pObjectsAndSid;
      [case (TRUSTEE_IS_OBJECTS_AND_NAME)] OBJECTS_AND_NAME_A *pObjectsAndName;
    };
#else
    LPSTR ptstrName;
#endif
  } TRUSTEE_A, *PTRUSTEE_A, TRUSTEEA, *PTRUSTEEA;

  typedef struct _TRUSTEE_W {
    struct _TRUSTEE_W *pMultipleTrustee;
    MULTIPLE_TRUSTEE_OPERATION MultipleTrusteeOperation;
    TRUSTEE_FORM TrusteeForm;
    TRUSTEE_TYPE TrusteeType;
#ifdef __WIDL__
    [switch_is (TrusteeForm)] union {
      [case (TRUSTEE_IS_NAME)] LPWSTR ptstrName;
      [case (TRUSTEE_IS_SID)] SID *pSid;
      [case (TRUSTEE_IS_OBJECTS_AND_SID)] OBJECTS_AND_SID *pObjectsAndSid;
      [case (TRUSTEE_IS_OBJECTS_AND_NAME)] OBJECTS_AND_NAME_W *pObjectsAndName;
    };
#else
    LPWSTR ptstrName;
#endif
  } TRUSTEE_W, *PTRUSTEE_W, TRUSTEEW, *PTRUSTEEW;

  __MINGW_TYPEDEF_AW(TRUSTEE_)
  __MINGW_TYPEDEF_AW(PTRUSTEE_)
  __MINGW_TYPEDEF_AW(TRUSTEE)
  __MINGW_TYPEDEF_AW(PTRUSTEE)

  typedef enum _ACCESS_MODE {
    NOT_USED_ACCESS = 0,
    GRANT_ACCESS,
    SET_ACCESS,
    DENY_ACCESS,
    REVOKE_ACCESS,
    SET_AUDIT_SUCCESS,
    SET_AUDIT_FAILURE
  } ACCESS_MODE;

#define NO_INHERITANCE 0x0
#define SUB_OBJECTS_ONLY_INHERIT 0x1
#define SUB_CONTAINERS_ONLY_INHERIT 0x2
#define SUB_CONTAINERS_AND_OBJECTS_INHERIT 0x3
#define INHERIT_NO_PROPAGATE 0x4
#define INHERIT_ONLY 0x8
#define INHERITED_ACCESS_ENTRY 0x10

#define INHERITED_PARENT 0x10000000
#define INHERITED_GRANDPARENT 0x20000000

  typedef struct _EXPLICIT_ACCESS_A {
    DWORD grfAccessPermissions;
    ACCESS_MODE grfAccessMode;
    DWORD grfInheritance;
    TRUSTEE_A Trustee;
  } EXPLICIT_ACCESS_A, *PEXPLICIT_ACCESS_A, EXPLICIT_ACCESSA, *PEXPLICIT_ACCESSA;

  typedef struct _EXPLICIT_ACCESS_W {
    DWORD grfAccessPermissions;
    ACCESS_MODE grfAccessMode;
    DWORD grfInheritance;
    TRUSTEE_W Trustee;
  } EXPLICIT_ACCESS_W, *PEXPLICIT_ACCESS_W, EXPLICIT_ACCESSW, *PEXPLICIT_ACCESSW;

  __MINGW_TYPEDEF_AW(EXPLICIT_ACCESS_)
  __MINGW_TYPEDEF_AW(PEXPLICIT_ACCESS_)
  __MINGW_TYPEDEF_AW(EXPLICIT_ACCESS)
  __MINGW_TYPEDEF_AW(PEXPLICIT_ACCESS)

#define ACCCTRL_DEFAULT_PROVIDERA "Windows NT Access Provider"
#define ACCCTRL_DEFAULT_PROVIDERW L"Windows NT Access Provider"

#define ACCCTRL_DEFAULT_PROVIDER __MINGW_NAME_AW(ACCCTRL_DEFAULT_PROVIDER)

  typedef ULONG ACCESS_RIGHTS, *PACCESS_RIGHTS;
  typedef ULONG INHERIT_FLAGS, *PINHERIT_FLAGS;

  typedef struct _ACTRL_ACCESS_ENTRYA {
    TRUSTEE_A Trustee;
    ULONG fAccessFlags;
    ACCESS_RIGHTS Access;
    ACCESS_RIGHTS ProvSpecificAccess;
    INHERIT_FLAGS Inheritance;
    LPSTR lpInheritProperty;
  } ACTRL_ACCESS_ENTRYA, *PACTRL_ACCESS_ENTRYA;

  typedef struct _ACTRL_ACCESS_ENTRYW {
    TRUSTEE_W Trustee;
    ULONG fAccessFlags;
    ACCESS_RIGHTS Access;
    ACCESS_RIGHTS ProvSpecificAccess;
    INHERIT_FLAGS Inheritance;
    LPWSTR lpInheritProperty;
  } ACTRL_ACCESS_ENTRYW, *PACTRL_ACCESS_ENTRYW;

  __MINGW_TYPEDEF_AW(ACTRL_ACCESS_ENTRY)
  __MINGW_TYPEDEF_AW(PACTRL_ACCESS_ENTRY)

  typedef struct _ACTRL_ACCESS_ENTRY_LISTA {
    ULONG cEntries;
#ifdef __WIDL__
    [size_is (cEntries)]
#endif
    ACTRL_ACCESS_ENTRYA *pAccessList;
  } ACTRL_ACCESS_ENTRY_LISTA, *PACTRL_ACCESS_ENTRY_LISTA;

  typedef struct _ACTRL_ACCESS_ENTRY_LISTW {
    ULONG cEntries;
#ifdef __WIDL__
    [size_is (cEntries)]
#endif
    ACTRL_ACCESS_ENTRYW *pAccessList;
  } ACTRL_ACCESS_ENTRY_LISTW, *PACTRL_ACCESS_ENTRY_LISTW;

  __MINGW_TYPEDEF_AW(ACTRL_ACCESS_ENTRY_LIST)
  __MINGW_TYPEDEF_AW(PACTRL_ACCESS_ENTRY_LIST)

  typedef struct _ACTRL_PROPERTY_ENTRYA {
    LPSTR lpProperty;
    PACTRL_ACCESS_ENTRY_LISTA pAccessEntryList;
    ULONG fListFlags;
  } ACTRL_PROPERTY_ENTRYA, *PACTRL_PROPERTY_ENTRYA;

  typedef struct _ACTRL_PROPERTY_ENTRYW {
    LPWSTR lpProperty;
    PACTRL_ACCESS_ENTRY_LISTW pAccessEntryList;
    ULONG fListFlags;
  } ACTRL_PROPERTY_ENTRYW, *PACTRL_PROPERTY_ENTRYW;

  __MINGW_TYPEDEF_AW(ACTRL_PROPERTY_ENTRY)
  __MINGW_TYPEDEF_AW(PACTRL_PROPERTY_ENTRY)

  typedef struct _ACTRL_ALISTA {
    ULONG cEntries;
#ifdef __WIDL__
    [size_is (cEntries)]
#endif
    PACTRL_PROPERTY_ENTRYA pPropertyAccessList;
  } ACTRL_ACCESSA, *PACTRL_ACCESSA, ACTRL_AUDITA, *PACTRL_AUDITA;

  typedef struct _ACTRL_ALISTW {
    ULONG cEntries;
#ifdef __WIDL__
    [size_is (cEntries)]
#endif
    PACTRL_PROPERTY_ENTRYW pPropertyAccessList;
  } ACTRL_ACCESSW, *PACTRL_ACCESSW, ACTRL_AUDITW, *PACTRL_AUDITW;

  __MINGW_TYPEDEF_AW(ACTRL_ACCESS)
  __MINGW_TYPEDEF_AW(PACTRL_ACCESS)
  __MINGW_TYPEDEF_AW(ACTRL_AUDIT)
  __MINGW_TYPEDEF_AW(PACTRL_AUDIT)

#define TRUSTEE_ACCESS_ALLOWED __MSABI_LONG(0x1)
#define TRUSTEE_ACCESS_READ __MSABI_LONG(0x2)
#define TRUSTEE_ACCESS_WRITE __MSABI_LONG(0x4)
#define TRUSTEE_ACCESS_EXPLICIT __MSABI_LONG(0x1)
#define TRUSTEE_ACCESS_READ_WRITE (TRUSTEE_ACCESS_READ | TRUSTEE_ACCESS_WRITE)

#define TRUSTEE_ACCESS_ALL __MSABI_LONG(0xffffffff)

  typedef struct _TRUSTEE_ACCESSA {
    LPSTR lpProperty;
    ACCESS_RIGHTS Access;
    ULONG fAccessFlags;
    ULONG fReturnedAccess;
  } TRUSTEE_ACCESSA, *PTRUSTEE_ACCESSA;

  typedef struct _TRUSTEE_ACCESSW {
    LPWSTR lpProperty;
    ACCESS_RIGHTS Access;
    ULONG fAccessFlags;
    ULONG fReturnedAccess;
  } TRUSTEE_ACCESSW, *PTRUSTEE_ACCESSW;

  __MINGW_TYPEDEF_AW(TRUSTEE_ACCESS)
  __MINGW_TYPEDEF_AW(PTRUSTEE_ACCESS)

#define ACTRL_RESERVED 0x00000000
#define ACTRL_PERM_1 0x00000001
#define ACTRL_PERM_2 0x00000002
#define ACTRL_PERM_3 0x00000004
#define ACTRL_PERM_4 0x00000008
#define ACTRL_PERM_5 0x00000010
#define ACTRL_PERM_6 0x00000020
#define ACTRL_PERM_7 0x00000040
#define ACTRL_PERM_8 0x00000080
#define ACTRL_PERM_9 0x00000100
#define ACTRL_PERM_10 0x00000200
#define ACTRL_PERM_11 0x00000400
#define ACTRL_PERM_12 0x00000800
#define ACTRL_PERM_13 0x00001000
#define ACTRL_PERM_14 0x00002000
#define ACTRL_PERM_15 0x00004000
#define ACTRL_PERM_16 0x00008000
#define ACTRL_PERM_17 0x00010000
#define ACTRL_PERM_18 0x00020000
#define ACTRL_PERM_19 0x00040000
#define ACTRL_PERM_20 0x00080000

#define ACTRL_ACCESS_ALLOWED 0x00000001
#define ACTRL_ACCESS_DENIED 0x00000002
#define ACTRL_AUDIT_SUCCESS 0x00000004
#define ACTRL_AUDIT_FAILURE 0x00000008

#define ACTRL_ACCESS_PROTECTED 0x00000001

#define ACTRL_SYSTEM_ACCESS 0x04000000
#define ACTRL_DELETE 0x08000000
#define ACTRL_READ_CONTROL 0x10000000
#define ACTRL_CHANGE_ACCESS 0x20000000
#define ACTRL_CHANGE_OWNER 0x40000000
#define ACTRL_SYNCHRONIZE 0x80000000
#define ACTRL_STD_RIGHTS_ALL 0xf8000000
#define ACTRL_STD_RIGHT_REQUIRED (ACTRL_STD_RIGHTS_ALL & ~ACTRL_SYNCHRONIZE)

#ifndef _DS_CONTROL_BITS_DEFINED_
#define _DS_CONTROL_BITS_DEFINED_

#define ACTRL_DS_OPEN ACTRL_RESERVED
#define ACTRL_DS_CREATE_CHILD ACTRL_PERM_1
#define ACTRL_DS_DELETE_CHILD ACTRL_PERM_2
#define ACTRL_DS_LIST ACTRL_PERM_3
#define ACTRL_DS_SELF ACTRL_PERM_4
#define ACTRL_DS_READ_PROP ACTRL_PERM_5
#define ACTRL_DS_WRITE_PROP ACTRL_PERM_6
#define ACTRL_DS_DELETE_TREE ACTRL_PERM_7
#define ACTRL_DS_LIST_OBJECT ACTRL_PERM_8
#define ACTRL_DS_CONTROL_ACCESS ACTRL_PERM_9
#endif

#define ACTRL_FILE_READ ACTRL_PERM_1
#define ACTRL_FILE_WRITE ACTRL_PERM_2
#define ACTRL_FILE_APPEND ACTRL_PERM_3
#define ACTRL_FILE_READ_PROP ACTRL_PERM_4
#define ACTRL_FILE_WRITE_PROP ACTRL_PERM_5
#define ACTRL_FILE_EXECUTE ACTRL_PERM_6
#define ACTRL_FILE_READ_ATTRIB ACTRL_PERM_8
#define ACTRL_FILE_WRITE_ATTRIB ACTRL_PERM_9
#define ACTRL_FILE_CREATE_PIPE ACTRL_PERM_10
#define ACTRL_DIR_LIST ACTRL_PERM_1
#define ACTRL_DIR_CREATE_OBJECT ACTRL_PERM_2
#define ACTRL_DIR_CREATE_CHILD ACTRL_PERM_3
#define ACTRL_DIR_DELETE_CHILD ACTRL_PERM_7
#define ACTRL_DIR_TRAVERSE ACTRL_PERM_6
#define ACTRL_KERNEL_TERMINATE ACTRL_PERM_1
#define ACTRL_KERNEL_THREAD ACTRL_PERM_2
#define ACTRL_KERNEL_VM ACTRL_PERM_3
#define ACTRL_KERNEL_VM_READ ACTRL_PERM_4
#define ACTRL_KERNEL_VM_WRITE ACTRL_PERM_5
#define ACTRL_KERNEL_DUP_HANDLE ACTRL_PERM_6
#define ACTRL_KERNEL_PROCESS ACTRL_PERM_7
#define ACTRL_KERNEL_SET_INFO ACTRL_PERM_8
#define ACTRL_KERNEL_GET_INFO ACTRL_PERM_9
#define ACTRL_KERNEL_CONTROL ACTRL_PERM_10
#define ACTRL_KERNEL_ALERT ACTRL_PERM_11
#define ACTRL_KERNEL_GET_CONTEXT ACTRL_PERM_12
#define ACTRL_KERNEL_SET_CONTEXT ACTRL_PERM_13
#define ACTRL_KERNEL_TOKEN ACTRL_PERM_14
#define ACTRL_KERNEL_IMPERSONATE ACTRL_PERM_15
#define ACTRL_KERNEL_DIMPERSONATE ACTRL_PERM_16
#define ACTRL_PRINT_SADMIN ACTRL_PERM_1
#define ACTRL_PRINT_SLIST ACTRL_PERM_2
#define ACTRL_PRINT_PADMIN ACTRL_PERM_3
#define ACTRL_PRINT_PUSE ACTRL_PERM_4
#define ACTRL_PRINT_JADMIN ACTRL_PERM_5
#define ACTRL_SVC_GET_INFO ACTRL_PERM_1
#define ACTRL_SVC_SET_INFO ACTRL_PERM_2
#define ACTRL_SVC_STATUS ACTRL_PERM_3
#define ACTRL_SVC_LIST ACTRL_PERM_4
#define ACTRL_SVC_START ACTRL_PERM_5
#define ACTRL_SVC_STOP ACTRL_PERM_6
#define ACTRL_SVC_PAUSE ACTRL_PERM_7
#define ACTRL_SVC_INTERROGATE ACTRL_PERM_8
#define ACTRL_SVC_UCONTROL ACTRL_PERM_9
#define ACTRL_REG_QUERY ACTRL_PERM_1
#define ACTRL_REG_SET ACTRL_PERM_2
#define ACTRL_REG_CREATE_CHILD ACTRL_PERM_3
#define ACTRL_REG_LIST ACTRL_PERM_4
#define ACTRL_REG_NOTIFY ACTRL_PERM_5
#define ACTRL_REG_LINK ACTRL_PERM_6
#define ACTRL_WIN_CLIPBRD ACTRL_PERM_1
#define ACTRL_WIN_GLOBAL_ATOMS ACTRL_PERM_2
#define ACTRL_WIN_CREATE ACTRL_PERM_3
#define ACTRL_WIN_LIST_DESK ACTRL_PERM_4
#define ACTRL_WIN_LIST ACTRL_PERM_5
#define ACTRL_WIN_READ_ATTRIBS ACTRL_PERM_6
#define ACTRL_WIN_WRITE_ATTRIBS ACTRL_PERM_7
#define ACTRL_WIN_SCREEN ACTRL_PERM_8
#define ACTRL_WIN_EXIT ACTRL_PERM_9

  typedef struct _ACTRL_OVERLAPPED {
    __C89_NAMELESS union {
      PVOID Provider;
      ULONG Reserved1;
    } DUMMYUNIONNAME;
    ULONG Reserved2;
    HANDLE hEvent;
  } ACTRL_OVERLAPPED, *PACTRL_OVERLAPPED;

  typedef struct _ACTRL_ACCESS_INFOA {
    ULONG fAccessPermission;
    LPSTR lpAccessPermissionName;
  } ACTRL_ACCESS_INFOA, *PACTRL_ACCESS_INFOA;

  typedef struct _ACTRL_ACCESS_INFOW {
    ULONG fAccessPermission;
    LPWSTR lpAccessPermissionName;
  } ACTRL_ACCESS_INFOW, *PACTRL_ACCESS_INFOW;

  __MINGW_TYPEDEF_AW(ACTRL_ACCESS_INFO)
  __MINGW_TYPEDEF_AW(PACTRL_ACCESS_INFO)

  typedef struct _ACTRL_CONTROL_INFOA {
    LPSTR lpControlId;
    LPSTR lpControlName;
  } ACTRL_CONTROL_INFOA, *PACTRL_CONTROL_INFOA;

  typedef struct _ACTRL_CONTROL_INFOW {
    LPWSTR lpControlId;
    LPWSTR lpControlName;
  } ACTRL_CONTROL_INFOW, *PACTRL_CONTROL_INFOW;

  __MINGW_TYPEDEF_AW(ACTRL_CONTROL_INFO)
  __MINGW_TYPEDEF_AW(PACTRL_CONTROL_INFO)

#define ACTRL_ACCESS_NO_OPTIONS 0x0
#define ACTRL_ACCESS_SUPPORTS_OBJECT_ENTRIES 0x1

#if NTDDI_VERSION >= 0x06000000
#define TREE_SEC_INFO_SET 0x00000001
#define TREE_SEC_INFO_RESET 0x00000002
#define TREE_SEC_INFO_RESET_KEEP_EXPLICIT 0x00000003
#endif

  typedef enum _PROGRESS_INVOKE_SETTING {
    ProgressInvokeNever = 1, ProgressInvokeEveryObject, ProgressInvokeOnError, ProgressCancelOperation, ProgressRetryOperation
#if NTDDI_VERSION >= 0x06000000
    , ProgressInvokePrePostError
#endif
  } PROG_INVOKE_SETTING, *PPROG_INVOKE_SETTING;

  typedef struct _FN_OBJECT_MGR_FUNCTIONS {
    ULONG Placeholder;
  } FN_OBJECT_MGR_FUNCTS, *PFN_OBJECT_MGR_FUNCTS;

  typedef struct _INHERITED_FROMA {
    LONG GenerationGap;
    LPSTR AncestorName;
  } INHERITED_FROMA, *PINHERITED_FROMA;

  typedef struct _INHERITED_FROMW {
    LONG GenerationGap;
    LPWSTR AncestorName;
  } INHERITED_FROMW, *PINHERITED_FROMW;

  __MINGW_TYPEDEF_AW(INHERITED_FROM)
  __MINGW_TYPEDEF_AW(PINHERITED_FROM)
#endif

#ifdef __cplusplus
}
#endif
#endif
