|  | /* | 
|  | * Copyright (C) 2009 Nikolay Sivov | 
|  | * | 
|  | * This library is free software; you can redistribute it and/or | 
|  | * modify it under the terms of the GNU Lesser General Public | 
|  | * License as published by the Free Software Foundation; either | 
|  | * version 2.1 of the License, or (at your option) any later version. | 
|  | * | 
|  | * This library is distributed in the hope that it will be useful, | 
|  | * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
|  | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | 
|  | * Lesser General Public License for more details. | 
|  | * | 
|  | * You should have received a copy of the GNU Lesser General Public | 
|  | * License along with this library; if not, write to the Free Software | 
|  | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA | 
|  | */ | 
|  |  | 
|  | #ifndef __WINE_ACLUI_H | 
|  | #define __WINE_ACLUI_H | 
|  |  | 
|  | #include <objbase.h> | 
|  | #include <commctrl.h> | 
|  | #include <accctrl.h> | 
|  |  | 
|  | #ifdef __cplusplus | 
|  | extern "C" { | 
|  | #endif  /* __cplusplus */ | 
|  |  | 
|  | typedef struct _SI_OBJECT_INFO | 
|  | { | 
|  | DWORD       dwFlags; | 
|  | HINSTANCE   hInstance; | 
|  | LPWSTR      pszServerName; | 
|  | LPWSTR      pszObjectName; | 
|  | LPWSTR      pszPageTitle; | 
|  | GUID        guidObjectType; | 
|  | } SI_OBJECT_INFO, *PSI_OBJECT_INFO; | 
|  |  | 
|  | #define SI_EDIT_PERMS                0x00000000 | 
|  | #define SI_EDIT_OWNER                0x00000001 | 
|  | #define SI_EDIT_AUDITS               0x00000002 | 
|  | #define SI_CONTAINER                 0x00000004 | 
|  | #define SI_READONLY                  0x00000008 | 
|  | #define SI_ADVANCED                  0x00000010 | 
|  | #define SI_RESET                     0x00000020 | 
|  | #define SI_OWNER_READONLY            0x00000040 | 
|  | #define SI_EDIT_PROPERTIES           0x00000080 | 
|  | #define SI_OWNER_RECURSE             0x00000100 | 
|  | #define SI_NO_ACL_PROTECT            0x00000200 | 
|  | #define SI_NO_TREE_APPLY             0x00000400 | 
|  | #define SI_PAGE_TITLE                0x00000800 | 
|  | #define SI_SERVER_IS_DC              0x00001000 | 
|  | #define SI_RESET_DACL_TREE           0x00004000 | 
|  | #define SI_RESET_SACL_TREE           0x00008000 | 
|  | #define SI_OBJECT_GUID               0x00010000 | 
|  | #define SI_EDIT_EFFECTIVE            0x00020000 | 
|  | #define SI_RESET_DACL                0x00040000 | 
|  | #define SI_RESET_SACL                0x00080000 | 
|  | #define SI_RESET_OWNER               0x00100000 | 
|  | #define SI_NO_ADDITIONAL_PERMISSION  0x00200000 | 
|  | #define SI_VIEW_ONLY                 0x00400000 | 
|  | #define SI_PERMS_ELEVATION_REQUIRED  0x01000000 | 
|  | #define SI_AUDITS_ELEVATION_REQUIRED 0x02000000 | 
|  | #define SI_OWNER_ELEVATION_REQUIRED  0x04000000 | 
|  | #define SI_MAY_WRITE                 0x10000000 | 
|  |  | 
|  | #define SI_EDIT_ALL     (SI_EDIT_PERMS | SI_EDIT_OWNER | SI_EDIT_AUDITS) | 
|  |  | 
|  | typedef struct _SI_ACCESS | 
|  | { | 
|  | const GUID *pguid; | 
|  | ACCESS_MASK mask; | 
|  | LPCWSTR     pszName; | 
|  | DWORD       dwFlags; | 
|  | } SI_ACCESS, *PSI_ACCESS; | 
|  |  | 
|  | #define SI_ACCESS_SPECIFIC  0x00010000 | 
|  | #define SI_ACCESS_GENERAL   0x00020000 | 
|  | #define SI_ACCESS_CONTAINER 0x00040000 | 
|  | #define SI_ACCESS_PROPERTY  0x00080000 | 
|  |  | 
|  | typedef struct _SI_INHERIT_TYPE | 
|  | { | 
|  | const GUID *pguid; | 
|  | ULONG       dwFlags; | 
|  | LPCWSTR     pszName; | 
|  | } SI_INHERIT_TYPE, *PSI_INHERIT_TYPE; | 
|  |  | 
|  | typedef enum _SI_PAGE_TYPE | 
|  | { | 
|  | SI_PAGE_PERM, | 
|  | SI_PAGE_ADVPERM, | 
|  | SI_PAGE_AUDIT, | 
|  | SI_PAGE_OWNER, | 
|  | SI_PAGE_EFFECTIVE, | 
|  | SI_PAGE_TAKEOWNERSHIP | 
|  | } SI_PAGE_TYPE; | 
|  |  | 
|  | #define PSPCB_SI_INITDIALOG (WM_USER + 1) | 
|  |  | 
|  | #undef INTERFACE | 
|  | #define INTERFACE ISecurityInformation | 
|  | DECLARE_INTERFACE_IID_(ISecurityInformation, IUnknown, "965fc360-16ff-11d0-91cb-00aa00bbb723") | 
|  | { | 
|  | /* IUnknown methods */ | 
|  | STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE; | 
|  | STDMETHOD_(ULONG,AddRef) (THIS)  PURE; | 
|  | STDMETHOD_(ULONG,Release) (THIS) PURE; | 
|  |  | 
|  | /* ISecurityInformation methods */ | 
|  | STDMETHOD(GetObjectInformation) (THIS_ PSI_OBJECT_INFO pObjectInfo ) PURE; | 
|  | STDMETHOD(GetSecurity) (THIS_ SECURITY_INFORMATION RequestedInformation, | 
|  | PSECURITY_DESCRIPTOR *ppSecurityDescriptor, | 
|  | BOOL fDefault ) PURE; | 
|  | STDMETHOD(SetSecurity) (THIS_ SECURITY_INFORMATION SecurityInformation, | 
|  | PSECURITY_DESCRIPTOR pSecurityDescriptor ) PURE; | 
|  | STDMETHOD(GetAccessRights) (THIS_ const GUID* pguidObjectType, | 
|  | DWORD dwFlags, | 
|  | PSI_ACCESS *ppAccess, | 
|  | ULONG *pcAccesses, | 
|  | ULONG *piDefaultAccess ) PURE; | 
|  | STDMETHOD(MapGeneric) (THIS_ const GUID *pguidObjectType, | 
|  | UCHAR *pAceFlags, | 
|  | ACCESS_MASK *pMask) PURE; | 
|  | STDMETHOD(GetInheritTypes) (THIS_ PSI_INHERIT_TYPE *ppInheritTypes, | 
|  | ULONG *pcInheritTypes ) PURE; | 
|  | STDMETHOD(PropertySheetPageCallback)(THIS_ HWND hwnd, UINT uMsg, SI_PAGE_TYPE uPage ) PURE; | 
|  | }; | 
|  | typedef ISecurityInformation *LPSECURITYINFO; | 
|  |  | 
|  | #undef INTERFACE | 
|  | #define INTERFACE ISecurityInformation2 | 
|  | DECLARE_INTERFACE_IID_(ISecurityInformation2, IUnknown, "c3ccfdb4-6f88-11d2-a3ce-00c04fb1782a") | 
|  | { | 
|  | /* IUnknown methods */ | 
|  | STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE; | 
|  | STDMETHOD_(ULONG,AddRef) (THIS)  PURE; | 
|  | STDMETHOD_(ULONG,Release) (THIS) PURE; | 
|  |  | 
|  | /* ISecurityInformation2 methods */ | 
|  | STDMETHOD_(BOOL,IsDaclCanonical) (THIS_ PACL pDacl) PURE; | 
|  | STDMETHOD(LookupSids) (THIS_ ULONG cSids, PSID *rgpSids, LPDATAOBJECT *ppdo) PURE; | 
|  | }; | 
|  | typedef ISecurityInformation2 *LPSECURITYINFO2; | 
|  |  | 
|  | #define CFSTR_ACLUI_SID_INFO_LIST   TEXT("CFSTR_ACLUI_SID_INFO_LIST") | 
|  |  | 
|  | typedef struct _SID_INFO | 
|  | { | 
|  | PSID    pSid; | 
|  | PWSTR   pwzCommonName; | 
|  | PWSTR   pwzClass; | 
|  | PWSTR   pwzUPN; | 
|  | } SID_INFO, *PSID_INFO; | 
|  |  | 
|  | typedef struct _SID_INFO_LIST | 
|  | { | 
|  | ULONG       cItems; | 
|  | SID_INFO    aSidInfo[ANYSIZE_ARRAY]; | 
|  | } SID_INFO_LIST, *PSID_INFO_LIST; | 
|  |  | 
|  |  | 
|  | #undef INTERFACE | 
|  | #define INTERFACE IEffectivePermission | 
|  | DECLARE_INTERFACE_IID_(IEffectivePermission, IUnknown, "3853dc76-9f35-407c-88a1-d19344365fbc") | 
|  | { | 
|  | /* IUnknown methods */ | 
|  | STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE; | 
|  | STDMETHOD_(ULONG,AddRef) (THIS)  PURE; | 
|  | STDMETHOD_(ULONG,Release) (THIS) PURE; | 
|  |  | 
|  | /* ISecurityInformation methods */ | 
|  | STDMETHOD(GetEffectivePermission) (THIS_ | 
|  | const GUID* pguidObjectType, | 
|  | PSID pUserSid, | 
|  | LPCWSTR pszServerName, | 
|  | PSECURITY_DESCRIPTOR pSD, | 
|  | POBJECT_TYPE_LIST *ppObjectTypeList, | 
|  | ULONG *pcObjectTypeListLength, | 
|  | PACCESS_MASK *ppGrantedAccessList, | 
|  | ULONG *pcGrantedAccessListLength) PURE; | 
|  | }; | 
|  | typedef IEffectivePermission *LPEFFECTIVEPERMISSION; | 
|  |  | 
|  | #undef INTERFACE | 
|  | #define INTERFACE ISecurityObjectTypeInfo | 
|  | DECLARE_INTERFACE_IID_(ISecurityObjectTypeInfo, IUnknown, "fc3066eb-79ef-444b-9111-d18a75ebf2fa") | 
|  | { | 
|  | /* IUnknown methods */ | 
|  | STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE; | 
|  | STDMETHOD_(ULONG,AddRef) (THIS)  PURE; | 
|  | STDMETHOD_(ULONG,Release) (THIS) PURE; | 
|  |  | 
|  | /* ISecurityInformation methods */ | 
|  | STDMETHOD(GetInheritSource)(THIS_ SECURITY_INFORMATION si, | 
|  | PACL pACL, | 
|  | #ifndef WINE_NO_UNICODE_MACROS | 
|  | PINHERITED_FROM *ppInheritArray | 
|  | #else | 
|  | PINHERITED_FROMW *ppInheritArray | 
|  | #endif | 
|  | ) PURE; | 
|  | }; | 
|  | typedef ISecurityObjectTypeInfo *LPSecurityObjectTypeInfo; | 
|  |  | 
|  |  | 
|  | #undef INTERFACE | 
|  | #define INTERFACE ISecurityInformation3 | 
|  | DECLARE_INTERFACE_IID_(ISecurityInformation3, IUnknown, "e2cdc9cc-31bd-4f8f-8c8b-b641af516a1a") | 
|  | { | 
|  | /* IUnknown methods */ | 
|  | STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE; | 
|  | STDMETHOD_(ULONG,AddRef) (THIS)  PURE; | 
|  | STDMETHOD_(ULONG,Release) (THIS) PURE; | 
|  |  | 
|  | /* ISecurityInformation3 methods */ | 
|  | STDMETHOD(GetFullResourceName) (THIS_ LPWSTR *ppszResourceName) PURE; | 
|  | STDMETHOD(OpenElevatedEditor) (THIS_ HWND hWnd, SI_PAGE_TYPE uPage) PURE; | 
|  | }; | 
|  | typedef ISecurityInformation3 *LPSECURITYINFO3; | 
|  |  | 
|  | DEFINE_GUID(IID_ISecurityInformation, 0x965fc360, 0x16ff, 0x11d0, 0x91, 0xcb, 0x0, 0xaa, 0x0, 0xbb, 0xb7, 0x23); | 
|  | DEFINE_GUID(IID_ISecurityInformation2, 0xc3ccfdb4, 0x6f88, 0x11d2, 0xa3, 0xce, 0x0, 0xc0, 0x4f, 0xb1, 0x78, 0x2a); | 
|  | DEFINE_GUID(IID_IEffectivePermission, 0x3853dc76, 0x9f35, 0x407c, 0x88, 0xa1, 0xd1, 0x93, 0x44, 0x36, 0x5f, 0xbc); | 
|  | DEFINE_GUID(IID_ISecurityObjectTypeInfo, 0xfc3066eb, 0x79ef, 0x444b, 0x91, 0x11, 0xd1, 0x8a, 0x75, 0xeb, 0xf2, 0xfa); | 
|  | DEFINE_GUID(IID_ISecurityInformation3, 0xe2cdc9cc, 0x31bd, 0x4f8f, 0x8c, 0x8b, 0xb6, 0x41, 0xaf, 0x51, 0x6a, 0x1a); | 
|  |  | 
|  | HPROPSHEETPAGE WINAPI CreateSecurityPage(LPSECURITYINFO psi); | 
|  | BOOL WINAPI EditSecurity(HWND owner, LPSECURITYINFO psi); | 
|  | HRESULT WINAPI EditSecurityAdvanced(HWND owner, LPSECURITYINFO psi, SI_PAGE_TYPE uSIPage); | 
|  |  | 
|  | #ifdef __cplusplus | 
|  | } | 
|  | #endif  /* __cplusplus */ | 
|  |  | 
|  | #endif /* __WINE_ACLUI_H */ |