gcc/libphobos/libdruntime/core/sys/windows/accctrl.d
Iain Buclaw 0fb5703477 d: Merge upstream dmd 568496d5b, druntime 178c44ff, phobos 574bf883b.
D front-end changes:

    - Import dmd v2.098.0
    - New ImportC module for compiling preprocessed C11 code into D.
    - New -ftransition=in switch.
    - Improved handling of new 'noreturn' type.

Druntime changes:

    - Import druntime v2.098.0
    - Fix broken import in core.sys.linux.perf_event module (PR103558).

Phobos changes:

    - Import phobos v2.098.0
    - All sources are now compiled with -fpreview=fieldwise.

gcc/d/ChangeLog:

	* dmd/MERGE: Merge upstream dmd 568496d5b.
	* Make-lang.in (D_FRONTEND_OBJS): Add d/common-file.o,
	d/common-outbuffer.o, d/common-string.o, d/file_manager.o,
	d/importc.o.  Remove d/root-outbuffer.o.
	(d/common-%.o): New recipe.
	* d-builtins.cc (build_frontend_type): Update for new front-end
	interface.
	(d_build_d_type_nodes): Set noreturn_type_node.
	* d-codegen.cc (d_build_call): Don't call function if one of the
	arguments is type 'noreturn'.
	(build_vthis_function): Propagate TYPE_QUAL_VOLATILE from original
	function type.
	* d-frontend.cc (eval_builtin): Update signature.
	(getTypeInfoType): Likewise.
	(toObjFile): New function.
	* d-gimplify.cc (d_gimplify_call_expr): Always evaluate arguments from
	left to right.
	* d-lang.cc (d_handle_option): Handle OPT_ftransition_in.
	(d_parse_file): Don't generate D main if it is declared in user code.
	* d-tree.h (CALL_EXPR_ARGS_ORDERED): Remove.
	(enum d_tree_index): Add DTI_BOTTOM_TYPE.
	(noreturn_type_node): New.
	* decl.cc (apply_pragma_crt): Remove.
	(DeclVisitor::visit): Update for new front-end interface.
	(DeclVisitor::visit (PragmaDeclaration *)): Don't handle
	crt_constructor and crt_destructor pragmas.
	(DeclVisitor::visit (VarDeclaration *)): Don't generate declarations
	of type 'noreturn'.
	(DeclVisitor::visit (FuncDeclaration *)): Stop adding parameters when
	'noreturn' type has been encountered.
	(get_symbol_decl): Set DECL_STATIC_CONSTRUCTOR and
	DECL_STATIC_DESTRUCTOR on decl node if requested.
	(aggregate_initializer_decl): Update for new front-end interface.
	* expr.cc (ExprVisitor::visit (CallExp *)): Always use the 'this'
	object as the result of calling any constructor function.
	(ExprVisitor::visit): Update for new front-end interface.
	* gdc.texi (Runtime Options): Document -fmain and -ftransition=in.
	* lang.opt (ftransition=in): New option.
	* modules.cc (get_internal_fn): Update for new front-end interface.
	* types.cc (TypeVisitor::visit): Likewise.
	(TypeVisitor::visit (TypeNoreturn *)): Return noreturn_type_node.
	(TypeVisitor::visit (TypeFunction *)): Stop adding parameters when
	'notreturn' type has been encountered.  Qualify function types that
	return 'noreturn' as TYPE_QUAL_VOLATILE.

libphobos/ChangeLog:

	PR d/103558
	* libdruntime/MERGE: Merge upstream druntime 178c44ff.
	* libdruntime/Makefile.am (DRUNTIME_DSOURCES_LINUX): Add
	core/sys/linux/syscalls.d.
	(DRUNTIME_DSOURCES_OPENBSD): Add core/sys/openbsd/pthread_np.d.
	* libdruntime/Makefile.in: Regenerate.
	* src/MERGE: Merge upstream phobos 574bf883b.
	* src/Makefile.am (D_EXTRA_DFLAGS): Add -fpreview=fieldwise.
	* src/Makefile.in: Regenerate.
	* testsuite/libphobos.exceptions/assert_fail.d: Update test.
	* testsuite/libphobos.betterc/test22336.d: New test.
2021-12-09 00:58:58 +01:00

422 lines
12 KiB
D

/**
* Windows API header module
*
* Translated from MinGW Windows headers
*
* Authors: Stewart Gordon
* License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0)
* Source: $(DRUNTIMESRC core/sys/windows/_accctrl.d)
*/
module core.sys.windows.accctrl;
version (Windows):
version (ANSI) {} else version = Unicode;
import core.sys.windows.basetyps, core.sys.windows.w32api, core.sys.windows.winbase, core.sys.windows.windef;
// FIXME: check types and grouping of constants
// FIXME: check Windows version support
alias LocalFree AccFree;
enum uint
ACTRL_RESERVED = 0x00000000,
ACTRL_ACCESS_PROTECTED = 0x00000001,
ACTRL_ACCESS_ALLOWED = 0x00000001,
ACTRL_ACCESS_DENIED = 0x00000002,
ACTRL_AUDIT_SUCCESS = 0x00000004,
ACTRL_AUDIT_FAILURE = 0x00000008,
ACTRL_SYSTEM_ACCESS = 0x04000000,
ACTRL_DELETE = 0x08000000,
ACTRL_READ_CONTROL = 0x10000000,
ACTRL_CHANGE_ACCESS = 0x20000000,
ACTRL_CHANGE_OWNER = 0x40000000,
ACTRL_SYNCHRONIZE = 0x80000000,
ACTRL_STD_RIGHTS_ALL = 0xf8000000;
enum uint
ACTRL_FILE_READ = 0x00000001,
ACTRL_FILE_WRITE = 0x00000002,
ACTRL_FILE_APPEND = 0x00000004,
ACTRL_FILE_READ_PROP = 0x00000008,
ACTRL_FILE_WRITE_PROP = 0x00000010,
ACTRL_FILE_EXECUTE = 0x00000020,
ACTRL_FILE_READ_ATTRIB = 0x00000080,
ACTRL_FILE_WRITE_ATTRIB = 0x00000100,
ACTRL_FILE_CREATE_PIPE = 0x00000200;
enum uint
ACTRL_DIR_LIST = 0x00000001,
ACTRL_DIR_CREATE_OBJECT = 0x00000002,
ACTRL_DIR_CREATE_CHILD = 0x00000004,
ACTRL_DIR_DELETE_CHILD = 0x00000040,
ACTRL_DIR_TRAVERSE = 0x00000020;
enum uint
ACTRL_KERNEL_TERMINATE = 0x00000001,
ACTRL_KERNEL_THREAD = 0x00000002,
ACTRL_KERNEL_VM = 0x00000004,
ACTRL_KERNEL_VM_READ = 0x00000008,
ACTRL_KERNEL_VM_WRITE = 0x00000010,
ACTRL_KERNEL_DUP_HANDLE = 0x00000020,
ACTRL_KERNEL_PROCESS = 0x00000040,
ACTRL_KERNEL_SET_INFO = 0x00000080,
ACTRL_KERNEL_GET_INFO = 0x00000100,
ACTRL_KERNEL_CONTROL = 0x00000200,
ACTRL_KERNEL_ALERT = 0x00000400,
ACTRL_KERNEL_GET_CONTEXT = 0x00000800,
ACTRL_KERNEL_SET_CONTEXT = 0x00001000,
ACTRL_KERNEL_TOKEN = 0x00002000,
ACTRL_KERNEL_IMPERSONATE = 0x00004000,
ACTRL_KERNEL_DIMPERSONATE = 0x00008000;
enum uint
ACTRL_PRINT_SADMIN = 0x00000001,
ACTRL_PRINT_SLIST = 0x00000002,
ACTRL_PRINT_PADMIN = 0x00000004,
ACTRL_PRINT_PUSE = 0x00000008,
ACTRL_PRINT_JADMIN = 0x00000010;
enum uint
ACTRL_SVC_GET_INFO = 0x00000001,
ACTRL_SVC_SET_INFO = 0x00000002,
ACTRL_SVC_STATUS = 0x00000004,
ACTRL_SVC_LIST = 0x00000008,
ACTRL_SVC_START = 0x00000010,
ACTRL_SVC_STOP = 0x00000020,
ACTRL_SVC_PAUSE = 0x00000040,
ACTRL_SVC_INTERROGATE = 0x00000080,
ACTRL_SVC_UCONTROL = 0x00000100;
enum uint
ACTRL_REG_QUERY = 0x00000001,
ACTRL_REG_SET = 0x00000002,
ACTRL_REG_CREATE_CHILD = 0x00000004,
ACTRL_REG_LIST = 0x00000008,
ACTRL_REG_NOTIFY = 0x00000010,
ACTRL_REG_LINK = 0x00000020;
enum uint
ACTRL_WIN_CLIPBRD = 0x00000001,
ACTRL_WIN_GLOBAL_ATOMS = 0x00000002,
ACTRL_WIN_CREATE = 0x00000004,
ACTRL_WIN_LIST_DESK = 0x00000008,
ACTRL_WIN_LIST = 0x00000010,
ACTRL_WIN_READ_ATTRIBS = 0x00000020,
ACTRL_WIN_WRITE_ATTRIBS = 0x00000040,
ACTRL_WIN_SCREEN = 0x00000080,
ACTRL_WIN_EXIT = 0x00000100;
enum : uint {
ACTRL_ACCESS_NO_OPTIONS = 0x00000000,
ACTRL_ACCESS_SUPPORTS_OBJECT_ENTRIES = 0x00000001
}
const TCHAR[] ACCCTRL_DEFAULT_PROVIDER = "Windows NT Access Provider";
enum uint
TRUSTEE_ACCESS_ALLOWED = 0x00000001,
TRUSTEE_ACCESS_READ = 0x00000002,
TRUSTEE_ACCESS_WRITE = 0x00000004,
TRUSTEE_ACCESS_EXPLICIT = 0x00000001,
TRUSTEE_ACCESS_READ_WRITE = 0x00000006,
TRUSTEE_ACCESS_ALL = 0xFFFFFFFF;
enum uint
NO_INHERITANCE = 0x0,
SUB_OBJECTS_ONLY_INHERIT = 0x1,
SUB_CONTAINERS_ONLY_INHERIT = 0x2,
SUB_CONTAINERS_AND_OBJECTS_INHERIT = 0x3,
INHERIT_NO_PROPAGATE = 0x4,
INHERIT_ONLY = 0x8,
INHERITED_ACCESS_ENTRY = 0x10,
INHERITED_PARENT = 0x10000000,
INHERITED_GRANDPARENT = 0x20000000;
alias ULONG INHERIT_FLAGS, ACCESS_RIGHTS;
alias ULONG* PINHERIT_FLAGS, PACCESS_RIGHTS;
enum ACCESS_MODE {
NOT_USED_ACCESS,
GRANT_ACCESS,
SET_ACCESS,
DENY_ACCESS,
REVOKE_ACCESS,
SET_AUDIT_SUCCESS,
SET_AUDIT_FAILURE
}
enum SE_OBJECT_TYPE {
SE_UNKNOWN_OBJECT_TYPE,
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
}
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
}
enum TRUSTEE_FORM {
TRUSTEE_IS_SID,
TRUSTEE_IS_NAME,
TRUSTEE_BAD_FORM,
TRUSTEE_IS_OBJECTS_AND_SID,
TRUSTEE_IS_OBJECTS_AND_NAME
}
enum MULTIPLE_TRUSTEE_OPERATION {
NO_MULTIPLE_TRUSTEE,
TRUSTEE_IS_IMPERSONATE
}
struct TRUSTEE_A {
TRUSTEE_A* pMultipleTrustee;
MULTIPLE_TRUSTEE_OPERATION MultipleTrusteeOperation;
TRUSTEE_FORM TrusteeForm;
TRUSTEE_TYPE TrusteeType;
LPSTR ptstrName;
}
alias TRUSTEE_A TRUSTEEA;
alias TRUSTEE_A* PTRUSTEE_A, PTRUSTEEA;
struct TRUSTEE_W {
TRUSTEE_W* pMultipleTrustee;
MULTIPLE_TRUSTEE_OPERATION MultipleTrusteeOperation;
TRUSTEE_FORM TrusteeForm;
TRUSTEE_TYPE TrusteeType;
LPWSTR ptstrName;
}
alias TRUSTEE_W TRUSTEEW;
alias TRUSTEEW* PTRUSTEE_W, PTRUSTEEW;
struct ACTRL_ACCESS_ENTRYA {
TRUSTEE_A Trustee;
ULONG fAccessFlags;
ACCESS_RIGHTS Access;
ACCESS_RIGHTS ProvSpecificAccess;
INHERIT_FLAGS Inheritance;
LPCSTR lpInheritProperty;
}
alias ACTRL_ACCESS_ENTRYA* PACTRL_ACCESS_ENTRYA;
struct ACTRL_ACCESS_ENTRYW {
TRUSTEE_W Trustee;
ULONG fAccessFlags;
ACCESS_RIGHTS Access;
ACCESS_RIGHTS ProvSpecificAccess;
INHERIT_FLAGS Inheritance;
LPCWSTR lpInheritProperty;
}
alias ACTRL_ACCESS_ENTRYW* PACTRL_ACCESS_ENTRYW;
struct ACTRL_ACCESS_ENTRY_LISTA {
ULONG cEntries;
ACTRL_ACCESS_ENTRYA* pAccessList;
}
alias ACTRL_ACCESS_ENTRY_LISTA* PACTRL_ACCESS_ENTRY_LISTA;
struct ACTRL_ACCESS_ENTRY_LISTW {
ULONG cEntries;
ACTRL_ACCESS_ENTRYW* pAccessList;
}
alias ACTRL_ACCESS_ENTRY_LISTW* PACTRL_ACCESS_ENTRY_LISTW;
struct ACTRL_PROPERTY_ENTRYA {
LPCSTR lpProperty;
PACTRL_ACCESS_ENTRY_LISTA pAccessEntryList;
ULONG fListFlags;
}
alias ACTRL_PROPERTY_ENTRYA* PACTRL_PROPERTY_ENTRYA;
struct ACTRL_PROPERTY_ENTRYW {
LPCWSTR lpProperty;
PACTRL_ACCESS_ENTRY_LISTW pAccessEntryList;
ULONG fListFlags;
}
alias ACTRL_PROPERTY_ENTRYW* PACTRL_PROPERTY_ENTRYW;
struct ACTRL_ACCESSA {
ULONG cEntries;
PACTRL_PROPERTY_ENTRYA pPropertyAccessList;
}
alias ACTRL_ACCESSA ACTRL_AUDITA;
alias ACTRL_ACCESSA* PACTRL_ACCESSA, PACTRL_AUDITA;
struct ACTRL_ACCESSW {
ULONG cEntries;
PACTRL_PROPERTY_ENTRYW pPropertyAccessList;
}
alias ACTRL_ACCESSW ACTRL_AUDITW;
alias ACTRL_ACCESSW* PACTRL_ACCESSW, PACTRL_AUDITW;
struct TRUSTEE_ACCESSA {
LPSTR lpProperty;
ACCESS_RIGHTS Access;
ULONG fAccessFlags;
ULONG fReturnedAccess;
}
alias TRUSTEE_ACCESSA* PTRUSTEE_ACCESSA;
struct TRUSTEE_ACCESSW {
LPWSTR lpProperty;
ACCESS_RIGHTS Access;
ULONG fAccessFlags;
ULONG fReturnedAccess;
}
alias TRUSTEE_ACCESSW* PTRUSTEE_ACCESSW;
struct ACTRL_OVERLAPPED {
union {
PVOID Provider;
ULONG Reserved1;
}
ULONG Reserved2;
HANDLE hEvent;
}
alias ACTRL_OVERLAPPED* PACTRL_OVERLAPPED;
struct ACTRL_ACCESS_INFOA {
ULONG fAccessPermission;
LPSTR lpAccessPermissionName;
}
alias ACTRL_ACCESS_INFOA* PACTRL_ACCESS_INFOA;
struct ACTRL_ACCESS_INFOW {
ULONG fAccessPermission;
LPWSTR lpAccessPermissionName;
}
alias ACTRL_ACCESS_INFOW* PACTRL_ACCESS_INFOW;
struct ACTRL_CONTROL_INFOA {
LPSTR lpControlId;
LPSTR lpControlName;
}
alias ACTRL_CONTROL_INFOA* PACTRL_CONTROL_INFOA;
struct ACTRL_CONTROL_INFOW {
LPWSTR lpControlId;
LPWSTR lpControlName;
}
alias ACTRL_CONTROL_INFOW* PACTRL_CONTROL_INFOW;
struct EXPLICIT_ACCESS_A {
DWORD grfAccessPermissions;
ACCESS_MODE grfAccessMode;
DWORD grfInheritance;
TRUSTEE_A Trustee;
}
alias EXPLICIT_ACCESS_A EXPLICIT_ACCESSA;
alias EXPLICIT_ACCESS_A* PEXPLICIT_ACCESS_A, PEXPLICIT_ACCESSA;
struct EXPLICIT_ACCESS_W {
DWORD grfAccessPermissions;
ACCESS_MODE grfAccessMode;
DWORD grfInheritance;
TRUSTEE_W Trustee;
}
alias EXPLICIT_ACCESS_W EXPLICIT_ACCESSW;
alias EXPLICIT_ACCESS_W* PEXPLICIT_ACCESS_W, PEXPLICIT_ACCESSW;
struct OBJECTS_AND_SID {
DWORD ObjectsPresent;
GUID ObjectTypeGuid;
GUID InheritedObjectTypeGuid;
SID* pSid;
}
alias OBJECTS_AND_SID* POBJECTS_AND_SID;
struct OBJECTS_AND_NAME_A {
DWORD ObjectsPresent;
SE_OBJECT_TYPE ObjectType;
LPSTR ObjectTypeName;
LPSTR InheritedObjectTypeName;
LPSTR ptstrName;
}
alias OBJECTS_AND_NAME_A* POBJECTS_AND_NAME_A;
struct OBJECTS_AND_NAME_W {
DWORD ObjectsPresent;
SE_OBJECT_TYPE ObjectType;
LPWSTR ObjectTypeName;
LPWSTR InheritedObjectTypeName;
LPWSTR ptstrName;
}
alias OBJECTS_AND_NAME_W* POBJECTS_AND_NAME_W;
static if (_WIN32_WINNT >= 0x501) {
struct INHERITED_FROMA {
LONG GenerationGap;
LPSTR AncestorName;
}
alias INHERITED_FROMA* PINHERITED_FROMA;
struct INHERITED_FROMW {
LONG GenerationGap;
LPWSTR AncestorName;
}
alias INHERITED_FROMW* PINHERITED_FROMW;
}
version (Unicode) {
alias TRUSTEEW TRUSTEE;
alias ACTRL_ACCESSW ACTRL_ACCESS;
alias ACTRL_ACCESS_ENTRY_LISTW ACTRL_ACCESS_ENTRY_LIST;
alias ACTRL_ACCESS_INFOW ACTRL_ACCESS_INFO;
alias ACTRL_ACCESS_ENTRYW ACTRL_ACCESS_ENTRY;
alias ACTRL_AUDITW ACTRL_AUDIT;
alias ACTRL_CONTROL_INFOW ACTRL_CONTROL_INFO;
alias EXPLICIT_ACCESSW EXPLICIT_ACCESS;
alias TRUSTEE_ACCESSW TRUSTEE_ACCESS;
alias OBJECTS_AND_NAME_W OBJECTS_AND_NAME_;
static if (_WIN32_WINNT >= 0x501) {
alias INHERITED_FROMW INHERITED_FROM;
}
} else {
alias TRUSTEEA TRUSTEE;
alias ACTRL_ACCESSA ACTRL_ACCESS;
alias ACTRL_ACCESS_ENTRY_LISTA ACTRL_ACCESS_ENTRY_LIST;
alias ACTRL_ACCESS_INFOA ACTRL_ACCESS_INFO;
alias ACTRL_ACCESS_ENTRYA ACTRL_ACCESS_ENTRY;
alias ACTRL_AUDITA ACTRL_AUDIT;
alias ACTRL_CONTROL_INFOA ACTRL_CONTROL_INFO;
alias EXPLICIT_ACCESSA EXPLICIT_ACCESS;
alias TRUSTEE_ACCESSA TRUSTEE_ACCESS;
alias OBJECTS_AND_NAME_A OBJECTS_AND_NAME_;
static if (_WIN32_WINNT >= 0x501) {
alias INHERITED_FROMA INHERITED_FROM;
}
}
alias TRUSTEE TRUSTEE_;
alias TRUSTEE* PTRUSTEE, PTRUSTEE_;
alias ACTRL_ACCESS* PACTRL_ACCESS;
alias ACTRL_ACCESS_ENTRY_LIST* PACTRL_ACCESS_ENTRY_LIST;
alias ACTRL_ACCESS_INFO* PACTRL_ACCESS_INFO;
alias ACTRL_ACCESS_ENTRY* PACTRL_ACCESS_ENTRY;
alias ACTRL_AUDIT* PACTRL_AUDIT;
alias ACTRL_CONTROL_INFO* PACTRL_CONTROL_INFO;
alias EXPLICIT_ACCESS EXPLICIT_ACCESS_;
alias EXPLICIT_ACCESS* PEXPLICIT_ACCESS, PEXPLICIT_ACCESS_;
alias TRUSTEE_ACCESS* PTRUSTEE_ACCESS;
alias OBJECTS_AND_NAME_* POBJECTS_AND_NAME_;
static if (_WIN32_WINNT >= 0x501) {
alias INHERITED_FROM* PINHERITED_FROM;
}