/*
 *  sddl.h      Security Descriptor Description Language (SDDL) functions
 *
 * =========================================================================
 *
 *                          Open Watcom Project
 *
 * Copyright (c) 2004-2010 The Open Watcom Contributors. All Rights Reserved.
 *
 *    This file is automatically generated. Do not edit directly.
 *
 * =========================================================================
 */

#ifndef __SDDL_H__
#define __SDDL_H__

#ifndef _ENABLE_AUTODEPEND
 #pragma read_only_file;
#endif

#ifdef __cplusplus
extern "C" {
#endif

/* SDDL version numbers */
#define SDDL_REVISION_1 1L
#define SDDL_REVISION   SDDL_REVISION_1

/* SDDL component tags */
#define SDDL_OWNER  TEXT( "O" )
#define SDDL_GROUP  TEXT( "G" )
#define SDDL_DACL   TEXT( "D" )
#define SDDL_SACL   TEXT( "S" )

/* SDDL security descriptor controls */
#define SDDL_PROTECTED          TEXT( "P" )
#define SDDL_AUTO_INHERIT_REQ   TEXT( "AR" )
#define SDDL_AUTO_INHERITED     TEXT( "AI" )
#define SDDL_NULL_ACL           TEXT( "NO_ACCESS_CONTROL" )

/* SDDL ACE types */
#define SDDL_ACCESS_ALLOWED             TEXT( "A" )
#define SDDL_ACCESS_DENIED              TEXT( "D" )
#define SDDL_OBJECT_ACCESS_ALLOWED      TEXT( "OA" )
#define SDDL_OBJECT_ACCESS_DENIED       TEXT( "OD" )
#define SDDL_AUDIT                      TEXT( "AU" )
#define SDDL_ALARM                      TEXT( "AL" )
#define SDDL_OBJECT_AUDIT               TEXT( "OU" )
#define SDDL_OBJECT_ALARM               TEXT( "OL" )
#define SDDL_MANDATORY_LABEL            TEXT( "ML" )
#define SDDL_CALLBACK_ACCESS_ALLOWED    TEXT( "XA" )
#define SDDL_CALLBACK_ACCESS_DENIED     TEXT( "XD" )

/* SDDL ACE flags */
#define SDDL_CONTAINER_INHERIT  TEXT( "CI" )
#define SDDL_OBJECT_INHERIT     TEXT( "OI" )
#define SDDL_NO_PROPAGATE       TEXT( "NP" )
#define SDDL_INHERIT_ONLY       TEXT( "IO" )
#define SDDL_INHERITED          TEXT( "ID" )
#define SDDL_AUDIT_SUCCESS      TEXT( "SA" )
#define SDDL_AUDIT_FAILURE      TEXT( "FA" )

/* SDDL rights */
#define SDDL_READ_PROPERTY      TEXT( "RP" )
#define SDDL_WRITE_PROPERTY     TEXT( "WP" )
#define SDDL_CREATE_CHILD       TEXT( "CC" )
#define SDDL_DELETE_CHILD       TEXT( "DC" )
#define SDDL_LIST_CHILDREN      TEXT( "LC" )
#define SDDL_SELF_WRITE         TEXT( "SW" )
#define SDDL_LIST_OBJECT        TEXT( "LO" )
#define SDDL_DELETE_TREE        TEXT( "DT" )
#define SDDL_CONTROL_ACCESS     TEXT( "CR" )
#define SDDL_READ_CONTROL       TEXT( "RC" )
#define SDDL_WRITE_DAC          TEXT( "WD" )
#define SDDL_WRITE_OWNER        TEXT( "WO" )
#define SDDL_STANDARD_DELETE    TEXT( "SD" )
#define SDDL_GENERIC_ALL        TEXT( "GA" )
#define SDDL_GENERIC_READ       TEXT( "GR" )
#define SDDL_GENERIC_WRITE      TEXT( "GW" )
#define SDDL_GENERIC_EXECUTE    TEXT( "GX" )
#define SDDL_FILE_ALL           TEXT( "FA" )
#define SDDL_FILE_READ          TEXT( "FR" )
#define SDDL_FILE_WRITE         TEXT( "FW" )
#define SDDL_FILE_EXECUTE       TEXT( "FX" )
#define SDDL_KEY_ALL            TEXT( "KA" )
#define SDDL_KEY_READ           TEXT( "KR" )
#define SDDL_KEY_WRITE          TEXT( "KW" )
#define SDDL_KEY_EXECUTE        TEXT( "KX" )
#define SDDL_NO_WRITE_UP        TEXT( "NW" )
#define SDDL_NO_READ_UP         TEXT( "NR" )
#define SDDL_NO_EXECUTE_UP      TEXT( "NX" )

/* SDDL alias size */
#define SDDL_ALIAS_SIZE 2

/* SDDL user aliases */
#define SDDL_DOMAIN_ADMINISTRATORS          TEXT( "DA" )
#define SDDL_DOMAIN_GUESTS                  TEXT( "DG" )
#define SDDL_DOMAIN_USERS                   TEXT( "DU" )
#define SDDL_ENTERPRISE_DOMAIN_CONTROLLERS  TEXT( "ED" )
#define SDDL_DOMAIN_DOMAIN_CONTROLLERS      TEXT( "DD" )
#define SDDL_DOMAIN_COMPUTERS               TEXT( "DC" )
#define SDDL_BUILTIN_ADMINISTRATORS         TEXT( "BA" )
#define SDDL_BUILTIN_GUESTS                 TEXT( "BG" )
#define SDDL_BUILTIN_USERS                  TEXT( "BU" )
#define SDDL_LOCAL_ADMIN                    TEXT( "LA" )
#define SDDL_LOCAL_GUEST                    TEXT( "LG" )
#define SDDL_ACCOUNT_OPERATORS              TEXT( "AO" )
#define SDDL_BACKUP_OPERATORS               TEXT( "BO" )
#define SDDL_PRINTER_OPERATORS              TEXT( "PO" )
#define SDDL_SERVER_OPERATORS               TEXT( "SO" )
#define SDDL_AUTHENTICATED_USERS            TEXT( "AU" )
#define SDDL_PERSONAL_SELF                  TEXT( "PS" )
#define SDDL_CREATOR_OWNER                  TEXT( "CO" )
#define SDDL_CREATOR_GROUP                  TEXT( "CG" )
#define SDDL_LOCAL_SYSTEM                   TEXT( "SY" )
#define SDDL_POWER_USERS                    TEXT( "PU" )
#define SDDL_EVERYONE                       TEXT( "WD" )
#define SDDL_REPLICATOR                     TEXT( "RE" )
#define SDDL_INTERACTIVE                    TEXT( "IU" )
#define SDDL_NETWORK                        TEXT( "NU" )
#define SDDL_SERVICE                        TEXT( "SU" )
#define SDDL_RESTRICTED_CODE                TEXT( "RC" )
#define SDDL_WRITE_RESTRICTED_CODE          TEXT( "WR" )
#define SDDL_ANONYMOUS                      TEXT( "AN" )
#define SDDL_SCHEMA_ADMINISTRATORS          TEXT( "SA" )
#define SDDL_CERT_SERV_ADMINISTRATORS       TEXT( "CA" )
#define SDDL_RAS_SERVERS                    TEXT( "RS" )
#define SDDL_ENTERPRISE_ADMINS              TEXT( "EA" )
#define SDDL_GROUP_POLICY_ADMINS            TEXT( "PA" )
#define SDDL_ALIAS_PREW2KCOMPACC            TEXT( "RU" )
#define SDDL_LOCAL_SERVICE                  TEXT( "LS" )
#define SDDL_NETWORK_SERVICE                TEXT( "NS" )
#define SDDL_REMOTE_DESKTOP                 TEXT( "RD" )
#define SDDL_NETWORK_CONFIGURATION_OPS      TEXT( "NO" )
#define SDDL_PERFMON_USERS                  TEXT( "MU" )
#define SDDL_PERFLOG_USERS                  TEXT( "LU" )
#define SDDL_IIS_USERS                      TEXT( "IS" )
#define SDDL_CRYPTO_OPERATORS               TEXT( "CY" )
#define SDDL_OWNER_RIGHTS                   TEXT( "OW" )
#define SDDL_EVENT_LOG_READERS              TEXT( "ER" )
#define SDDL_ENTERPRISE_RO_DCs              TEXT( "RO" )
#define SDDL_CERTSVC_DCOM_ACCESS            TEXT( "CD" )

/* SDDL integrity labels */
#define SDDL_ML_LOW         TEXT( "LW" )
#define SDDL_ML_MEDIUM      TEXT( "ME" )
#define SDDL_ML_MEDIUM_PLUS TEXT( "MP" )
#define SDDL_ML_HIGH        TEXT( "HI" )
#define SDDL_ML_SYSTEM      TEXT( "SI" )

/* SDDL separator characters */
#define SDDL_SEPARATORC                         TEXT( ';' )
#define SDDL_DELIMINATORC                       TEXT( ':' )
#define SDDL_ACE_BEGINC                         TEXT( '(' )
#define SDDL_ACE_ENDC                           TEXT( ')' )
#define SDDL_SPACEC                             TEXT( ' ' )
#define SDDL_ACE_COND_BEGINC                    TEXT( '(' )
#define SDDL_ACE_COND_ENDC                      TEXT( ')' )
#define SDDL_ACE_COND_STRING_BEGINC             TEXT( '"' )
#define SDDL_ACE_COND_STRING_ENDC               TEXT( '"' )
#define SDDL_ACE_COND_COMPOSITEVALUE_BEGINC     TEXT( '{' )
#define SDDL_ACE_COND_COMPOSITEVALUE_ENDC       TEXT( '}' )
#define SDDL_ACE_COND_COMPOSITEVALUE_SEPARATORC TEXT( ',' )
#define SDDL_ACE_COND_BLOB_PREFIXC              TEXT( '#' )
#define SDDL_ACE_COND_SID_BEGINC                TEXT( '(' )
#define SDDL_ACE_COND_SID_ENDC                  TEXT( ')' )

/* SDDL separator strings */
#define SDDL_SEPARATOR              TEXT( ";" )
#define SDDL_DELIMINATOR            TEXT( ":" )
#define SDDL_ACE_BEGIN              TEXT( "(" )
#define SDDL_ACE_END                TEXT( ")" )
#define SDDL_ACE_COND_BEGIN         TEXT( "(" )
#define SDDL_ACE_COND_END           TEXT( ")" )
#define SDDL_SPACE                  TEXT( " " )
#define SDDL_ACE_COND_BLOB_PREFIX   TEXT( "#" )
#define SDDL_ACE_COND_SID_PREFIX    TEXT( "SID" )

/* Functions in ADVAPI32.DLL */
#if (_WIN32_WINNT >= 0x0500)
WINADVAPI BOOL WINAPI   ConvertSecurityDescriptorToStringSecurityDescriptorA( PSECURITY_DESCRIPTOR, DWORD, SECURITY_INFORMATION, LPSTR *, PULONG );
WINADVAPI BOOL WINAPI   ConvertSecurityDescriptorToStringSecurityDescriptorW( PSECURITY_DESCRIPTOR, DWORD, SECURITY_INFORMATION, LPWSTR *, PULONG );
WINADVAPI BOOL WINAPI   ConvertSidToStringSidA( PSID, LPSTR * );
WINADVAPI BOOL WINAPI   ConvertSidToStringSidW( PSID, LPWSTR * );
WINADVAPI BOOL WINAPI   ConvertStringSecurityDescriptorToSecurityDescriptorA( LPCSTR, DWORD, PSECURITY_DESCRIPTOR *, PULONG );
WINADVAPI BOOL WINAPI   ConvertStringSecurityDescriptorToSecurityDescriptorW( LPCWSTR, DWORD, PSECURITY_DESCRIPTOR *, PULONG );
WINADVAPI BOOL WINAPI   ConvertStringSidToSidA( LPCSTR, PSID * );
WINADVAPI BOOL WINAPI   ConvertStringSidToSidW( LPCWSTR, PSID * );
#endif

/* Map generic function names to the appropriate ANSI or Unicode version. */
#ifdef UNICODE
    #if (_WIN32_WINNT >= 0x0500)
        #define ConvertSecurityDescriptorToStringSecurityDescriptor \
            ConvertSecurityDescriptorToStringSecurityDescriptorW
        #define ConvertSidToStringSid   ConvertSidToStringSidW
        #define ConvertStringSecurityDescriptorToSecurityDescriptor \
            ConvertStringSecurityDescriptorToSecurityDescriptorW
        #define ConvertStringSidToSid   ConvertStringSidToSidW
    #endif
#else
    #if (_WIN32_WINNT >= 0x0500)
        #define ConvertSecurityDescriptorToStringSecurityDescriptor \
            ConvertSecurityDescriptorToStringSecurityDescriptorA
        #define ConvertSidToStringSid   ConvertSidToStringSidA
        #define ConvertStringSecurityDescriptorToSecurityDescriptor \
            ConvertStringSecurityDescriptorToSecurityDescriptorA
        #define ConvertStringSidToSid   ConvertStringSidToSidA
    #endif
#endif

#ifdef __cplusplus
} /* extern "C" */
#endif

#endif /* __SDDL_H__ */
