1 /**
2     Windows API header module
3 
4     Translated from MinGW Windows headers
5 
6     License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0)
7     Authors: Stewart Gordon, Luna Nielsen
8 */
9 module nulib.system.win32.aclapi;
10 import nulib.system.win32.accctrl;
11 import nulib.system.win32.basetyps;
12 import nulib.system.win32.w32api;
13 import nulib.system.win32.winnt;
14 
15 pragma(lib, "advapi32");
16 
17 version (ANSI) {
18 } else version = Unicode;
19 
20 extern (Windows) nothrow @nogc {
21     VOID BuildExplicitAccessWithNameA(PEXPLICIT_ACCESS_A, LPSTR, DWORD,
22         ACCESS_MODE, DWORD);
23     VOID BuildExplicitAccessWithNameW(PEXPLICIT_ACCESS_W, LPWSTR, DWORD,
24         ACCESS_MODE, DWORD);
25     DWORD BuildSecurityDescriptorA(PTRUSTEE_A, PTRUSTEE_A, ULONG,
26         PEXPLICIT_ACCESS_A, ULONG, PEXPLICIT_ACCESS_A, PSECURITY_DESCRIPTOR,
27         PULONG, PSECURITY_DESCRIPTOR*);
28     DWORD BuildSecurityDescriptorW(PTRUSTEE_W, PTRUSTEE_W, ULONG,
29         PEXPLICIT_ACCESS_W, ULONG, PEXPLICIT_ACCESS_W, PSECURITY_DESCRIPTOR,
30         PULONG, PSECURITY_DESCRIPTOR*);
31     VOID BuildTrusteeWithNameA(PTRUSTEE_A, LPSTR);
32     VOID BuildTrusteeWithNameW(PTRUSTEE_W, LPWSTR);
33     VOID BuildTrusteeWithObjectsAndNameA(PTRUSTEE_A, POBJECTS_AND_NAME_A,
34         SE_OBJECT_TYPE, LPSTR, LPSTR, LPSTR);
35     VOID BuildTrusteeWithObjectsAndNameW(PTRUSTEE_W, POBJECTS_AND_NAME_W,
36         SE_OBJECT_TYPE, LPWSTR, LPWSTR, LPWSTR);
37     VOID BuildTrusteeWithObjectsAndSidA(PTRUSTEE_A, POBJECTS_AND_SID,
38         GUID*, GUID*, PSID);
39     VOID BuildTrusteeWithObjectsAndSidW(PTRUSTEE_W, POBJECTS_AND_SID,
40         GUID*, GUID*, PSID);
41     VOID BuildTrusteeWithSidA(PTRUSTEE_A, PSID);
42     VOID BuildTrusteeWithSidW(PTRUSTEE_W, PSID);
43     DWORD GetAuditedPermissionsFromAclA(PACL, PTRUSTEE_A, PACCESS_MASK,
44         PACCESS_MASK);
45     DWORD GetAuditedPermissionsFromAclW(PACL, PTRUSTEE_W, PACCESS_MASK,
46         PACCESS_MASK);
47     DWORD GetEffectiveRightsFromAclA(PACL, PTRUSTEE_A, PACCESS_MASK);
48     DWORD GetEffectiveRightsFromAclW(PACL, PTRUSTEE_W, PACCESS_MASK);
49     DWORD GetExplicitEntriesFromAclA(PACL, PULONG, PEXPLICIT_ACCESS_A*);
50     DWORD GetExplicitEntriesFromAclW(PACL, PULONG, PEXPLICIT_ACCESS_W*);
51     static if (_WIN32_WINNT >= 0x501) {
52         DWORD GetInheritanceSourceA(LPSTR, SE_OBJECT_TYPE,
53             SECURITY_INFORMATION, BOOL, GUID**, DWORD, PACL, void*,
54             PGENERIC_MAPPING, PINHERITED_FROMA);
55         DWORD GetInheritanceSourceW(LPWSTR, SE_OBJECT_TYPE,
56             SECURITY_INFORMATION, BOOL, GUID**, DWORD, PACL, void*,
57             PGENERIC_MAPPING, PINHERITED_FROMW);
58     }
59     DWORD GetNamedSecurityInfoA(LPSTR, SE_OBJECT_TYPE, SECURITY_INFORMATION,
60         PSID*, PSID*, PACL*, PACL*, PSECURITY_DESCRIPTOR*);
61     DWORD GetNamedSecurityInfoW(LPWSTR, SE_OBJECT_TYPE, SECURITY_INFORMATION,
62         PSID*, PSID*, PACL*, PACL*, PSECURITY_DESCRIPTOR*);
63     DWORD GetSecurityInfo(HANDLE, SE_OBJECT_TYPE, SECURITY_INFORMATION,
64         PSID*, PSID*, PACL*, PACL*, PSECURITY_DESCRIPTOR*);
65     TRUSTEE_FORM GetTrusteeFormA(PTRUSTEE_A);
66     TRUSTEE_FORM GetTrusteeFormW(PTRUSTEE_W);
67     LPSTR GetTrusteeNameA(PTRUSTEE_A);
68     LPWSTR GetTrusteeNameW(PTRUSTEE_W);
69     TRUSTEE_TYPE GetTrusteeTypeA(PTRUSTEE_A);
70     TRUSTEE_TYPE GetTrusteeTypeW(PTRUSTEE_W);
71     DWORD LookupSecurityDescriptorPartsA(PTRUSTEE_A*, PTRUSTEE_A*, PULONG,
72         PEXPLICIT_ACCESS_A*, PULONG, PEXPLICIT_ACCESS_A*,
73         PSECURITY_DESCRIPTOR);
74     DWORD LookupSecurityDescriptorPartsW(PTRUSTEE_W*, PTRUSTEE_W*, PULONG,
75         PEXPLICIT_ACCESS_W*, PULONG, PEXPLICIT_ACCESS_W*,
76         PSECURITY_DESCRIPTOR);
77     DWORD SetEntriesInAclA(ULONG, PEXPLICIT_ACCESS_A, PACL, PACL*);
78     DWORD SetEntriesInAclW(ULONG, PEXPLICIT_ACCESS_W, PACL, PACL*);
79     DWORD SetNamedSecurityInfoA(LPSTR, SE_OBJECT_TYPE, SECURITY_INFORMATION,
80         PSID, PSID, PACL, PACL);
81     DWORD SetNamedSecurityInfoW(LPWSTR, SE_OBJECT_TYPE, SECURITY_INFORMATION,
82         PSID, PSID, PACL, PACL);
83     DWORD SetSecurityInfo(HANDLE, SE_OBJECT_TYPE, SECURITY_INFORMATION, PSID,
84         PSID, PACL, PACL);
85     VOID BuildImpersonateExplicitAccessWithNameA(PEXPLICIT_ACCESS_A, LPSTR,
86         PTRUSTEE_A, DWORD, ACCESS_MODE, DWORD);
87     VOID BuildImpersonateExplicitAccessWithNameW(PEXPLICIT_ACCESS_W, LPWSTR,
88         PTRUSTEE_W, DWORD, ACCESS_MODE, DWORD);
89     VOID BuildImpersonateTrusteeA(PTRUSTEE_A, PTRUSTEE_A);
90     VOID BuildImpersonateTrusteeW(PTRUSTEE_W, PTRUSTEE_W);
91     PTRUSTEE_A GetMultipleTrusteeA(PTRUSTEE_A);
92     PTRUSTEE_W GetMultipleTrusteeW(PTRUSTEE_W);
93     MULTIPLE_TRUSTEE_OPERATION GetMultipleTrusteeOperationA(PTRUSTEE_A);
94     MULTIPLE_TRUSTEE_OPERATION GetMultipleTrusteeOperationW(PTRUSTEE_W);
95 }
96 
97 version (Unicode) {
98     alias BuildExplicitAccessWithName = BuildExplicitAccessWithNameW;
99     alias BuildSecurityDescriptor = BuildSecurityDescriptorW;
100     alias BuildTrusteeWithName = BuildTrusteeWithNameW;
101     alias BuildTrusteeWithObjectsAndName = BuildTrusteeWithObjectsAndNameW;
102     alias BuildTrusteeWithObjectsAndSid = BuildTrusteeWithObjectsAndSidW;
103     alias BuildTrusteeWithSid = BuildTrusteeWithSidW;
104     alias GetAuditedPermissionsFromAcl = GetAuditedPermissionsFromAclW;
105     alias GetEffectiveRightsFromAcl = GetEffectiveRightsFromAclW;
106     alias GetExplicitEntriesFromAcl = GetExplicitEntriesFromAclW;
107     alias GetNamedSecurityInfo = GetNamedSecurityInfoW;
108     alias GetTrusteeForm = GetTrusteeFormW;
109     alias GetTrusteeName = GetTrusteeNameW;
110     alias GetTrusteeType = GetTrusteeTypeW;
111     alias LookupSecurityDescriptorParts = LookupSecurityDescriptorPartsW;
112     alias SetEntriesInAcl = SetEntriesInAclW;
113     alias SetNamedSecurityInfo = SetNamedSecurityInfoW;
114     alias BuildImpersonateExplicitAccessWithName = BuildImpersonateExplicitAccessWithNameW;
115     alias BuildImpersonateTrustee = BuildImpersonateTrusteeW;
116     alias GetMultipleTrustee = GetMultipleTrusteeW;
117     alias GetMultipleTrusteeOperation = GetMultipleTrusteeOperationW;
118 } else {
119     alias BuildExplicitAccessWithName = BuildExplicitAccessWithNameA;
120     alias BuildSecurityDescriptor = BuildSecurityDescriptorA;
121     alias BuildTrusteeWithName = BuildTrusteeWithNameA;
122     alias BuildTrusteeWithObjectsAndName = BuildTrusteeWithObjectsAndNameA;
123     alias BuildTrusteeWithObjectsAndSid = BuildTrusteeWithObjectsAndSidA;
124     alias BuildTrusteeWithSid = BuildTrusteeWithSidA;
125     alias GetAuditedPermissionsFromAcl = GetAuditedPermissionsFromAclA;
126     alias GetEffectiveRightsFromAcl = GetEffectiveRightsFromAclA;
127     alias GetExplicitEntriesFromAcl = GetExplicitEntriesFromAclA;
128     alias GetNamedSecurityInfo = GetNamedSecurityInfoA;
129     alias GetTrusteeForm = GetTrusteeFormA;
130     alias GetTrusteeName = GetTrusteeNameA;
131     alias GetTrusteeType = GetTrusteeTypeA;
132     alias LookupSecurityDescriptorParts = LookupSecurityDescriptorPartsA;
133     alias SetEntriesInAcl = SetEntriesInAclA;
134     alias SetNamedSecurityInfo = SetNamedSecurityInfoA;
135     alias BuildImpersonateExplicitAccessWithName = BuildImpersonateExplicitAccessWithNameA;
136     alias BuildImpersonateTrustee = BuildImpersonateTrusteeA;
137     alias GetMultipleTrustee = GetMultipleTrusteeA;
138     alias GetMultipleTrusteeOperation = GetMultipleTrusteeOperationA;
139 }