1 #pragma once
2 
3 BOOL
4 InitializeAclUiDll(VOID);
5 
6 VOID
7 UnloadAclUiDll(VOID);
8 
9 #define REGEDIT_IMPLEMENT_ISECURITYINFORMATION2    0
10 
11 /******************************************************************************
12    ISecurityInformation
13  ******************************************************************************/
14 
15 typedef struct ISecurityInformation *LPSECURITYINFORMATION;
16 
17 typedef struct ifaceISecuritInformationVbtl ifaceISecurityInformationVbtl;
18 struct ifaceISecurityInformationVbtl
19 {
20     /* IUnknown */
21     HRESULT (STDMETHODCALLTYPE *QueryInterface)(struct ISecurityInformation *this,
22                                                 REFIID iid,
23                                                 PVOID *pvObject);
24     ULONG (STDMETHODCALLTYPE *AddRef)(struct ISecurityInformation *this);
25     ULONG (STDMETHODCALLTYPE *Release)(struct ISecurityInformation *this);
26 
27     /* ISecurityInformation */
28     HRESULT (STDMETHODCALLTYPE *GetObjectInformation)(struct ISecurityInformation *this,
29                                                       PSI_OBJECT_INFO pObjectInfo);
30     HRESULT (STDMETHODCALLTYPE *GetSecurity)(struct ISecurityInformation *this,
31                                              SECURITY_INFORMATION RequestedInformation,
32                                              PSECURITY_DESCRIPTOR* ppSecurityDescriptor,
33                                              BOOL fDefault);
34     HRESULT (STDMETHODCALLTYPE *SetSecurity)(struct ISecurityInformation *this,
35                                              SECURITY_INFORMATION RequestedInformation,
36                                              PSECURITY_DESCRIPTOR pSecurityDescriptor);
37     HRESULT (STDMETHODCALLTYPE *GetAccessRights)(struct ISecurityInformation *this,
38                                                  const GUID* pguidObjectType,
39                                                  DWORD dwFlags,
40                                                  PSI_ACCESS* ppAccess,
41                                                  ULONG* pcAccesses,
42                                                  ULONG* piDefaultAccess);
43     HRESULT (STDMETHODCALLTYPE *MapGeneric)(struct ISecurityInformation *this,
44                                             const GUID* pguidObjectType,
45                                             UCHAR* pAceFlags,
46                                             ACCESS_MASK* pMask);
47     HRESULT (STDMETHODCALLTYPE *GetInheritTypes)(struct ISecurityInformation *this,
48                                                  PSI_INHERIT_TYPE* ppInheritTypes,
49                                                  ULONG* pcInheritTypes);
50     HRESULT (STDMETHODCALLTYPE *PropertySheetPageCallback)(struct ISecurityInformation *this,
51                                                            HWND hwnd,
52                                                            UINT uMsg,
53                                                            SI_PAGE_TYPE uPage);
54 };
55 
56 #if REGEDIT_IMPLEMENT_ISECURITYINFORMATION2
57 /******************************************************************************
58    ISecurityInformation2
59  ******************************************************************************/
60 
61 typedef struct ISecurityInformation2 *LPSECURITYINFORMATION2;
62 
63 typedef struct ifaceISecurityInformation2Vbtl ifaceISecurityInformation2Vbtl;
64 struct ifaceISecurityInformation2Vbtl
65 {
66     /* IUnknown */
67     HRESULT (STDMETHODCALLTYPE *QueryInterface)(struct ISecurityInformation2 *this,
68                                                 REFIID iid,
69                                                 PVOID *pvObject);
70     ULONG (STDMETHODCALLTYPE *AddRef)(struct ISecurityInformation2 *this);
71     ULONG (STDMETHODCALLTYPE *Release)(struct ISecurityInformation2 *this);
72 
73     /* ISecurityInformation2 */
74     BOOL (STDMETHODCALLTYPE *IsDaclCanonical)(struct ISecurityInformation2 *this,
75                                               PACL pDacl);
76     HRESULT (STDMETHODCALLTYPE *LookupSids)(struct ISecurityInformation2 *this,
77                                             ULONG cSids,
78                                             PSID* rgpSids,
79                                             LPDATAOBJECT* ppdo);
80 };
81 #endif
82 
83 /******************************************************************************
84    IEffectivePermission
85  ******************************************************************************/
86 
87 typedef struct IEffectivePermission *LPEFFECTIVEPERMISSION;
88 
89 typedef struct ifaceIEffectivePermissionVbtl ifaceIEffectivePermissionVbtl;
90 struct ifaceIEffectivePermissionVbtl
91 {
92     /* IUnknown */
93     HRESULT (STDMETHODCALLTYPE *QueryInterface)(struct IEffectivePermission *this,
94                                                 REFIID iid,
95                                                 PVOID *pvObject);
96     ULONG (STDMETHODCALLTYPE *AddRef)(struct IEffectivePermission *this);
97     ULONG (STDMETHODCALLTYPE *Release)(struct IEffectivePermission *this);
98 
99     /* IEffectivePermission */
100     HRESULT (STDMETHODCALLTYPE *GetEffectivePermission)(struct IEffectivePermission *this,
101                                                         const GUID* pguidObjectType,
102                                                         PSID pUserSid,
103                                                         LPCWSTR pszServerName,
104                                                         PSECURITY_DESCRIPTOR pSD,
105                                                         POBJECT_TYPE_LIST* ppObjectTypeList,
106                                                         ULONG* pcObjectTypeListLength,
107                                                         PACCESS_MASK* ppGrantedAccessList,
108                                                         ULONG* pcGrantedAccessListLength);
109 };
110 
111 /******************************************************************************
112    ISecurityObjectTypeInfo
113  ******************************************************************************/
114 
115 typedef struct ISecurityObjectTypeInfo *LPSECURITYOBJECTTYPEINFO;
116 
117 typedef struct ifaceISecurityObjectTypeInfoVbtl ifaceISecurityObjectTypeInfoVbtl;
118 struct ifaceISecurityObjectTypeInfoVbtl
119 {
120     /* IUnknown */
121     HRESULT (STDMETHODCALLTYPE *QueryInterface)(struct ISecurityObjectTypeInfo *this,
122                                                 REFIID iid,
123                                                 PVOID *pvObject);
124     ULONG (STDMETHODCALLTYPE *AddRef)(struct ISecurityObjectTypeInfo *this);
125     ULONG (STDMETHODCALLTYPE *Release)(struct ISecurityObjectTypeInfo *this);
126 
127     /* ISecurityObjectTypeInfo */
128     HRESULT (STDMETHODCALLTYPE *GetInheritSource)(struct ISecurityObjectTypeInfo *this,
129                                                   SECURITY_INFORMATION si,
130                                                   PACL pACL,
131                                                   PINHERITED_FROM* ppInheritArray);
132 };
133 
134 /******************************************************************************
135    CRegKeySecurity
136  ******************************************************************************/
137 
138 typedef struct _CRegKeySecurity
139 {
140     /* IUnknown fields and interfaces */
141     const struct ifaceISecurityInformationVbtl *lpISecurityInformationVtbl;
142 #if REGEDIT_IMPLEMENT_ISECURITYINFORMATION2
143     const struct ifaceISecurityInformation2Vbtl *lpISecurityInformation2Vtbl;
144 #endif
145     const struct ifaceIEffectivePermissionVbtl *lpIEffectivePermissionVtbl;
146     const struct ifaceISecurityObjectTypeInfoVbtl *lpISecurityObjectTypeInfoVtbl;
147     DWORD ref;
148 
149     /* CRegKeySecurity fields */
150     SI_OBJECT_INFO ObjectInfo;
151     BOOL *Btn;
152     HKEY hRootKey;
153     WCHAR szRegKey[1];
154 } CRegKeySecurity, *PCRegKeySecurity;
155 
156 /* EOF */
157