1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
|
//+-------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1993 - 1994.
//
// File: provapi.h
//
// Contents: public provider independent access control header file
//
// History: 8-94 Created DaveMont
//
//--------------------------------------------------------------------
#ifndef __PROVIDER_INDEPENDENT_ACCESS__
#define __PROVIDER_INDEPENDENT_ACCESS__
#include <windows.h>
#include <accctrl.h>
#define PRESUME_KEY PVOID
//--------------------------------------------------------------------
//
// access request format
//
//--------------------------------------------------------------------
typedef struct _PROV_ACCESS_REQUEST
{
DWORD ulAccessRights;
LPTSTR TrusteeName;
} PROV_ACCESS_REQUEST, *PPROV_ACCESS_REQUEST;
//--------------------------------------------------------------------
//
// returned by GetExplicitAccessRights
//
//--------------------------------------------------------------------
typedef struct _PROV_EXPLICIT_ACCESS
{
DWORD ulAccessRights;
ACCESS_MODE ulAccessMode;
DWORD ulInheritance;
LPTSTR TrusteeName;
} PROV_EXPLICIT_ACCESS, *PPROV_EXPLICIT_ACCESS;
//--------------------------------------------------------------------
//
// Object type definition
//
//--------------------------------------------------------------------
typedef enum _PROV_OBJECT_TYPE
{
PROV_FILE_OBJECT = 1,
PROV_SERVICE,
PROV_PRINTER,
PROV_REGISTRY_KEY,
PROV_LMSHARE,
PROV_OLE_OBJECT,
PROV_PROVIDER_DEFINED
} PROV_OBJECT_TYPE, *PPROV_OBJECT_TYPE;
//+-------------------------------------------------------------------------
#ifdef __cplusplus
extern "C" {
#endif
//+-------------------------------------------------------------------------
// provacc.cxx
//+-------------------------------------------------------------------------
WINAPI
GrantAccessRightsW( IN LPWSTR pObjectName,
IN PROV_OBJECT_TYPE ObjectType,
IN ULONG cCountOfAccessRequests,
IN PPROV_ACCESS_REQUEST pListOfAccessRequests);
WINAPI
GrantAccessRightsA( IN LPSTR pObjectName,
IN PROV_OBJECT_TYPE ObjectType,
IN ULONG cCountOfAccessRequests,
IN PPROV_ACCESS_REQUEST pListOfAccessRequests);
#ifdef UNICODE
#define GrantAccessRights GrantAccessRightsW
#else
#define GrantAccessRights GrantAccessRightsA
#endif // UNICODE
WINAPI
ReplaceAllAccessRightsW( IN LPWSTR pObjectName,
IN PROV_OBJECT_TYPE ObjectType,
IN ULONG cCountOfAccessRequests,
IN PPROV_ACCESS_REQUEST pListOfAccessRequests);
WINAPI
ReplaceAllAccessRightsA( IN LPSTR pObjectName,
IN PROV_OBJECT_TYPE ObjectType,
IN ULONG cCountOfAccessRequests,
IN PPROV_ACCESS_REQUEST pListOfAccessRequests);
#ifdef UNICODE
#define ReplaceAllAccessRights ReplaceAllAccessRightsW
#else
#define ReplaceAllAccessRights ReplaceAllAccessRightsA
#endif // UNICODE
WINAPI
SetAccessRightsW( IN LPWSTR pObjectName,
IN PROV_OBJECT_TYPE ObjectType,
IN ULONG cCountOfAccessRequests,
IN PPROV_ACCESS_REQUEST pListOfAccessRequests);
WINAPI
SetAccessRightsA( IN LPSTR pObjectName,
IN PROV_OBJECT_TYPE ObjectType,
IN ULONG cCountOfAccessRequests,
IN PPROV_ACCESS_REQUEST pListOfAccessRequests);
#ifdef UNICODE
#define SetAccessRights SetAccessRightsW
#else
#define SetAccessRights SetAccessRightsA
#endif // UNICODE
WINAPI
DenyAccessRightsW( IN LPWSTR pObjectName,
IN PROV_OBJECT_TYPE ObjectType,
IN ULONG cCountOfAccessRequests,
IN PPROV_ACCESS_REQUEST pListOfAccessRequests);
WINAPI
DenyAccessRightsA( IN LPSTR pObjectName,
IN PROV_OBJECT_TYPE ObjectType,
IN ULONG cCountOfAccessRequests,
IN PPROV_ACCESS_REQUEST pListOfAccessRequests);
#ifdef UNICODE
#define DenyAccessRights DenyAccessRightsW
#else
#define DenyAccessRights DenyAccessRightsA
#endif // UNICODE
WINAPI
RevokeExplicitAccessRightsW(IN LPWSTR pObjectName,
IN PROV_OBJECT_TYPE ObjectType,
IN ULONG cCountOfTrusteeNames,
IN LPWSTR *pListOfTrusteeNames);
WINAPI
RevokeExplicitAccessRightsA(IN LPSTR pObjectName,
IN PROV_OBJECT_TYPE ObjectType,
IN ULONG cCountOfTrusteeNames,
IN LPSTR *pListOfTrusteeNames);
#ifdef UNICODE
#define RevokeExplicitAccessRights RevokeExplicitAccessRightsW
#else
#define RevokeExplicitAccessRights RevokeExplicitAccessRightsA
#endif // UNICODE
WINAPI
IsAccessPermittedW( IN LPWSTR pObjectName,
IN PROV_OBJECT_TYPE ObjectType,
IN LPWSTR pTrusteeName,
IN ACCESS_RIGHTS ulRequestedRights,
OUT PBOOL pbResult);
WINAPI
IsAccessPermittedA( IN LPSTR pObjectName,
IN PROV_OBJECT_TYPE ObjectType,
IN LPSTR pTrusteeName,
IN ACCESS_RIGHTS ulRequestedRights,
OUT PBOOL pbResult);
#ifdef UNICODE
#define IsAccessPermitted IsAccessPermittedW
#else
#define IsAccessPermitted IsAccessPermittedA
#endif // UNICODE
WINAPI
GetEffectiveAccessRightsW( IN LPWSTR pObjectName,
IN PROV_OBJECT_TYPE ObjectType,
IN LPWSTR pTrusteeName,
OUT PACCESS_RIGHTS pulReturnedAccess);
WINAPI
GetEffectiveAccessRightsA( IN LPSTR pObjectName,
IN PROV_OBJECT_TYPE ObjectType,
IN LPSTR pTrusteeName,
OUT PACCESS_RIGHTS pulReturnedAccess);
#ifdef UNICODE
#define GetEffectiveAccessRights GetEffectiveAccessRightsW
#else
#define GetEffectiveAccessRights GetEffectiveAccessRightsA
#endif // UNICODE
WINAPI
GetExplicitAccessRightsW(IN LPWSTR pObjectName,
IN PROV_OBJECT_TYPE ObjectType,
OUT PULONG pcCountOfExplicitAccesses,
OUT PPROV_EXPLICIT_ACCESS *pListOfExplicitAccesses);
WINAPI
GetExplicitAccessRightsA(IN LPSTR pObjectName,
IN PROV_OBJECT_TYPE ObjectType,
OUT PULONG pcCountOfExplicitAccesses,
OUT PPROV_EXPLICIT_ACCESS *pListOfExplicitAccesses);
#ifdef UNICODE
#define GetExplicitAccessRights GetExplicitAccessRightsW
#else
#define GetExplicitAccessRights GetExplicitAccessRightsA
#endif // UNICODE
//----------------------------------------------------------------------------
// from enumapi.cxx
//----------------------------------------------------------------------------
typedef struct _RESUME_KEY
{
DWORD (*CallEnumTrustees)(IN LPWSTR pObjectName,
IN PROV_OBJECT_TYPE ObjectType,
IN LPWSTR pMachineName,
IN LPWSTR pFilter,
IN BOOL bFilterFullNames,
IN ULONG cSizeOfTrusteeNames,
OUT PULONG pcCountOfTrusteeNames,
OUT LPWSTR *pListOfTrusteeNames,
IN OUT PRESUME_KEY *pRresumeKey);
DWORD (*CallCloseEnumTrusteesKey)( IN PRESUME_KEY presumekey);
ULONG ProviderSpecificStart; // resume key must be contiguous(???)
} RESUME_KEY, *PIRESUME_KEY;
WINAPI
CloseEnumTrusteesKey( IN PRESUME_KEY presumekey);
WINAPI
EnumTrusteesW( IN LPWSTR pObjectName,
IN PROV_OBJECT_TYPE ObjectType,
IN LPWSTR pFilter,
IN BOOL bFilterFullNames,
IN ULONG cSizeOfTrusteeNames,
OUT PULONG pcCountOfTrusteeNames,
OUT LPWSTR *pListOfTrusteeNames,
IN OUT PRESUME_KEY *pRresumeKey);
WINAPI
EnumTrusteesA( IN LPSTR pObjectName,
IN PROV_OBJECT_TYPE ObjectType,
IN LPSTR pFilter,
IN BOOL bFilterFullNames,
IN ULONG cSizeOfTrusteeNames,
OUT PULONG pcCountOfTrusteeNames,
OUT LPSTR *pListOfTrusteeNames,
IN OUT PRESUME_KEY *pRresumeKey);
#ifdef UNICODE
#define EnumTrustees EnumTrusteesW
#else
#define EnumTrustees EnumTrusteesA
#endif // UNICODE
#ifdef __cplusplus
}
#endif
#endif // __PROVIDER_INDEPENDENT_ACCESS__
|