1 /**
2  * Windows API header module
3  *
4  * Translated from MinGW API for MS-Windows 3.10
5  *
6  * Authors: Stewart Gordon
7  * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0)
8  * Source: $(DRUNTIMESRC src/core/sys/windows/_aclui.d)
9  */
10 module core.sys.windows.aclui;
11 version (Windows):
12 @system:
13 pragma(lib, "aclui");
14 
15 import core.sys.windows.w32api;
16 /*
17 static assert (_WIN32_WINNT >= 0x500,
18     "core.sys.windows.aclui is available only if version Windows2000, WindowsXP, Windows2003 "
19     "or WindowsVista is set");
20 */
21 import core.sys.windows.accctrl, core.sys.windows.commctrl, core.sys.windows.objbase;
22 import core.sys.windows.basetyps, core.sys.windows.prsht, core.sys.windows.unknwn, core.sys.windows.windef,
23   core.sys.windows.winuser;
24 
25 
26 struct SI_OBJECT_INFO {
27     DWORD     dwFlags;
28     HINSTANCE hInstance;
29     LPWSTR    pszServerName;
30     LPWSTR    pszObjectName;
31     LPWSTR    pszPageTitle;
32     GUID      guidObjectType;
33 }
34 alias SI_OBJECT_INFO* PSI_OBJECT_INFO;
35 
36 // values for SI_OBJECT_INFO.dwFlags
37 enum DWORD
38     SI_EDIT_PERMS               = 0x00000000,
39     SI_EDIT_OWNER               = 0x00000001,
40     SI_EDIT_AUDITS              = 0x00000002,
41     SI_CONTAINER                = 0x00000004,
42     SI_READONLY                 = 0x00000008,
43     SI_ADVANCED                 = 0x00000010,
44     SI_RESET                    = 0x00000020,
45     SI_OWNER_READONLY           = 0x00000040,
46     SI_EDIT_PROPERTIES          = 0x00000080,
47     SI_OWNER_RECURSE            = 0x00000100,
48     SI_NO_ACL_PROTECT           = 0x00000200,
49     SI_NO_TREE_APPLY            = 0x00000400,
50     SI_PAGE_TITLE               = 0x00000800,
51     SI_SERVER_IS_DC             = 0x00001000,
52     SI_RESET_DACL_TREE          = 0x00004000,
53     SI_RESET_SACL_TREE          = 0x00008000,
54     SI_OBJECT_GUID              = 0x00010000,
55     SI_EDIT_EFFECTIVE           = 0x00020000,
56     SI_RESET_DACL               = 0x00040000,
57     SI_RESET_SACL               = 0x00080000,
58     SI_RESET_OWNER              = 0x00100000,
59     SI_NO_ADDITIONAL_PERMISSION = 0x00200000,
60     SI_MAY_WRITE                = 0x10000000,
61     SI_EDIT_ALL                 = SI_EDIT_PERMS | SI_EDIT_OWNER
62                                   | SI_EDIT_AUDITS;
63 
64 struct SI_ACCESS {
65 const(GUID)* pguid;
66     ACCESS_MASK  mask;
67     LPCWSTR      pszName;
68     DWORD        dwFlags;
69 }
70 alias SI_ACCESS* PSI_ACCESS;
71 
72 // values for SI_ACCESS.dwFlags
73 enum DWORD
74     SI_ACCESS_SPECIFIC  = 0x00010000,
75     SI_ACCESS_GENERAL   = 0x00020000,
76     SI_ACCESS_CONTAINER = 0x00040000,
77     SI_ACCESS_PROPERTY  = 0x00080000;
78 
79 
80 struct SI_INHERIT_TYPE {
81 const(GUID)* pguid;
82     ULONG        dwFlags;
83     LPCWSTR      pszName;
84 }
85 alias SI_INHERIT_TYPE* PSI_INHERIT_TYPE;
86 
87 /* values for SI_INHERIT_TYPE.dwFlags
88    INHERIT_ONLY_ACE, CONTAINER_INHERIT_ACE, OBJECT_INHERIT_ACE
89    defined elsewhere */
90 
91 enum SI_PAGE_TYPE {
92     SI_PAGE_PERM,
93     SI_PAGE_ADVPERM,
94     SI_PAGE_AUDIT,
95     SI_PAGE_OWNER
96 }
97 
98 enum uint PSPCB_SI_INITDIALOG = WM_USER + 1;
99 
100 interface ISecurityInformation : IUnknown {
101     HRESULT GetObjectInformation(PSI_OBJECT_INFO);
102     HRESULT GetSecurity(SECURITY_INFORMATION, PSECURITY_DESCRIPTOR*, BOOL);
103     HRESULT SetSecurity(SECURITY_INFORMATION, PSECURITY_DESCRIPTOR);
104     HRESULT GetAccessRights(const(GUID)*, DWORD, PSI_ACCESS*, ULONG*, ULONG*);
105     HRESULT MapGeneric(const(GUID)*, UCHAR*, ACCESS_MASK*);
106     HRESULT GetInheritTypes(PSI_INHERIT_TYPE*, ULONG*);
107     HRESULT PropertySheetPageCallback(HWND, UINT, SI_PAGE_TYPE);
108 }
109 alias ISecurityInformation LPSECURITYINFO;
110 
111 /* Comment from MinGW
112  * TODO: ISecurityInformation2, IEffectivePermission, ISecurityObjectTypeInfo
113  */
114 
115 // FIXME: linkage attribute?
116 extern (C) /+DECLSPEC_IMPORT+/ extern const IID IID_ISecurityInformation;
117 
118 extern (Windows) {
119     HPROPSHEETPAGE CreateSecurityPage(LPSECURITYINFO psi);
120     BOOL EditSecurity(HWND hwndOwner, LPSECURITYINFO psi);
121 }
122