1 /**
2     AclUI.h Header Module
3 
4     Translated from Windows 10 Kit 10.0.19041.0
5 
6     License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0)
7     Authors: Luna Nielsen
8 */
9 module nulib.system.win32.aclui;
10 import nulib.system.win32.w32api;
11 import nulib.system.win32.sdkddkver;
12 import nulib.system.win32.accctrl;
13 import nulib.system.win32.w32api;
14 import nulib.system.win32.basetyps;
15 import nulib.system.win32.prsht;
16 import nulib.system.win32.windef;
17 import nulib.system.win32.winuser;
18 import nulib.system.com;
19 
20 pragma(lib, "aclui");
21 
22 alias PSI_OBJECT_INFO = SI_OBJECT_INFO*;
23 alias LPSI_OBJECT_INFO = SI_OBJECT_INFO*;
24 alias LPCSI_OBJECT_INFO = const(SI_OBJECT_INFO)*;
25 struct SI_OBJECT_INFO {
26     DWORD dwFlags;
27     HINSTANCE hInstance;
28     LPWSTR pszServerName;
29     LPWSTR pszObjectName;
30     LPWSTR pszPageTitle;
31     GUID guidObjectType;
32 }
33 
34 // values for SI_OBJECT_INFO.dwFlags
35 enum DWORD SI_EDIT_PERMS = 0x00000000,
36     SI_EDIT_OWNER = 0x00000001,
37     SI_EDIT_AUDITS = 0x00000002,
38     SI_CONTAINER = 0x00000004,
39     SI_READONLY = 0x00000008,
40     SI_ADVANCED = 0x00000010,
41     SI_RESET = 0x00000020,
42     SI_OWNER_READONLY = 0x00000040,
43     SI_EDIT_PROPERTIES = 0x00000080,
44     SI_OWNER_RECURSE = 0x00000100,
45     SI_NO_ACL_PROTECT = 0x00000200,
46     SI_NO_TREE_APPLY = 0x00000400,
47     SI_PAGE_TITLE = 0x00000800,
48     SI_SERVER_IS_DC = 0x00001000,
49     SI_RESET_DACL_TREE = 0x00004000,
50     SI_RESET_SACL_TREE = 0x00008000,
51     SI_OBJECT_GUID = 0x00010000,
52     SI_EDIT_EFFECTIVE = 0x00020000,
53     SI_RESET_DACL = 0x00040000,
54     SI_RESET_SACL = 0x00080000,
55     SI_RESET_OWNER = 0x00100000,
56     SI_NO_ADDITIONAL_PERMISSION = 0x00200000,
57     SI_MAY_WRITE = 0x10000000,
58     SI_EDIT_ALL = SI_EDIT_PERMS | SI_EDIT_OWNER | SI_EDIT_AUDITS;
59 
60 alias PSI_ACCESS = SI_ACCESS*;
61 alias LPSI_ACCESS = SI_ACCESS*;
62 alias LPCSI_ACCESS = const(SI_ACCESS)*;
63 struct SI_ACCESS {
64     const(GUID)* pguid;
65     ACCESS_MASK mask;
66     LPCWSTR pszName;
67     DWORD dwFlags;
68 }
69 
70 // values for SI_ACCESS.dwFlags
71 enum DWORD 
72     SI_ACCESS_SPECIFIC = 0x00010000,
73     SI_ACCESS_GENERAL = 0x00020000,
74     SI_ACCESS_CONTAINER = 0x00040000,
75     SI_ACCESS_PROPERTY = 0x00080000;
76 
77 
78 alias PSI_INHERIT_TYPE = SI_INHERIT_TYPE*;
79 alias LPSI_INHERIT_TYPE = SI_INHERIT_TYPE*;
80 alias LPCSI_INHERIT_TYPE = const(SI_INHERIT_TYPE)*;
81 struct SI_INHERIT_TYPE {
82     const(GUID)* pguid;
83     ULONG dwFlags;
84     LPCWSTR pszName;
85 }
86 
87 alias PSI_PAGE_TYPE = SI_PAGE_TYPE*;
88 alias LPSI_PAGE_TYPE = SI_PAGE_TYPE*;
89 alias LPCSI_PAGE_TYPE = const(SI_PAGE_TYPE)*;
90 enum SI_PAGE_TYPE {
91     SI_PAGE_PERM,
92     SI_PAGE_ADVPERM,
93     SI_PAGE_AUDIT,
94     SI_PAGE_OWNER,
95     SI_PAGE_EFFECTIVE,
96     SI_PAGE_TAKEOWNERSHIP,
97     SI_PAGE_SHARE,
98 }
99 
100 alias PSI_PAGE_ACTIVATED = SI_PAGE_ACTIVATED*;
101 alias LPSI_PAGE_ACTIVATED = SI_PAGE_ACTIVATED*;
102 alias LPCSI_PAGE_ACTIVATED = const(SI_PAGE_ACTIVATED)*;
103 enum SI_PAGE_ACTIVATED {
104     SI_SHOW_DEFAULT = 0,
105     SI_SHOW_PERM_ACTIVATED,
106     SI_SHOW_AUDIT_ACTIVATED,
107     SI_SHOW_OWNER_ACTIVATED,
108     SI_SHOW_EFFECTIVE_ACTIVATED,
109     SI_SHOW_SHARE_ACTIVATED,
110     SI_SHOW_CENTRAL_POLICY_ACTIVATED,
111 }
112 
113 enum DOBJ_RES_CONT =           0x00000001L;
114 enum DOBJ_RES_ROOT =           0x00000002L;
115 enum DOBJ_VOL_NTACLS =         0x00000004L;     /// NTFS or OFS
116 enum DOBJ_COND_NTACLS =        0x00000008L;     /// Conditional aces supported.
117 enum DOBJ_RIBBON_LAUNCH =      0x00000010L;     /// Invoked from explorer ribbon.
118 
119 enum uint PSPCB_SI_INITDIALOG = WM_USER + 1;
120 
121 alias P = SID_INFO_LIST*;
122 alias LP = SID_INFO_LIST*;
123 alias LPC = const(SID_INFO_LIST)*;
124 struct SID_INFO {
125     SID*    pSid;
126     PWSTR   pwzCommonName;
127     
128     /**
129         Used for selecting icon, e.g. "User" or "Group"
130     */
131     PWSTR   pwzClass;
132 
133     /**
134         Optional, may be NULL
135     */
136     PWSTR   pwzUPN;
137 }
138 
139 alias PSID_INFO_LIST = SID_INFO_LIST*;
140 alias LPSID_INFO_LIST = SID_INFO_LIST*;
141 alias LPCSID_INFO_LIST = const(SID_INFO_LIST)*;
142 struct SID_INFO_LIST {
143     ULONG       cItems;
144     SID_INFO*   aSidInfo;
145 }
146 
147 alias PSECURITY_OBJECT = SECURITY_OBJECT*;
148 alias LPSECURITY_OBJECT = SECURITY_OBJECT*;
149 alias LPCSECURITY_OBJECT = const(SECURITY_OBJECT)*;
150 struct SECURITY_OBJECT {
151     PWSTR pwszName;
152     PVOID pData;
153     DWORD cbData;
154     PVOID pData2;
155     DWORD cbData2;
156     DWORD Id;
157     BOOLEAN fWellKnown;
158 }
159 
160 enum DWORD SECURITY_OBJECT_ID_OBJECT_SD =      1;
161 enum DWORD SECURITY_OBJECT_ID_SHARE =          2;
162 enum DWORD SECURITY_OBJECT_ID_CENTRAL_POLICY = 3;
163 enum DWORD SECURITY_OBJECT_ID_CENTRAL_ACCESS_RULE = 4;
164 
165 alias PEFFPERM_RESULT_LIST = EFFPERM_RESULT_LIST*;
166 alias LPEFFPERM_RESULT_LIST = EFFPERM_RESULT_LIST*;
167 alias LPCEFFPERM_RESULT_LIST = const(EFFPERM_RESULT_LIST)*;
168 struct EFFPERM_RESULT_LIST {
169     BOOLEAN fEvaluated;
170     ULONG cObjectTypeListLength;
171     PVOID pObjectTypeList;
172     ACCESS_MASK* pGrantedAccessList;
173 }
174 
175 extern (Windows) nothrow @nogc {
176     HPROPSHEETPAGE CreateSecurityPage(ISecurityInformation psi);
177     BOOL EditSecurity(HWND hwndOwner, ISecurityInformation psi);
178     
179     static if (NTDDI_VERSION >= NTDDI_VISTA) {
180         HRESULT EditSecurityAdvanced(HWND hwndOwner, ISecurityInformation psi, SI_PAGE_TYPE uSIPage);
181     }
182 }
183 
184 @Guid!("965FC360-16FF-11d0-91CB-00AA00BBB723")
185 interface ISecurityInformation : IUnknown {
186     HRESULT GetObjectInformation(ref SI_OBJECT_INFO) pure;
187     HRESULT GetSecurity(SECURITY_INFORMATION, ref SECURITY_DESCRIPTOR*, BOOL) pure;
188     HRESULT SetSecurity(SECURITY_INFORMATION, ref SECURITY_DESCRIPTOR) pure;
189     HRESULT GetAccessRights(const(GUID)*, DWORD, ref SI_ACCESS*, ULONG*, ULONG*) pure;
190     HRESULT MapGeneric(const(GUID)*, UCHAR*, ACCESS_MASK*) pure;
191     HRESULT GetInheritTypes(ref SI_INHERIT_TYPE*, ULONG*) pure;
192     HRESULT PropertySheetPageCallback(HWND, UINT, SI_PAGE_TYPE) pure;
193 }
194 
195 
196 @Guid!("c3ccfdb4-6f88-11d2-a3ce-00c04fb1782a")
197 interface ISecurityInformation2 : IUnknown {
198     BOOLEAN IsDaclCanonical(in PACL pDacl) pure;
199     HRESULT LookupSids(ulong cSids, SID* rgpSids, out void* ppdo) pure;
200 }
201 
202 @Guid!("3853DC76-9F35-407c-88A1-D19344365FBC")
203 interface IEffectivePermission : IUnknown {
204     HRESULT GetEffectivePermission(
205         const(GUID)* pguidObjectType,
206         SID* pUserSid,
207         LPCWSTR pszServerName,
208         ref SECURITY_DESCRIPTOR pSD,
209         ref void* ppObjectTypeList,
210         ref ULONG pcObjectTypeListLength,
211         ref PACCESS_MASK ppGrantedAccessList,
212         ref ULONG pcGrantedAccessListLength
213     ) pure;
214 }
215 
216 @Guid!("FC3066EB-79EF-444b-9111-D18A75EBF2FA")
217 interface ISecurityObjectTypeInfo : IUnknown {
218     HRESULT GetInheritSource(
219         SECURITY_INFORMATION si,
220         ref ACL pACL,
221         ref INHERITED_FROM* ppInheritArray
222     ) pure;
223 }
224 
225 // Windows Vista+
226 static if (NTDDI_VERSION >= NTDDI_VISTA) {
227 
228     @Guid!("E2CDC9CC-31BD-4f8f-8C8B-B641AF516A1A")
229     interface ISecurityInformation3 : IUnknown {
230         HRESULT GetFullResourceName(out LPWSTR ppszResourceName) pure;
231         HRESULT OpenElevatedEditor(HWND hWnd, SI_PAGE_TYPE uPage) pure;
232     }
233 
234 }
235 
236 // Windows 8+
237 static if (NTDDI_VERSION >= NTDDI_WIN8) {
238 
239     @Guid!("EA961070-CD14-4621-ACE4-F63C03E583E4")
240     interface ISecurityInformation4 : IUnknown {
241         HRESULT GetSecondarySecurity(ref SECURITY_OBJECT* pSecurityObjects, PULONG pSecurityObjectCount) pure;
242     }
243 
244     @Guid!("941FABCA-DD47-4FCA-90BB-B0E10255F20D")
245     interface IEffectivePermission2 : IUnknown {
246         HRESULT ComputeEffectivePermissionWithSecondarySecurity(
247             SID* pSid,
248             SID* pDeviceSid,
249             PCWSTR pszServerName,
250             SECURITY_OBJECT* pSecurityObjects,
251             DWORD dwSecurityObjectCount,
252             TOKEN_GROUPS* pUserGroups,
253             AUTHZ_SID_OPERATION* pAuthzUserGroupsOperations,
254             TOKEN_GROUPS* pDeviceGroups,
255             AUTHZ_SID_OPERATION* pAuthzDeviceGroupsOperations,
256             AUTHZ_SECURITY_ATTRIBUTES_INFORMATION* pAuthzUserClaims,
257             AUTHZ_SECURITY_ATTRIBUTE_OPERATION* pAuthzUserClaimsOperations,
258             AUTHZ_SECURITY_ATTRIBUTES_INFORMATION* pAuthzDeviceClaims,
259             AUTHZ_SECURITY_ATTRIBUTE_OPERATION* pAuthzDeviceClaimsOperations,
260             EFFPERM_RESULT_LIST* pEffpermResultLists
261         );
262     }
263 
264 }