1 /***********************************************************************\ 2 * aclui.d * 3 * * 4 * Windows API header module * 5 * * 6 * Translated from MinGW API for MS-Windows 3.10 * 7 * by Stewart Gordon * 8 * * 9 * Placed into public domain * 10 \***********************************************************************/ 11 module win32.aclui; 12 version(Windows): 13 pragma(lib, "aclui"); 14 15 private import win32.w32api; 16 17 static assert (_WIN32_WINNT >= 0x500, 18 "win32.aclui is available only if version Windows2000, WindowsXP, Windows2003 " 19 "or WindowsVista is set"); 20 21 import win32.accctrl, win32.commctrl, win32.objbase; 22 private import win32.basetyps, win32.prsht, win32.unknwn, win32.windef, 23 win32.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 const 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 const 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 const 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 }