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 }