~ubuntu-branches/debian/lenny/fpc/lenny

« back to all changes in this revision

Viewing changes to fpcsrc/packages/base/winunits/jwaaccctrl.pas

  • Committer: Bazaar Package Importer
  • Author(s): Mazen Neifer, Torsten Werner, Mazen Neifer
  • Date: 2008-05-17 17:12:11 UTC
  • mfrom: (3.1.9 intrepid)
  • Revision ID: james.westby@ubuntu.com-20080517171211-9qi33xhd9evfa0kg
Tags: 2.2.0-dfsg1-9
[ Torsten Werner ]
* Add Mazen Neifer to Uploaders field.

[ Mazen Neifer ]
* Moved FPC sources into a version dependent directory from /usr/share/fpcsrc
  to /usr/share/fpcsrc/${FPCVERSION}. This allow installing more than on FPC
  release.
* Fixed far call issue in compiler preventing building huge binearies.
  (closes: #477743)
* Updated building dependencies, recomennded and suggested packages.
* Moved fppkg to fp-utils as it is just a helper tool and is not required by
  compiler.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
{******************************************************************************}
 
2
{                                                                              }
 
3
{ Interface Unit for Object Pascal                                             }
 
4
{                                                                              }
 
5
{ Portions created by Microsoft are Copyright (C) 1995-2003 Microsoft          }
 
6
{ Corporation. All Rights Reserved.                                            }
 
7
{                                                                              }
 
8
{ Portions created by Marcel van Brakel are Copyright (C) 2003                 }
 
9
{ Marcel van Brakel. All Rights Reserved.                                      }
 
10
{                                                                              }
 
11
{ Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI)        }
 
12
{                                                                              }
 
13
{ You may retrieve the latest version of this file at the Project JEDI         }
 
14
{ APILIB home page, located at http://jedi-apilib.sourceforge.net              }
 
15
{                                                                              }
 
16
{ The contents of this file are used with permission, subject to the Mozilla   }
 
17
{ Public License Version 1.1 (the "License"); you may not use this file except }
 
18
{ in compliance with the License. You may obtain a copy of the License at      }
 
19
{ http://www.mozilla.org/MPL/MPL-1.1.html                                      }
 
20
{                                                                              }
 
21
{ Software distributed under the License is distributed on an "AS IS" basis,   }
 
22
{ WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
 
23
{ the specific language governing rights and limitations under the License.    }
 
24
{                                                                              }
 
25
{ Alternatively, the contents of this file may be used under the terms of the  }
 
26
{ GNU Lesser General Public License (the  "LGPL License"), in which case the   }
 
27
{ provisions of the LGPL License are applicable instead of those above.        }
 
28
{ If you wish to allow use of your version of this file only under the terms   }
 
29
{ of the LGPL License and not to allow others to use your version of this file }
 
30
{ under the MPL, indicate your decision by deleting  the provisions above and  }
 
31
{ replace  them with the notice and other provisions required by the LGPL      }
 
32
{ License.  If you do not delete the provisions above, a recipient may use     }
 
33
{ your version of this file under either the MPL or the LGPL License.          }
 
34
{                                                                              }
 
35
{ For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
 
36
{                                                                              }
 
37
{******************************************************************************}
 
38
 
 
39
// $Id: JwaAccCtrl.pas,v 1.7 2005/09/03 14:27:47 marquardt Exp $
 
40
 
 
41
unit JwaAccCtrl;
 
42
 
 
43
{$WEAKPACKAGEUNIT}
 
44
 
 
45
{$I jediapilib.inc}
 
46
 
 
47
interface
 
48
 
 
49
uses
 
50
  JwaWindows;
 
51
 
 
52
{$HPPEMIT ''}
 
53
{$HPPEMIT '#include "aclapi.h"'}
 
54
{$HPPEMIT ''}
 
55
{$HPPEMIT 'typedef PTRUSTEE_A *PPTRUSTEE_A'}
 
56
{$HPPEMIT 'typedef PTRUSTEE_W *PPTRUSTEE_W'}
 
57
{$HPPEMIT '#ifdef UNICODE'}
 
58
{$HPPEMIT 'typedef PPTRUSTEE_W PPTRUSTEE'}
 
59
{$HPPEMIT '#else'}
 
60
{$HPPEMIT 'typedef PPTRUSTEE_A PPTRUSTEE'}
 
61
{$HPPEMIT '#endif'}
 
62
{$HPPEMIT ''}
 
63
 
 
64
(* Dependencies
 
65
// winnt
 
66
PSID
 
67
//wintype
 
68
HLOCAL
 
69
DWORD
 
70
GUID
 
71
LPSTR
 
72
LPWSTR
 
73
ULONG
 
74
PVOID
 
75
HANDLE
 
76
BOOL
 
77
LONG
 
78
*)
 
79
 
 
80
// (rom) MACRO
 
81
function AccFree(hMem: HLOCAL): HLOCAL;
 
82
{$EXTERNALSYM AccFree}
 
83
 
 
84
//
 
85
// Definition:
 
86
// This enumerated type defines the objects supported by the get/set API within
 
87
// this document.  See section 3.1, Object Types for a detailed definition of the
 
88
// supported object types, and their name formats.
 
89
//
 
90
 
 
91
type
 
92
  _SE_OBJECT_TYPE = (
 
93
    SE_UNKNOWN_OBJECT_TYPE,
 
94
    SE_FILE_OBJECT,
 
95
    SE_SERVICE,
 
96
    SE_PRINTER,
 
97
    SE_REGISTRY_KEY,
 
98
    SE_LMSHARE,
 
99
    SE_KERNEL_OBJECT,
 
100
    SE_WINDOW_OBJECT,
 
101
    SE_DS_OBJECT,
 
102
    SE_DS_OBJECT_ALL,
 
103
    SE_PROVIDER_DEFINED_OBJECT,
 
104
    SE_WMIGUID_OBJECT,
 
105
    SE_REGISTRY_WOW64_32KEY);
 
106
  {$EXTERNALSYM _SE_OBJECT_TYPE}
 
107
  SE_OBJECT_TYPE = _SE_OBJECT_TYPE;
 
108
  {$EXTERNALSYM SE_OBJECT_TYPE}
 
109
  TSeObjectType = SE_OBJECT_TYPE;
 
110
 
 
111
//
 
112
// Definition: TRUSTEE_TYPE
 
113
// This enumerated type specifies the type of trustee account for the trustee
 
114
// returned by the API described in this document.
 
115
// TRUSTEE_IS_UNKNOWN - The trustee is an unknown, but not necessarily invalid
 
116
//                      type.  This field is not validated on input to the APIs
 
117
//                      that take Trustees.
 
118
// TRUSTEE_IS_USER      The trustee account is a user account.
 
119
// TRUSTEE_IS_GROUP     The trustee account is a group account.
 
120
//
 
121
 
 
122
  _TRUSTEE_TYPE = (
 
123
    TRUSTEE_IS_UNKNOWN,
 
124
    TRUSTEE_IS_USER,
 
125
    TRUSTEE_IS_GROUP,
 
126
    TRUSTEE_IS_DOMAIN,
 
127
    TRUSTEE_IS_ALIAS,
 
128
    TRUSTEE_IS_WELL_KNOWN_GROUP,
 
129
    TRUSTEE_IS_DELETED,
 
130
    TRUSTEE_IS_INVALID,
 
131
    TRUSTEE_IS_COMPUTER);
 
132
  {$EXTERNALSYM _TRUSTEE_TYPE}
 
133
  TRUSTEE_TYPE = _TRUSTEE_TYPE;
 
134
  {$EXTERNALSYM TRUSTEE_TYPE}
 
135
  TTrusteeType = TRUSTEE_TYPE;
 
136
 
 
137
//
 
138
// Definition: TRUSTEE_FORM
 
139
// This enumerated type specifies the form the trustee identifier is in for a
 
140
// particular trustee.
 
141
// TRUSTEE_IS_SID       The trustee is identified with a SID rather than with a name.
 
142
// TRUSTEE_IS_NAME      The trustee is identified with a name.
 
143
//
 
144
 
 
145
  _TRUSTEE_FORM = (
 
146
    TRUSTEE_IS_SID,
 
147
    TRUSTEE_IS_NAME,
 
148
    TRUSTEE_BAD_FORM,
 
149
    TRUSTEE_IS_OBJECTS_AND_SID,
 
150
    TRUSTEE_IS_OBJECTS_AND_NAME);
 
151
  {$EXTERNALSYM _TRUSTEE_FORM}
 
152
  TRUSTEE_FORM = _TRUSTEE_FORM;
 
153
  {$EXTERNALSYM TRUSTEE_FORM}
 
154
  TTrusteeForm = TRUSTEE_FORM;
 
155
 
 
156
//
 
157
// Definition: MULTIPLE_TRUSTEE_OPERATION
 
158
// If the trustee is a multiple trustee, this enumerated type specifies the type.
 
159
// TRUSTEE_IS_IMPERSONATE       The trustee is an impersonate trustee and the multiple
 
160
//                          trustee field in the trustee points to another trustee
 
161
//                          that is a trustee for the server that will be doing the
 
162
//                          impersonation.
 
163
//
 
164
 
 
165
  _MULTIPLE_TRUSTEE_OPERATION = (NO_MULTIPLE_TRUSTEE, TRUSTEE_IS_IMPERSONATE);
 
166
  {$EXTERNALSYM _MULTIPLE_TRUSTEE_OPERATION}
 
167
  MULTIPLE_TRUSTEE_OPERATION = _MULTIPLE_TRUSTEE_OPERATION;
 
168
  {$EXTERNALSYM MULTIPLE_TRUSTEE_OPERATION}
 
169
  TMultipleTrusteeOperation = MULTIPLE_TRUSTEE_OPERATION;
 
170
 
 
171
  POBJECTS_AND_SID = ^OBJECTS_AND_SID;
 
172
  {$EXTERNALSYM POBJECTS_AND_SID}
 
173
  _OBJECTS_AND_SID = packed record
 
174
    ObjectsPresent: DWORD;
 
175
    ObjectTypeGuid: GUID;
 
176
    InheritedObjectTypeGuid: GUID;
 
177
    pSid: PSID;
 
178
  end;
 
179
  {$EXTERNALSYM _OBJECTS_AND_SID}
 
180
  OBJECTS_AND_SID = _OBJECTS_AND_SID;
 
181
  {$EXTERNALSYM OBJECTS_AND_SID}
 
182
  TObjectsAndSid = OBJECTS_AND_SID;
 
183
  PObjectsAndSid = POBJECTS_AND_SID;
 
184
 
 
185
  POBJECTS_AND_NAME_A = ^OBJECTS_AND_NAME_A;
 
186
  {$EXTERNALSYM POBJECTS_AND_NAME_A}
 
187
  _OBJECTS_AND_NAME_A = packed record
 
188
    ObjectsPresent: DWORD;
 
189
    ObjectType: SE_OBJECT_TYPE;
 
190
    ObjectTypeName: LPSTR;
 
191
    InheritedObjectTypeName: LPSTR;
 
192
    ptstrName: LPSTR;
 
193
  end;
 
194
  {$EXTERNALSYM _OBJECTS_AND_NAME_A}
 
195
  OBJECTS_AND_NAME_A = _OBJECTS_AND_NAME_A;
 
196
  {$EXTERNALSYM OBJECTS_AND_NAME_A}
 
197
  TObjectsAndNameA = OBJECTS_AND_NAME_A;
 
198
  PObjectsAndNameA = POBJECTS_AND_NAME_A;
 
199
 
 
200
  POBJECTS_AND_NAME_W = ^OBJECTS_AND_NAME_W;
 
201
  {$EXTERNALSYM POBJECTS_AND_NAME_W}
 
202
  _OBJECTS_AND_NAME_W = packed record
 
203
    ObjectsPresent: DWORD;
 
204
    ObjectType: SE_OBJECT_TYPE;
 
205
    ObjectTypeName: LPWSTR;
 
206
    InheritedObjectTypeName: LPWSTR;
 
207
    ptstrName: LPWSTR;
 
208
  end;
 
209
  {$EXTERNALSYM _OBJECTS_AND_NAME_W}
 
210
  OBJECTS_AND_NAME_W = _OBJECTS_AND_NAME_W;
 
211
  {$EXTERNALSYM OBJECTS_AND_NAME_W}
 
212
  TObjectsAndNameW = OBJECTS_AND_NAME_W;
 
213
  PObjectsAndNameW = POBJECTS_AND_NAME_W;
 
214
 
 
215
  {$IFDEF UNICODE}
 
216
  OBJECTS_AND_NAME = OBJECTS_AND_NAME_W;
 
217
  {$EXTERNALSYM OBJECTS_AND_NAME}
 
218
  POBJECTS_AND_NAME = POBJECTS_AND_NAME_W;
 
219
  {$EXTERNALSYM POBJECTS_AND_NAME}
 
220
  TObjectsAndName = TObjectsAndNameW;
 
221
  PObjectsAndName = PObjectsAndNameW;
 
222
  {$ELSE}
 
223
  OBJECTS_AND_NAME = OBJECTS_AND_NAME_A;
 
224
  {$EXTERNALSYM OBJECTS_AND_NAME}
 
225
  POBJECTS_AND_NAME = POBJECTS_AND_NAME_A;
 
226
  {$EXTERNALSYM POBJECTS_AND_NAME}
 
227
  TObjectsAndName = TObjectsAndNameA;
 
228
  PObjectsAndName = PObjectsAndNameA;
 
229
  {$ENDIF UNICODE}
 
230
 
 
231
//
 
232
// Definition: TRUSTEE
 
233
// This structure is used to pass account information into and out of the system
 
234
// using the API defined in this document.
 
235
// PMultipleTrustee     - if NON-NULL, points to another trustee structure, as
 
236
//                    defined by the multiple trustee operation field.
 
237
// MultipleTrusteeOperation - Defines the multiple trustee operation/type.
 
238
// TrusteeForm - defines if the trustee is defined by name or SID.
 
239
// TrusteeType - defines if the trustee type is unknown, a user or a group.
 
240
// PwcsName     - points to the trustee name or the trustee SID.
 
241
//
 
242
 
 
243
  PTRUSTEE_A = ^TRUSTEE_A;
 
244
  {$EXTERNALSYM PTRUSTEE_A}
 
245
  _TRUSTEE_A = packed record
 
246
    pMultipleTrustee: PTRUSTEE_A;
 
247
    MultipleTrusteeOperation: MULTIPLE_TRUSTEE_OPERATION;
 
248
    TrusteeForm: TRUSTEE_FORM;
 
249
    TrusteeType: TRUSTEE_TYPE;
 
250
    ptstrName: LPSTR;
 
251
  end;
 
252
  {$EXTERNALSYM _TRUSTEE_A}
 
253
  TRUSTEE_A = _TRUSTEE_A;
 
254
  {$EXTERNALSYM TRUSTEE_A}
 
255
  TRUSTEEA = TRUSTEE_A;
 
256
  {$EXTERNALSYM PTRUSTEEA}
 
257
  PPTRUSTEE_A = ^PTRUSTEE_A;
 
258
  {$NODEFINE PPTRUSTEE_A}
 
259
  TTrusteeA = TRUSTEE_A;
 
260
  PTrusteeA = PTRUSTEE_A;
 
261
 
 
262
  PTRUSTEE_W = ^TRUSTEE_W;
 
263
  {$EXTERNALSYM PTRUSTEE_W}
 
264
  _TRUSTEE_W = packed record
 
265
    pMultipleTrustee: PTRUSTEE_W;
 
266
    MultipleTrusteeOperation: MULTIPLE_TRUSTEE_OPERATION;
 
267
    TrusteeForm: TRUSTEE_FORM;
 
268
    TrusteeType: TRUSTEE_TYPE;
 
269
    ptstrName: LPWSTR;
 
270
  end;
 
271
  {$EXTERNALSYM _TRUSTEE_W}
 
272
  TRUSTEE_W = _TRUSTEE_W;
 
273
  {$EXTERNALSYM TRUSTEE_W}
 
274
  TRUSTEEW = TRUSTEE_W;
 
275
  {$EXTERNALSYM TRUSTEEW}
 
276
  PPTRUSTEE_W = ^PTRUSTEE_W;
 
277
  {$NODEFINE PPTRUSTEE_W}
 
278
  TTrusteeW = TRUSTEE_W;
 
279
  PTrusteeW = PTRUSTEE_W;
 
280
 
 
281
  {$IFDEF UNICODE}
 
282
  TRUSTEE_ = TRUSTEE_W;
 
283
  {$EXTERNALSYM TRUSTEE_}
 
284
  PTRUSTEE_ = PTRUSTEE_W;
 
285
  {$EXTERNALSYM PTRUSTEE_}
 
286
  TRUSTEE = TRUSTEEW;
 
287
  {$EXTERNALSYM TRUSTEE}
 
288
  PPTRUSTEE = ^PPTRUSTEE_W;
 
289
  {$NODEFINE PPTRUSTEE}
 
290
  TTrustee = TTrusteeW;
 
291
  PTrustee = PTrusteeW;
 
292
  {$ELSE}
 
293
  TRUSTEE_ = TRUSTEE_A;
 
294
  {$EXTERNALSYM TRUSTEE_}
 
295
  PTRUSTEE_ = PTRUSTEE_A;
 
296
  {$EXTERNALSYM PTRUSTEE_}
 
297
  TRUSTEE = TRUSTEEA;
 
298
  {$EXTERNALSYM TRUSTEE}
 
299
  PPTRUSTEE = ^PPTRUSTEE_A;
 
300
  {$NODEFINE PPTRUSTEE}
 
301
  TTrustee = TTrusteeA;
 
302
  PTrustee = PTrusteeA;
 
303
  {$ENDIF UNICODE}
 
304
 
 
305
//
 
306
// Definition: ACCESS_MODE
 
307
// This enumerated type specifies how permissions are (requested)/to be applied
 
308
//  for the trustee by the access control entry.  On input this field can by any
 
309
//  of the values, although it is not meaningful to mix access control and audit
 
310
//  control entries.  On output this field will be either SET_ACCESS, DENY_ACCESS,
 
311
// SET_AUDIT_SUCCESS, SET_AUDIT_FAILURE.
 
312
// The following descriptions define how this type effects an explicit access
 
313
// request to apply access permissions to an object.
 
314
// GRANT_ACCESS - The trustee will have at least the requested permissions upon
 
315
//                successful completion of the command. (If the trustee has
 
316
//                additional permissions they will not be removed).
 
317
// SET_ACCESS - The trustee will have exactly the requested permissions upon
 
318
//              successful completion of the command.
 
319
// DENY_ACCESS - The trustee will be denied the specified permissions.
 
320
// REVOKE_ACCESS - Any explicit access rights the trustee has will be revoked.
 
321
// SET_AUDIT_SUCCESS - The trustee will be audited for successful opens of the
 
322
//                     object using the requested permissions.
 
323
// SET_AUDIT_FAILURE - The trustee will be audited for failed opens of the object
 
324
//                     using the requested permissions.
 
325
//
 
326
 
 
327
  _ACCESS_MODE = (
 
328
    NOT_USED_ACCESS,
 
329
    GRANT_ACCESS,
 
330
    SET_ACCESS,
 
331
    DENY_ACCESS,
 
332
    REVOKE_ACCESS,
 
333
    SET_AUDIT_SUCCESS,
 
334
    SET_AUDIT_FAILURE);
 
335
  {$EXTERNALSYM _ACCESS_MODE}
 
336
  ACCESS_MODE = _ACCESS_MODE;
 
337
  {$EXTERNALSYM ACCESS_MODE}
 
338
  TAccessMode = _ACCESS_MODE;
 
339
 
 
340
//
 
341
// Definition: Inheritance flags
 
342
// These bit masks are provided to allow simple application of inheritance in
 
343
// explicit access requests on containers.
 
344
// NO_INHERITANCE       The specific access permissions will only be applied to
 
345
//                  the container, and will not be inherited by objects created
 
346
//                  within the container.
 
347
// SUB_CONTAINERS_ONLY_INHERIT  The specific access permissions will be inherited
 
348
//                              and applied to sub containers created within the
 
349
//                              container, and will be applied to the container
 
350
//                              itself.
 
351
// SUB_OBJECTS_ONLY_INHERIT     The specific access permissions will only be inherited
 
352
//                              by objects created within the specific container.
 
353
//                              The access permissions will not be applied to the
 
354
//                              container itself.
 
355
// SUB_CONTAINERS_AND_OBJECTS_INHERIT   The specific access permissions will be
 
356
//                                      inherited by containers created within the
 
357
//                                      specific container, will be applied to
 
358
//                                      objects created within the container, but
 
359
//                                      will not be applied to the container itself.
 
360
//
 
361
 
 
362
const
 
363
  NO_INHERITANCE                     = $0;
 
364
  {$EXTERNALSYM NO_INHERITANCE}
 
365
  SUB_OBJECTS_ONLY_INHERIT           = $1;
 
366
  {$EXTERNALSYM SUB_OBJECTS_ONLY_INHERIT}
 
367
  SUB_CONTAINERS_ONLY_INHERIT        = $2;
 
368
  {$EXTERNALSYM SUB_CONTAINERS_ONLY_INHERIT}
 
369
  SUB_CONTAINERS_AND_OBJECTS_INHERIT = $3;
 
370
  {$EXTERNALSYM SUB_CONTAINERS_AND_OBJECTS_INHERIT}
 
371
  INHERIT_NO_PROPAGATE               = $4;
 
372
  {$EXTERNALSYM INHERIT_NO_PROPAGATE}
 
373
  INHERIT_ONLY                       = $8;
 
374
  {$EXTERNALSYM INHERIT_ONLY}
 
375
 
 
376
//
 
377
// Informational bit that is returned
 
378
//
 
379
 
 
380
  INHERITED_ACCESS_ENTRY = $10;
 
381
  {$EXTERNALSYM INHERITED_ACCESS_ENTRY}
 
382
 
 
383
//
 
384
// Informational bit that tells where a node was inherited from.  Valid only
 
385
// for NT 5 APIs
 
386
//
 
387
 
 
388
  INHERITED_PARENT      = $10000000;
 
389
  {$EXTERNALSYM INHERITED_PARENT}
 
390
  INHERITED_GRANDPARENT = $20000000;
 
391
  {$EXTERNALSYM INHERITED_GRANDPARENT}
 
392
 
 
393
//
 
394
// Definition: EXPLICIT_ACCESS
 
395
// This structure is used to pass access control entry information into and out
 
396
// of the system using the API defined in this document.
 
397
// grfAccessPermissions - This contains the access permissions to assign for the
 
398
//                     trustee.  It is in the form of an NT access mask.
 
399
// grfAccessMode - This field defines how the permissions are to be applied for
 
400
//                 the trustee.
 
401
// grfInheritance - For containers, this field defines how the access control
 
402
//                  entry is/(is requested) to be inherited on
 
403
//                  objects/sub-containers created within the container.
 
404
// Trustee - This field contains the definition of the trustee account the
 
405
//           explicit access applies to.
 
406
//
 
407
 
 
408
type
 
409
  PEXPLICIT_ACCESS_A = ^EXPLICIT_ACCESS_A;
 
410
  {$EXTERNALSYM PEXPLICIT_ACCESS_A}
 
411
  _EXPLICIT_ACCESS_A = packed record
 
412
    grfAccessPermissions: DWORD;
 
413
    grfAccessMode: ACCESS_MODE;
 
414
    grfInheritance: DWORD;
 
415
    Trustee: TRUSTEE_A;
 
416
  end;
 
417
  {$EXTERNALSYM _EXPLICIT_ACCESS_A}
 
418
  EXPLICIT_ACCESS_A = _EXPLICIT_ACCESS_A;
 
419
  {$EXTERNALSYM EXPLICIT_ACCESS_A}
 
420
  EXPLICIT_ACCESSA = EXPLICIT_ACCESS_A;
 
421
  {$EXTERNALSYM EXPLICIT_ACCESSA}
 
422
  PEXPLICIT_ACCESSA = PEXPLICIT_ACCESS_A;
 
423
  {$EXTERNALSYM PEXPLICIT_ACCESSA}
 
424
  TExplicitAccessA = EXPLICIT_ACCESS_A;
 
425
  PExplicitAccessA = PEXPLICIT_ACCESS_A;
 
426
 
 
427
  PEXPLICIT_ACCESS_W = ^EXPLICIT_ACCESS_W;
 
428
  {$EXTERNALSYM PEXPLICIT_ACCESS_W}
 
429
  _EXPLICIT_ACCESS_W = packed record
 
430
    grfAccessPermissions: DWORD;
 
431
    grfAccessMode: ACCESS_MODE;
 
432
    grfInheritance: DWORD;
 
433
    Trustee: TRUSTEE_W;
 
434
  end;
 
435
  {$EXTERNALSYM _EXPLICIT_ACCESS_W}
 
436
  EXPLICIT_ACCESS_W = _EXPLICIT_ACCESS_W;
 
437
  {$EXTERNALSYM EXPLICIT_ACCESS_W}
 
438
  EXPLICIT_ACCESSW = EXPLICIT_ACCESS_W;
 
439
  {$EXTERNALSYM EXPLICIT_ACCESSW}
 
440
  PEXPLICIT_ACCESSW = PEXPLICIT_ACCESS_W;
 
441
  {$EXTERNALSYM PEXPLICIT_ACCESSW}
 
442
  TExplicitAccessW = EXPLICIT_ACCESS_W;
 
443
  PExplicitAccessW = PEXPLICIT_ACCESS_W;
 
444
 
 
445
  {$IFDEF UNICODE}
 
446
  EXPLICIT_ACCESS_ = EXPLICIT_ACCESS_W;
 
447
  {$EXTERNALSYM EXPLICIT_ACCESS_}
 
448
  PEXPLICIT_ACCESS_ = PEXPLICIT_ACCESS_W;
 
449
  {$EXTERNALSYM PEXPLICIT_ACCESS_}
 
450
  EXPLICIT_ACCESS = EXPLICIT_ACCESSW;
 
451
  {$EXTERNALSYM EXPLICIT_ACCESS}
 
452
  PEXPLICIT_ACCESS = PEXPLICIT_ACCESSW;
 
453
  {$EXTERNALSYM PEXPLICIT_ACCESS}
 
454
  TExplicitAccess = TExplicitAccessW;
 
455
  PExplicitAccess = PExplicitAccessW;
 
456
  {$ELSE}
 
457
  EXPLICIT_ACCESS_ = EXPLICIT_ACCESS_A;
 
458
  {$EXTERNALSYM EXPLICIT_ACCESS_}
 
459
  PEXPLICIT_ACCESS_ = PEXPLICIT_ACCESS_A;
 
460
  {$EXTERNALSYM PEXPLICIT_ACCESS_}
 
461
  EXPLICIT_ACCESS = EXPLICIT_ACCESSA;
 
462
  {$EXTERNALSYM EXPLICIT_ACCESS}
 
463
  PEXPLICIT_ACCESS = PEXPLICIT_ACCESSA;
 
464
  {$EXTERNALSYM PEXPLICIT_ACCESS}
 
465
  TExplicitAccess = TExplicitAccessA;
 
466
  PExplicitAccess = PExplicitAccessA;
 
467
  {$ENDIF UNICODE}
 
468
 
 
469
//------------------------------------------------------------------------------
 
470
//                              NT5 APIs
 
471
//------------------------------------------------------------------------------
 
472
 
 
473
//
 
474
// Default provider
 
475
//
 
476
 
 
477
const
 
478
  ACCCTRL_DEFAULT_PROVIDERA = 'Windows NT Access Provider';
 
479
  {$EXTERNALSYM ACCCTRL_DEFAULT_PROVIDERA}
 
480
  ACCCTRL_DEFAULT_PROVIDERW = 'Windows NT Access Provider';
 
481
  {$EXTERNALSYM ACCCTRL_DEFAULT_PROVIDERW}
 
482
 
 
483
  {$IFDEF UNICODE}
 
484
  ACCCTRL_DEFAULT_PROVIDER = ACCCTRL_DEFAULT_PROVIDERW;
 
485
  {$EXTERNALSYM ACCCTRL_DEFAULT_PROVIDER}
 
486
  {$ELSE}
 
487
  ACCCTRL_DEFAULT_PROVIDER = ACCCTRL_DEFAULT_PROVIDERA;
 
488
  {$EXTERNALSYM ACCCTRL_DEFAULT_PROVIDER}
 
489
  {$ENDIF UNICODE}
 
490
 
 
491
//
 
492
// Access rights
 
493
//
 
494
 
 
495
type
 
496
  ACCESS_RIGHTS = ULONG;
 
497
  {$EXTERNALSYM ACCESS_RIGHTS}
 
498
  PACCESS_RIGHTS = ^ACCESS_RIGHTS;
 
499
  {$EXTERNALSYM PACCESS_RIGHTS}
 
500
 
 
501
//
 
502
// Inheritance flags
 
503
//
 
504
 
 
505
  INHERIT_FLAGS = ULONG;
 
506
  {$EXTERNALSYM INHERIT_FLAGS}
 
507
  PINHERIT_FLAGS = ^INHERIT_FLAGS;
 
508
  {$EXTERNALSYM PINHERIT_FLAGS}
 
509
 
 
510
//
 
511
// Access / Audit structures
 
512
//
 
513
 
 
514
  PACTRL_ACCESS_ENTRYA = ^ACTRL_ACCESS_ENTRYA;
 
515
  {$EXTERNALSYM PACTRL_ACCESS_ENTRYA}
 
516
  _ACTRL_ACCESS_ENTRYA = packed record
 
517
    Trustee: TRUSTEE_A;
 
518
    fAccessFlags: ULONG;
 
519
    Access: ACCESS_RIGHTS;
 
520
    ProvSpecificAccess: ACCESS_RIGHTS;
 
521
    Inheritance: INHERIT_FLAGS;
 
522
    lpInheritProperty: LPSTR;
 
523
  end;
 
524
  {$EXTERNALSYM _ACTRL_ACCESS_ENTRYA}
 
525
  ACTRL_ACCESS_ENTRYA = _ACTRL_ACCESS_ENTRYA;
 
526
  {$EXTERNALSYM ACTRL_ACCESS_ENTRYA}
 
527
  TActrlAccessEntryA = ACTRL_ACCESS_ENTRYA;
 
528
  PActrlAccessEntryA = PACTRL_ACCESS_ENTRYA;
 
529
 
 
530
//
 
531
// Access / Audit structures
 
532
//
 
533
 
 
534
  PACTRL_ACCESS_ENTRYW = ^ACTRL_ACCESS_ENTRYW;
 
535
  {$EXTERNALSYM PACTRL_ACCESS_ENTRYW}
 
536
  _ACTRL_ACCESS_ENTRYW = packed record
 
537
    Trustee: TRUSTEE_W;
 
538
    fAccessFlags: ULONG;
 
539
    Access: ACCESS_RIGHTS;
 
540
    ProvSpecificAccess: ACCESS_RIGHTS;
 
541
    Inheritance: INHERIT_FLAGS;
 
542
    lpInheritProperty: LPWSTR;
 
543
  end;
 
544
  {$EXTERNALSYM _ACTRL_ACCESS_ENTRYW}
 
545
  ACTRL_ACCESS_ENTRYW = _ACTRL_ACCESS_ENTRYW;
 
546
  {$EXTERNALSYM ACTRL_ACCESS_ENTRYW}
 
547
  TActrlAccessEntryW = ACTRL_ACCESS_ENTRYW;
 
548
  PActrlAccessEntryW = PACTRL_ACCESS_ENTRYW;
 
549
 
 
550
  {$IFDEF UNICODE}
 
551
  ACTRL_ACCESS_ENTRY = ACTRL_ACCESS_ENTRYW;
 
552
  {$EXTERNALSYM ACTRL_ACCESS_ENTRY}
 
553
  PACTRL_ACCESS_ENTRY = PACTRL_ACCESS_ENTRYW;
 
554
  {$EXTERNALSYM PACTRL_ACCESS_ENTRY}
 
555
  TActrlAccessEntry = TActrlAccessEntryW;
 
556
  PActrlAccessEntry = PActrlAccessEntryW;
 
557
  {$ELSE}
 
558
  ACTRL_ACCESS_ENTRY = ACTRL_ACCESS_ENTRYA;
 
559
  {$EXTERNALSYM ACTRL_ACCESS_ENTRY}
 
560
  PACTRL_ACCESS_ENTRY = PACTRL_ACCESS_ENTRYA;
 
561
  {$EXTERNALSYM PACTRL_ACCESS_ENTRY}
 
562
  TActrlAccessEntry = TActrlAccessEntryA;
 
563
  PActrlAccessEntry = PActrlAccessEntryA;
 
564
  {$ENDIF UNICODE}
 
565
 
 
566
  PACTRL_ACCESS_ENTRY_LISTA = ^ACTRL_ACCESS_ENTRY_LISTA;
 
567
  {$EXTERNALSYM PACTRL_ACCESS_ENTRY_LISTA}
 
568
  _ACTRL_ACCESS_ENTRY_LISTA = packed record
 
569
    cEntries: ULONG;
 
570
    pAccessList: PACTRL_ACCESS_ENTRYA;
 
571
  end;
 
572
  {$EXTERNALSYM _ACTRL_ACCESS_ENTRY_LISTA}
 
573
  ACTRL_ACCESS_ENTRY_LISTA = _ACTRL_ACCESS_ENTRY_LISTA;
 
574
  {$EXTERNALSYM ACTRL_ACCESS_ENTRY_LISTA}
 
575
  TActrlAccessEntryListA = ACTRL_ACCESS_ENTRY_LISTA;
 
576
  PActrlAccessEntryListA = PACTRL_ACCESS_ENTRY_LISTA;
 
577
 
 
578
  PACTRL_ACCESS_ENTRY_LISTW = ^ACTRL_ACCESS_ENTRY_LISTW;
 
579
  {$EXTERNALSYM PACTRL_ACCESS_ENTRY_LISTW}
 
580
  _ACTRL_ACCESS_ENTRY_LISTW = packed record
 
581
    cEntries: ULONG;
 
582
    pAccessList: PACTRL_ACCESS_ENTRYW;
 
583
  end;
 
584
  {$EXTERNALSYM _ACTRL_ACCESS_ENTRY_LISTW}
 
585
  ACTRL_ACCESS_ENTRY_LISTW = _ACTRL_ACCESS_ENTRY_LISTW;
 
586
  {$EXTERNALSYM ACTRL_ACCESS_ENTRY_LISTW}
 
587
  TActrlAccessEntryListW = ACTRL_ACCESS_ENTRY_LISTW;
 
588
  PActrlAccessEntryListW = PACTRL_ACCESS_ENTRY_LISTW;
 
589
 
 
590
  {$IFDEF UNICODE}
 
591
  ACTRL_ACCESS_ENTRY_LIST = ACTRL_ACCESS_ENTRY_LISTW;
 
592
  {$EXTERNALSYM ACTRL_ACCESS_ENTRY_LIST}
 
593
  PACTRL_ACCESS_ENTRY_LIST = PACTRL_ACCESS_ENTRY_LISTW;
 
594
  {$EXTERNALSYM PACTRL_ACCESS_ENTRY_LIST}
 
595
  TActrlAccessEntryList = TActrlAccessEntryListW;
 
596
  PActrlAccessEntryList = PActrlAccessEntryListW;
 
597
  {$ELSE}
 
598
  ACTRL_ACCESS_ENTRY_LIST = ACTRL_ACCESS_ENTRY_LISTA;
 
599
  {$EXTERNALSYM ACTRL_ACCESS_ENTRY_LIST}
 
600
  PACTRL_ACCESS_ENTRY_LIST = PACTRL_ACCESS_ENTRY_LISTA;
 
601
  {$EXTERNALSYM PACTRL_ACCESS_ENTRY_LIST}
 
602
  TActrlAccessEntryList = TActrlAccessEntryListA;
 
603
  PActrlAccessEntryList = PActrlAccessEntryListA;
 
604
  {$ENDIF UNICODE}
 
605
 
 
606
  PACTRL_PROPERTY_ENTRYA = ^ACTRL_PROPERTY_ENTRYA;
 
607
  {$EXTERNALSYM PACTRL_PROPERTY_ENTRYA}
 
608
  _ACTRL_PROPERTY_ENTRYA = packed record
 
609
    lpProperty: LPSTR;
 
610
    pAccessEntryList: PACTRL_ACCESS_ENTRY_LISTA;
 
611
    fListFlags: ULONG;
 
612
  end;
 
613
  {$EXTERNALSYM _ACTRL_PROPERTY_ENTRYA}
 
614
  ACTRL_PROPERTY_ENTRYA = _ACTRL_PROPERTY_ENTRYA;
 
615
  {$EXTERNALSYM ACTRL_PROPERTY_ENTRYA}
 
616
  TActrlPropertyEntryA = ACTRL_PROPERTY_ENTRYA;
 
617
  PActrlPropertyEntryA = PACTRL_PROPERTY_ENTRYA;
 
618
 
 
619
  PACTRL_PROPERTY_ENTRYW = ^ACTRL_PROPERTY_ENTRYW;
 
620
  {$EXTERNALSYM PACTRL_PROPERTY_ENTRYW}
 
621
  _ACTRL_PROPERTY_ENTRYW = packed record
 
622
    lpProperty: LPWSTR;
 
623
    pAccessEntryList: PACTRL_ACCESS_ENTRY_LISTW;
 
624
    fListFlags: ULONG;
 
625
  end;
 
626
  {$EXTERNALSYM _ACTRL_PROPERTY_ENTRYW}
 
627
  ACTRL_PROPERTY_ENTRYW = _ACTRL_PROPERTY_ENTRYW;
 
628
  {$EXTERNALSYM ACTRL_PROPERTY_ENTRYW}
 
629
  TActrlPropertyEntryW = ACTRL_PROPERTY_ENTRYW;
 
630
  PActrlPropertyEntryW = PACTRL_PROPERTY_ENTRYW;
 
631
 
 
632
  {$IFDEF UNICODE}
 
633
  ACTRL_PROPERTY_ENTRY = ACTRL_PROPERTY_ENTRYW;
 
634
  {$EXTERNALSYM ACTRL_PROPERTY_ENTRY}
 
635
  PACTRL_PROPERTY_ENTRY = PACTRL_PROPERTY_ENTRYW;
 
636
  {$EXTERNALSYM PACTRL_PROPERTY_ENTRY}
 
637
  TActrlPropertyEntry = TActrlPropertyEntryW;
 
638
  PActrlPropertyEntry = PActrlPropertyEntryW;
 
639
  {$ELSE}
 
640
  ACTRL_PROPERTY_ENTRY = ACTRL_PROPERTY_ENTRYA;
 
641
  {$EXTERNALSYM ACTRL_PROPERTY_ENTRY}
 
642
  PACTRL_PROPERTY_ENTRY = PACTRL_PROPERTY_ENTRYA;
 
643
  {$EXTERNALSYM PACTRL_PROPERTY_ENTRY}
 
644
  TActrlPropertyEntry = TActrlPropertyEntryA;
 
645
  PActrlPropertyEntry = PActrlPropertyEntryA;
 
646
  {$ENDIF UNICODE}
 
647
 
 
648
  PActrlAlistA = ^TActrlAlistA;
 
649
  _ACTRL_ALISTA = packed record
 
650
    cEntries: ULONG;
 
651
    pPropertyAccessList: PACTRL_PROPERTY_ENTRYA;
 
652
  end;
 
653
  {$EXTERNALSYM _ACTRL_ALISTA}
 
654
  ACTRL_ACCESSA = _ACTRL_ALISTA;
 
655
  {$EXTERNALSYM ACTRL_ACCESSA}
 
656
  PACTRL_ACCESSA = ^_ACTRL_ALISTA;
 
657
  {$EXTERNALSYM PACTRL_ACCESSA}
 
658
  ACTRL_AUDITA = ACTRL_ACCESSA;
 
659
  {$EXTERNALSYM ACTRL_AUDITA}
 
660
  PACTRL_AUDITA = ^ACTRL_AUDITA;
 
661
  {$EXTERNALSYM PACTRL_AUDITA}
 
662
  TActrlAlistA = _ACTRL_ALISTA;
 
663
 
 
664
  PActrlAlistW = ^TActrlAlistW;
 
665
  _ACTRL_ALISTW = packed record
 
666
    cEntries: ULONG;
 
667
    pPropertyAccessList: PACTRL_PROPERTY_ENTRYW;
 
668
  end;
 
669
  {$EXTERNALSYM _ACTRL_ALISTW}
 
670
  ACTRL_ACCESSW = _ACTRL_ALISTW;
 
671
  {$EXTERNALSYM ACTRL_ACCESSW}
 
672
  PACTRL_ACCESSW = ^_ACTRL_ALISTW;
 
673
  {$EXTERNALSYM PACTRL_ACCESSW}
 
674
  ACTRL_AUDITW = ACTRL_ACCESSW;
 
675
  {$EXTERNALSYM ACTRL_AUDITW}
 
676
  PACTRL_AUDITW = ^ACTRL_AUDITW;
 
677
  {$EXTERNALSYM PACTRL_AUDITW}
 
678
  TActrlAlistW = _ACTRL_ALISTW;
 
679
 
 
680
  {$IFDEF UNICODE}
 
681
  ACTRL_ACCESS = ACTRL_ACCESSW;
 
682
  {$EXTERNALSYM ACTRL_ACCESS}
 
683
  PACTRL_ACCESS = PACTRL_ACCESSW;
 
684
  {$EXTERNALSYM PACTRL_ACCESS}
 
685
  ACTRL_AUDIT = ACTRL_AUDITW;
 
686
  {$EXTERNALSYM ACTRL_AUDIT}
 
687
  PACTRL_AUDIT = PACTRL_AUDITW;
 
688
  {$EXTERNALSYM PACTRL_AUDIT}
 
689
  TActrlAlist = TActrlAlistW;
 
690
  PActrlAlist = PActrlAlistW;
 
691
  {$ELSE}
 
692
  ACTRL_ACCESS = ACTRL_ACCESSA;
 
693
  {$EXTERNALSYM ACTRL_ACCESS}
 
694
  PACTRL_ACCESS = PACTRL_ACCESSA;
 
695
  {$EXTERNALSYM PACTRL_ACCESS}
 
696
  ACTRL_AUDIT = ACTRL_AUDITA;
 
697
  {$EXTERNALSYM ACTRL_AUDIT}
 
698
  PACTRL_AUDIT = PACTRL_AUDITA;
 
699
  {$EXTERNALSYM PACTRL_AUDIT}
 
700
  TActrlAlist = TActrlAlistA;
 
701
  PActrlAlist = PActrlAlistA;
 
702
  {$ENDIF UNICODE}
 
703
 
 
704
//
 
705
// TRUSTEE_ACCESS flags
 
706
//
 
707
 
 
708
const
 
709
  TRUSTEE_ACCESS_ALLOWED    = $00000001;
 
710
  {$EXTERNALSYM TRUSTEE_ACCESS_ALLOWED}
 
711
  TRUSTEE_ACCESS_READ       = $00000002;
 
712
  {$EXTERNALSYM TRUSTEE_ACCESS_READ}
 
713
  TRUSTEE_ACCESS_WRITE      = $00000004;
 
714
  {$EXTERNALSYM TRUSTEE_ACCESS_WRITE}
 
715
 
 
716
  TRUSTEE_ACCESS_EXPLICIT   = $00000001;
 
717
  {$EXTERNALSYM TRUSTEE_ACCESS_EXPLICIT}
 
718
  TRUSTEE_ACCESS_READ_WRITE = TRUSTEE_ACCESS_READ or TRUSTEE_ACCESS_WRITE;
 
719
  {$EXTERNALSYM TRUSTEE_ACCESS_READ_WRITE}
 
720
 
 
721
  TRUSTEE_ACCESS_ALL = DWORD($FFFFFFFF);
 
722
  {$EXTERNALSYM TRUSTEE_ACCESS_ALL}
 
723
 
 
724
type
 
725
  PTRUSTEE_ACCESSA = ^TRUSTEE_ACCESSA;
 
726
  {$EXTERNALSYM PTRUSTEE_ACCESSA}
 
727
  _TRUSTEE_ACCESSA = packed record
 
728
    lpProperty: LPSTR;
 
729
    Access: ACCESS_RIGHTS;
 
730
    fAccessFlags: ULONG;
 
731
    fReturnedAccess: ULONG;
 
732
  end;
 
733
  {$EXTERNALSYM _TRUSTEE_ACCESSA}
 
734
  TRUSTEE_ACCESSA = _TRUSTEE_ACCESSA;
 
735
  {$EXTERNALSYM TRUSTEE_ACCESSA}
 
736
  TTrusteeAccessA = TRUSTEE_ACCESSA;
 
737
  PTrusteeAccessA = PTRUSTEE_ACCESSA;
 
738
 
 
739
  PTRUSTEE_ACCESSW = ^TRUSTEE_ACCESSW;
 
740
  {$EXTERNALSYM PTRUSTEE_ACCESSW}
 
741
  _TRUSTEE_ACCESSW = packed record
 
742
    lpProperty: LPWSTR;
 
743
    Access: ACCESS_RIGHTS;
 
744
    fAccessFlags: ULONG;
 
745
    fReturnedAccess: ULONG;
 
746
  end;
 
747
  {$EXTERNALSYM _TRUSTEE_ACCESSW}
 
748
  TRUSTEE_ACCESSW = _TRUSTEE_ACCESSW;
 
749
  {$EXTERNALSYM TRUSTEE_ACCESSW}
 
750
  TTrusteeAccessW = TRUSTEE_ACCESSW;
 
751
  PTrusteeAccessW = PTRUSTEE_ACCESSW;
 
752
 
 
753
  {$IFDEF UNICODE}
 
754
  TRUSTEE_ACCESS = TRUSTEE_ACCESSW;
 
755
  {$EXTERNALSYM TRUSTEE_ACCESS}
 
756
  PTRUSTEE_ACCESS = PTRUSTEE_ACCESSW;
 
757
  {$EXTERNALSYM PTRUSTEE_ACCESS}
 
758
  TTrusteeAccess = TTrusteeAccessW;
 
759
  PTrusteeAccess = PTrusteeAccessW;
 
760
  {$ELSE}
 
761
  TRUSTEE_ACCESS = TRUSTEE_ACCESSA;
 
762
  {$EXTERNALSYM TRUSTEE_ACCESS}
 
763
  PTRUSTEE_ACCESS = PTRUSTEE_ACCESSA;
 
764
  {$EXTERNALSYM PTRUSTEE_ACCESS}
 
765
  TTrusteeAccess = TTrusteeAccessA;
 
766
  PTrusteeAccess = PTrusteeAccessA;
 
767
  {$ENDIF UNICODE}
 
768
 
 
769
//
 
770
// Generic permission values
 
771
//
 
772
 
 
773
const
 
774
  ACTRL_RESERVED = $00000000;
 
775
  {$EXTERNALSYM ACTRL_RESERVED}
 
776
  ACTRL_PERM_1   = $00000001;
 
777
  {$EXTERNALSYM ACTRL_PERM_1}
 
778
  ACTRL_PERM_2   = $00000002;
 
779
  {$EXTERNALSYM ACTRL_PERM_2}
 
780
  ACTRL_PERM_3   = $00000004;
 
781
  {$EXTERNALSYM ACTRL_PERM_3}
 
782
  ACTRL_PERM_4   = $00000008;
 
783
  {$EXTERNALSYM ACTRL_PERM_4}
 
784
  ACTRL_PERM_5   = $00000010;
 
785
  {$EXTERNALSYM ACTRL_PERM_5}
 
786
  ACTRL_PERM_6   = $00000020;
 
787
  {$EXTERNALSYM ACTRL_PERM_6}
 
788
  ACTRL_PERM_7   = $00000040;
 
789
  {$EXTERNALSYM ACTRL_PERM_7}
 
790
  ACTRL_PERM_8   = $00000080;
 
791
  {$EXTERNALSYM ACTRL_PERM_8}
 
792
  ACTRL_PERM_9   = $00000100;
 
793
  {$EXTERNALSYM ACTRL_PERM_9}
 
794
  ACTRL_PERM_10  = $00000200;
 
795
  {$EXTERNALSYM ACTRL_PERM_10}
 
796
  ACTRL_PERM_11  = $00000400;
 
797
  {$EXTERNALSYM ACTRL_PERM_11}
 
798
  ACTRL_PERM_12  = $00000800;
 
799
  {$EXTERNALSYM ACTRL_PERM_12}
 
800
  ACTRL_PERM_13  = $00001000;
 
801
  {$EXTERNALSYM ACTRL_PERM_13}
 
802
  ACTRL_PERM_14  = $00002000;
 
803
  {$EXTERNALSYM ACTRL_PERM_14}
 
804
  ACTRL_PERM_15  = $00004000;
 
805
  {$EXTERNALSYM ACTRL_PERM_15}
 
806
  ACTRL_PERM_16  = $00008000;
 
807
  {$EXTERNALSYM ACTRL_PERM_16}
 
808
  ACTRL_PERM_17  = $00010000;
 
809
  {$EXTERNALSYM ACTRL_PERM_17}
 
810
  ACTRL_PERM_18  = $00020000;
 
811
  {$EXTERNALSYM ACTRL_PERM_18}
 
812
  ACTRL_PERM_19  = $00040000;
 
813
  {$EXTERNALSYM ACTRL_PERM_19}
 
814
  ACTRL_PERM_20  = $00080000;
 
815
  {$EXTERNALSYM ACTRL_PERM_20}
 
816
 
 
817
//
 
818
// Access permissions
 
819
//
 
820
 
 
821
  ACTRL_ACCESS_ALLOWED = $00000001;
 
822
  {$EXTERNALSYM ACTRL_ACCESS_ALLOWED}
 
823
  ACTRL_ACCESS_DENIED  = $00000002;
 
824
  {$EXTERNALSYM ACTRL_ACCESS_DENIED}
 
825
  ACTRL_AUDIT_SUCCESS  = $00000004;
 
826
  {$EXTERNALSYM ACTRL_AUDIT_SUCCESS}
 
827
  ACTRL_AUDIT_FAILURE  = $00000008;
 
828
  {$EXTERNALSYM ACTRL_AUDIT_FAILURE}
 
829
 
 
830
//
 
831
// Property list flags
 
832
//
 
833
 
 
834
  ACTRL_ACCESS_PROTECTED = $00000001;
 
835
  {$EXTERNALSYM ACTRL_ACCESS_PROTECTED}
 
836
 
 
837
//
 
838
// Standard and object rights
 
839
//
 
840
 
 
841
  ACTRL_SYSTEM_ACCESS      = $04000000;
 
842
  {$EXTERNALSYM ACTRL_SYSTEM_ACCESS}
 
843
  ACTRL_DELETE             = $08000000;
 
844
  {$EXTERNALSYM ACTRL_DELETE}
 
845
  ACTRL_READ_CONTROL       = $10000000;
 
846
  {$EXTERNALSYM ACTRL_READ_CONTROL}
 
847
  ACTRL_CHANGE_ACCESS      = $20000000;
 
848
  {$EXTERNALSYM ACTRL_CHANGE_ACCESS}
 
849
  ACTRL_CHANGE_OWNER       = $40000000;
 
850
  {$EXTERNALSYM ACTRL_CHANGE_OWNER}
 
851
  ACTRL_SYNCHRONIZE        = DWORD($80000000);
 
852
  {$EXTERNALSYM ACTRL_SYNCHRONIZE}
 
853
  ACTRL_STD_RIGHTS_ALL     = DWORD($f8000000);
 
854
  {$EXTERNALSYM ACTRL_STD_RIGHTS_ALL}
 
855
  ACTRL_STD_RIGHT_REQUIRED = DWORD(ACTRL_STD_RIGHTS_ALL and not ACTRL_SYNCHRONIZE);
 
856
  {$EXTERNALSYM ACTRL_STD_RIGHT_REQUIRED}
 
857
 
 
858
  ACTRL_DS_OPEN           = ACTRL_RESERVED;
 
859
  {$EXTERNALSYM ACTRL_DS_OPEN}
 
860
  ACTRL_DS_CREATE_CHILD   = ACTRL_PERM_1;
 
861
  {$EXTERNALSYM ACTRL_DS_CREATE_CHILD}
 
862
  ACTRL_DS_DELETE_CHILD   = ACTRL_PERM_2;
 
863
  {$EXTERNALSYM ACTRL_DS_DELETE_CHILD}
 
864
  ACTRL_DS_LIST           = ACTRL_PERM_3;
 
865
  {$EXTERNALSYM ACTRL_DS_LIST}
 
866
  ACTRL_DS_SELF           = ACTRL_PERM_4;
 
867
  {$EXTERNALSYM ACTRL_DS_SELF}
 
868
  ACTRL_DS_READ_PROP      = ACTRL_PERM_5;
 
869
  {$EXTERNALSYM ACTRL_DS_READ_PROP}
 
870
  ACTRL_DS_WRITE_PROP     = ACTRL_PERM_6;
 
871
  {$EXTERNALSYM ACTRL_DS_WRITE_PROP}
 
872
  ACTRL_DS_DELETE_TREE    = ACTRL_PERM_7;
 
873
  {$EXTERNALSYM ACTRL_DS_DELETE_TREE}
 
874
  ACTRL_DS_LIST_OBJECT    = ACTRL_PERM_8;
 
875
  {$EXTERNALSYM ACTRL_DS_LIST_OBJECT}
 
876
  ACTRL_DS_CONTROL_ACCESS = ACTRL_PERM_9;
 
877
  {$EXTERNALSYM ACTRL_DS_CONTROL_ACCESS}
 
878
 
 
879
  ACTRL_FILE_READ           = ACTRL_PERM_1;
 
880
  {$EXTERNALSYM ACTRL_FILE_READ}
 
881
  ACTRL_FILE_WRITE          = ACTRL_PERM_2;
 
882
  {$EXTERNALSYM ACTRL_FILE_WRITE}
 
883
  ACTRL_FILE_APPEND         = ACTRL_PERM_3;
 
884
  {$EXTERNALSYM ACTRL_FILE_APPEND}
 
885
  ACTRL_FILE_READ_PROP      = ACTRL_PERM_4;
 
886
  {$EXTERNALSYM ACTRL_FILE_READ_PROP}
 
887
  ACTRL_FILE_WRITE_PROP     = ACTRL_PERM_5;
 
888
  {$EXTERNALSYM ACTRL_FILE_WRITE_PROP}
 
889
  ACTRL_FILE_EXECUTE        = ACTRL_PERM_6;
 
890
  {$EXTERNALSYM ACTRL_FILE_EXECUTE}
 
891
  ACTRL_FILE_READ_ATTRIB    = ACTRL_PERM_8;
 
892
  {$EXTERNALSYM ACTRL_FILE_READ_ATTRIB}
 
893
  ACTRL_FILE_WRITE_ATTRIB   = ACTRL_PERM_9;
 
894
  {$EXTERNALSYM ACTRL_FILE_WRITE_ATTRIB}
 
895
  ACTRL_FILE_CREATE_PIPE    = ACTRL_PERM_10;
 
896
  {$EXTERNALSYM ACTRL_FILE_CREATE_PIPE}
 
897
  ACTRL_DIR_LIST            = ACTRL_PERM_1;
 
898
  {$EXTERNALSYM ACTRL_DIR_LIST}
 
899
  ACTRL_DIR_CREATE_OBJECT   = ACTRL_PERM_2;
 
900
  {$EXTERNALSYM ACTRL_DIR_CREATE_OBJECT}
 
901
  ACTRL_DIR_CREATE_CHILD    = ACTRL_PERM_3;
 
902
  {$EXTERNALSYM ACTRL_DIR_CREATE_CHILD}
 
903
  ACTRL_DIR_DELETE_CHILD    = ACTRL_PERM_7;
 
904
  {$EXTERNALSYM ACTRL_DIR_DELETE_CHILD}
 
905
  ACTRL_DIR_TRAVERSE        = ACTRL_PERM_6;
 
906
  {$EXTERNALSYM ACTRL_DIR_TRAVERSE}
 
907
  ACTRL_KERNEL_TERMINATE    = ACTRL_PERM_1;
 
908
  {$EXTERNALSYM ACTRL_KERNEL_TERMINATE}
 
909
  ACTRL_KERNEL_THREAD       = ACTRL_PERM_2;
 
910
  {$EXTERNALSYM ACTRL_KERNEL_THREAD}
 
911
  ACTRL_KERNEL_VM           = ACTRL_PERM_3;
 
912
  {$EXTERNALSYM ACTRL_KERNEL_VM}
 
913
  ACTRL_KERNEL_VM_READ      = ACTRL_PERM_4;
 
914
  {$EXTERNALSYM ACTRL_KERNEL_VM_READ}
 
915
  ACTRL_KERNEL_VM_WRITE     = ACTRL_PERM_5;
 
916
  {$EXTERNALSYM ACTRL_KERNEL_VM_WRITE}
 
917
  ACTRL_KERNEL_DUP_HANDLE   = ACTRL_PERM_6;
 
918
  {$EXTERNALSYM ACTRL_KERNEL_DUP_HANDLE}
 
919
  ACTRL_KERNEL_PROCESS      = ACTRL_PERM_7;
 
920
  {$EXTERNALSYM ACTRL_KERNEL_PROCESS}
 
921
  ACTRL_KERNEL_SET_INFO     = ACTRL_PERM_8;
 
922
  {$EXTERNALSYM ACTRL_KERNEL_SET_INFO}
 
923
  ACTRL_KERNEL_GET_INFO     = ACTRL_PERM_9;
 
924
  {$EXTERNALSYM ACTRL_KERNEL_GET_INFO}
 
925
  ACTRL_KERNEL_CONTROL      = ACTRL_PERM_10;
 
926
  {$EXTERNALSYM ACTRL_KERNEL_CONTROL}
 
927
  ACTRL_KERNEL_ALERT        = ACTRL_PERM_11;
 
928
  {$EXTERNALSYM ACTRL_KERNEL_ALERT}
 
929
  ACTRL_KERNEL_GET_CONTEXT  = ACTRL_PERM_12;
 
930
  {$EXTERNALSYM ACTRL_KERNEL_GET_CONTEXT}
 
931
  ACTRL_KERNEL_SET_CONTEXT  = ACTRL_PERM_13;
 
932
  {$EXTERNALSYM ACTRL_KERNEL_SET_CONTEXT}
 
933
  ACTRL_KERNEL_TOKEN        = ACTRL_PERM_14;
 
934
  {$EXTERNALSYM ACTRL_KERNEL_TOKEN}
 
935
  ACTRL_KERNEL_IMPERSONATE  = ACTRL_PERM_15;
 
936
  {$EXTERNALSYM ACTRL_KERNEL_IMPERSONATE}
 
937
  ACTRL_KERNEL_DIMPERSONATE = ACTRL_PERM_16;
 
938
  {$EXTERNALSYM ACTRL_KERNEL_DIMPERSONATE}
 
939
  ACTRL_PRINT_SADMIN        = ACTRL_PERM_1;
 
940
  {$EXTERNALSYM ACTRL_PRINT_SADMIN}
 
941
  ACTRL_PRINT_SLIST         = ACTRL_PERM_2;
 
942
  {$EXTERNALSYM ACTRL_PRINT_SLIST}
 
943
  ACTRL_PRINT_PADMIN        = ACTRL_PERM_3;
 
944
  {$EXTERNALSYM ACTRL_PRINT_PADMIN}
 
945
  ACTRL_PRINT_PUSE          = ACTRL_PERM_4;
 
946
  {$EXTERNALSYM ACTRL_PRINT_PUSE}
 
947
  ACTRL_PRINT_JADMIN        = ACTRL_PERM_5;
 
948
  {$EXTERNALSYM ACTRL_PRINT_JADMIN}
 
949
  ACTRL_SVC_GET_INFO        = ACTRL_PERM_1;
 
950
  {$EXTERNALSYM ACTRL_SVC_GET_INFO}
 
951
  ACTRL_SVC_SET_INFO        = ACTRL_PERM_2;
 
952
  {$EXTERNALSYM ACTRL_SVC_SET_INFO}
 
953
  ACTRL_SVC_STATUS          = ACTRL_PERM_3;
 
954
  {$EXTERNALSYM ACTRL_SVC_STATUS}
 
955
  ACTRL_SVC_LIST            = ACTRL_PERM_4;
 
956
  {$EXTERNALSYM ACTRL_SVC_LIST}
 
957
  ACTRL_SVC_START           = ACTRL_PERM_5;
 
958
  {$EXTERNALSYM ACTRL_SVC_START}
 
959
  ACTRL_SVC_STOP            = ACTRL_PERM_6;
 
960
  {$EXTERNALSYM ACTRL_SVC_STOP}
 
961
  ACTRL_SVC_PAUSE           = ACTRL_PERM_7;
 
962
  {$EXTERNALSYM ACTRL_SVC_PAUSE}
 
963
  ACTRL_SVC_INTERROGATE     = ACTRL_PERM_8;
 
964
  {$EXTERNALSYM ACTRL_SVC_INTERROGATE}
 
965
  ACTRL_SVC_UCONTROL        = ACTRL_PERM_9;
 
966
  {$EXTERNALSYM ACTRL_SVC_UCONTROL}
 
967
  ACTRL_REG_QUERY           = ACTRL_PERM_1;
 
968
  {$EXTERNALSYM ACTRL_REG_QUERY}
 
969
  ACTRL_REG_SET             = ACTRL_PERM_2;
 
970
  {$EXTERNALSYM ACTRL_REG_SET}
 
971
  ACTRL_REG_CREATE_CHILD    = ACTRL_PERM_3;
 
972
  {$EXTERNALSYM ACTRL_REG_CREATE_CHILD}
 
973
  ACTRL_REG_LIST            = ACTRL_PERM_4;
 
974
  {$EXTERNALSYM ACTRL_REG_LIST}
 
975
  ACTRL_REG_NOTIFY          = ACTRL_PERM_5;
 
976
  {$EXTERNALSYM ACTRL_REG_NOTIFY}
 
977
  ACTRL_REG_LINK            = ACTRL_PERM_6;
 
978
  {$EXTERNALSYM ACTRL_REG_LINK}
 
979
  ACTRL_WIN_CLIPBRD         = ACTRL_PERM_1;
 
980
  {$EXTERNALSYM ACTRL_WIN_CLIPBRD}
 
981
  ACTRL_WIN_GLOBAL_ATOMS    = ACTRL_PERM_2;
 
982
  {$EXTERNALSYM ACTRL_WIN_GLOBAL_ATOMS}
 
983
  ACTRL_WIN_CREATE          = ACTRL_PERM_3;
 
984
  {$EXTERNALSYM ACTRL_WIN_CREATE}
 
985
  ACTRL_WIN_LIST_DESK       = ACTRL_PERM_4;
 
986
  {$EXTERNALSYM ACTRL_WIN_LIST_DESK}
 
987
  ACTRL_WIN_LIST            = ACTRL_PERM_5;
 
988
  {$EXTERNALSYM ACTRL_WIN_LIST}
 
989
  ACTRL_WIN_READ_ATTRIBS    = ACTRL_PERM_6;
 
990
  {$EXTERNALSYM ACTRL_WIN_READ_ATTRIBS}
 
991
  ACTRL_WIN_WRITE_ATTRIBS   = ACTRL_PERM_7;
 
992
  {$EXTERNALSYM ACTRL_WIN_WRITE_ATTRIBS}
 
993
  ACTRL_WIN_SCREEN          = ACTRL_PERM_8;
 
994
  {$EXTERNALSYM ACTRL_WIN_SCREEN}
 
995
  ACTRL_WIN_EXIT            = ACTRL_PERM_9;
 
996
  {$EXTERNALSYM ACTRL_WIN_EXIT}
 
997
 
 
998
type
 
999
  PACTRL_OVERLAPPED = ^ACTRL_OVERLAPPED;
 
1000
  {$EXTERNALSYM PACTRL_OVERLAPPED}
 
1001
  _ACTRL_OVERLAPPED = packed record
 
1002
    //union {
 
1003
    Provider: PVOID;
 
1004
    //    ULONG Reserved1;
 
1005
    //};
 
1006
    Reserved2: ULONG;
 
1007
    hEvent: HANDLE;
 
1008
  end;
 
1009
  {$EXTERNALSYM _ACTRL_OVERLAPPED}
 
1010
  ACTRL_OVERLAPPED = _ACTRL_OVERLAPPED;
 
1011
  {$EXTERNALSYM ACTRL_OVERLAPPED}
 
1012
  TActrlOverlapped = ACTRL_OVERLAPPED;
 
1013
  PActrlOverlapped = PACTRL_OVERLAPPED;
 
1014
 
 
1015
  PACTRL_ACCESS_INFOA = ^ACTRL_ACCESS_INFOA;
 
1016
  {$EXTERNALSYM PACTRL_ACCESS_INFOA}
 
1017
  _ACTRL_ACCESS_INFOA = packed record
 
1018
    fAccessPermission: ULONG;
 
1019
    lpAccessPermissionName: LPSTR;
 
1020
  end;
 
1021
  {$EXTERNALSYM _ACTRL_ACCESS_INFOA}
 
1022
  ACTRL_ACCESS_INFOA = _ACTRL_ACCESS_INFOA;
 
1023
  {$EXTERNALSYM ACTRL_ACCESS_INFOA}
 
1024
  TActrlAccessInfoA = ACTRL_ACCESS_INFOA;
 
1025
  PActrlAccessInfoA = PACTRL_ACCESS_INFOA;
 
1026
 
 
1027
  PACTRL_ACCESS_INFOW = ^ACTRL_ACCESS_INFOW;
 
1028
  {$EXTERNALSYM PACTRL_ACCESS_INFOW}
 
1029
  _ACTRL_ACCESS_INFOW = packed record
 
1030
    fAccessPermission: ULONG;
 
1031
    lpAccessPermissionName: LPWSTR;
 
1032
  end;
 
1033
  {$EXTERNALSYM _ACTRL_ACCESS_INFOW}
 
1034
  ACTRL_ACCESS_INFOW = _ACTRL_ACCESS_INFOW;
 
1035
  {$EXTERNALSYM ACTRL_ACCESS_INFOW}
 
1036
  TActrlAccessInfoW = ACTRL_ACCESS_INFOW;
 
1037
  PActrlAccessInfoW = PACTRL_ACCESS_INFOW;
 
1038
 
 
1039
  {$IFDEF UNICODE}
 
1040
  ACTRL_ACCESS_INFO = ACTRL_ACCESS_INFOW;
 
1041
  {$EXTERNALSYM ACTRL_ACCESS_INFO}
 
1042
  PACTRL_ACCESS_INFO = PACTRL_ACCESS_INFOW;
 
1043
  {$EXTERNALSYM PACTRL_ACCESS_INFO}
 
1044
  TActrlAccessInfo = TActrlAccessInfoW;
 
1045
  PActrlAccessInfo = PActrlAccessInfoW;
 
1046
  {$ELSE}
 
1047
  ACTRL_ACCESS_INFO = ACTRL_ACCESS_INFOA;
 
1048
  {$EXTERNALSYM ACTRL_ACCESS_INFO}
 
1049
  PACTRL_ACCESS_INFO = PACTRL_ACCESS_INFOA;
 
1050
  {$EXTERNALSYM PACTRL_ACCESS_INFO}
 
1051
  TActrlAccessInfo = TActrlAccessInfoA;
 
1052
  PActrlAccessInfo = PActrlAccessInfoA;
 
1053
  {$ENDIF UNICODE}
 
1054
 
 
1055
  PACTRL_CONTROL_INFOA = ^ACTRL_CONTROL_INFOA;
 
1056
  {$EXTERNALSYM PACTRL_CONTROL_INFOA}
 
1057
  _ACTRL_CONTROL_INFOA = packed record
 
1058
    lpControlId: LPSTR;
 
1059
    lpControlName: LPSTR;
 
1060
  end;
 
1061
  {$EXTERNALSYM _ACTRL_CONTROL_INFOA}
 
1062
  ACTRL_CONTROL_INFOA = _ACTRL_CONTROL_INFOA;
 
1063
  {$EXTERNALSYM ACTRL_CONTROL_INFOA}
 
1064
  TActrlControlInfoA = ACTRL_CONTROL_INFOA;
 
1065
  PActrlControlInfoA = PACTRL_CONTROL_INFOA;
 
1066
 
 
1067
  PACTRL_CONTROL_INFOW = ^ACTRL_CONTROL_INFOW;
 
1068
  {$EXTERNALSYM PACTRL_CONTROL_INFOW}
 
1069
  _ACTRL_CONTROL_INFOW = packed record
 
1070
    lpControlId: LPWSTR;
 
1071
    lpControlName: LPWSTR;
 
1072
  end;
 
1073
  {$EXTERNALSYM _ACTRL_CONTROL_INFOW}
 
1074
  ACTRL_CONTROL_INFOW = _ACTRL_CONTROL_INFOW;
 
1075
  {$EXTERNALSYM ACTRL_CONTROL_INFOW}
 
1076
  TActrlControlInfoW = ACTRL_CONTROL_INFOW;
 
1077
  PActrlControlInfoW = PACTRL_CONTROL_INFOW;
 
1078
 
 
1079
  {$IFDEF UNICODE}
 
1080
  ACTRL_CONTROL_INFO = ACTRL_CONTROL_INFOW;
 
1081
  {$EXTERNALSYM ACTRL_CONTROL_INFO}
 
1082
  PACTRL_CONTROL_INFO = PACTRL_CONTROL_INFOW;
 
1083
  {$EXTERNALSYM PACTRL_CONTROL_INFO}
 
1084
  TActrlControlInfo = TActrlControlInfoW;
 
1085
  PActrlControlInfo = PActrlControlInfoW;
 
1086
  {$ELSE}
 
1087
  ACTRL_CONTROL_INFO = ACTRL_CONTROL_INFOA;
 
1088
  {$EXTERNALSYM ACTRL_CONTROL_INFO}
 
1089
  PACTRL_CONTROL_INFO = PACTRL_CONTROL_INFOA;
 
1090
  {$EXTERNALSYM PACTRL_CONTROL_INFO}
 
1091
  TActrlControlInfo = TActrlControlInfoA;
 
1092
  PActrlControlInfo = PActrlControlInfoA;
 
1093
  {$ENDIF UNICODE}
 
1094
 
 
1095
const
 
1096
  ACTRL_ACCESS_NO_OPTIONS              = $00000000;
 
1097
  {$EXTERNALSYM ACTRL_ACCESS_NO_OPTIONS}
 
1098
  ACTRL_ACCESS_SUPPORTS_OBJECT_ENTRIES = $00000001;
 
1099
  {$EXTERNALSYM ACTRL_ACCESS_SUPPORTS_OBJECT_ENTRIES}
 
1100
 
 
1101
  ProgressInvokeNever = 1;        // Never invoke the progress function
 
1102
  {$EXTERNALSYM ProgressInvokeNever}
 
1103
  ProgressInvokeEveryObject = 2;  // Invoke for each object
 
1104
  {$EXTERNALSYM ProgressInvokeEveryObject}
 
1105
  ProgressInvokeOnError = 3;      // Invoke only for each error case
 
1106
  {$EXTERNALSYM ProgressInvokeOnError}
 
1107
  ProgressCancelOperation = 4;    // Stop propagation and return
 
1108
  {$EXTERNALSYM ProgressCancelOperation}
 
1109
  ProgressRetryOperation = 5;     // Retry operation on subtree
 
1110
  {$EXTERNALSYM ProgressRetryOperation}
 
1111
 
 
1112
type
 
1113
  PROG_INVOKE_SETTING = DWORD;
 
1114
  {$EXTERNALSYM PROG_INVOKE_SETTING}
 
1115
  PPROG_INVOKE_SETTING = ^PROG_INVOKE_SETTING;
 
1116
  {$EXTERNALSYM PPROG_INVOKE_SETTING}
 
1117
  TProgInvokeSetting = PROG_INVOKE_SETTING;
 
1118
  PProgInvokeSetting = PPROG_INVOKE_SETTING;
 
1119
 
 
1120
//
 
1121
// Progress Function:
 
1122
// Caller of tree operation implements this Progress function, then
 
1123
// passes its function pointer to tree operation.
 
1124
// Tree operation invokes Progress function to provide progress and error
 
1125
// information to the caller during the potentially long execution
 
1126
// of the tree operation.  Tree operation provides the name of the object
 
1127
// last processed and the error status of the operation on that object.
 
1128
// Tree operation also passes the current InvokeSetting value.
 
1129
// Caller may change the InvokeSetting value, for example, from "Always"
 
1130
// to "Only On Error."
 
1131
//
 
1132
 
 
1133
type
 
1134
  FN_PROGRESS = procedure(pObjectName: LPWSTR; Status: DWORD;
 
1135
    var pInvokeSetting: PROG_INVOKE_SETTING; Args: PVOID; SecuritySet: BOOL); stdcall;
 
1136
  {$EXTERNALSYM FN_PROGRESS}
 
1137
  TFnProgress = FN_PROGRESS;
 
1138
 
 
1139
//
 
1140
// New Object Type function pointers.  TBD.
 
1141
// To support additional object resource managers generically, the
 
1142
// resource manager must provide it's own functions for operations
 
1143
// like:
 
1144
// GetAncestorAcl(IN ObjName, IN GenerationGap, IN DaclOrSacl?, ...)
 
1145
// GetAncestorName(...)
 
1146
// FreeNameStructure(...)
 
1147
//
 
1148
 
 
1149
type
 
1150
  _FN_OBJECT_MGR_FUNCTIONS = record
 
1151
    Placeholder: ULONG;
 
1152
  end;
 
1153
  {$EXTERNALSYM _FN_OBJECT_MGR_FUNCTIONS}
 
1154
  FN_OBJECT_MGR_FUNCTS = _FN_OBJECT_MGR_FUNCTIONS;
 
1155
  {$EXTERNALSYM FN_OBJECT_MGR_FUNCTS}
 
1156
  PFN_OBJECT_MGR_FUNCTS = ^FN_OBJECT_MGR_FUNCTS;
 
1157
  {$EXTERNALSYM PFN_OBJECT_MGR_FUNCTS}
 
1158
  TFnObjectMgrFuncts = FN_OBJECT_MGR_FUNCTS;
 
1159
  PFnObjectMgrFuncts = PFN_OBJECT_MGR_FUNCTS;  
 
1160
 
 
1161
//
 
1162
// Name of ancestor and number of generations between
 
1163
// ancestor and inheriting object.
 
1164
//
 
1165
// GenerationGap:
 
1166
//     Name of ancestor from which ACE was inherited.
 
1167
//     NULL for explicit ACE.
 
1168
//
 
1169
// AncestorName:
 
1170
//     Number of levels (or generations) between the object and the ancestor.
 
1171
//     Parent, gap=1.
 
1172
//     Grandparent, gap=2.
 
1173
//     Set to 0 for explicit ACE on object.
 
1174
//
 
1175
 
 
1176
type
 
1177
  _INHERITED_FROMA = record
 
1178
    GenerationGap: LONG;
 
1179
    AncestorName: LPSTR;
 
1180
  end;
 
1181
  {$EXTERNALSYM _INHERITED_FROMA}
 
1182
  INHERITED_FROMA = _INHERITED_FROMA;
 
1183
  {$EXTERNALSYM INHERITED_FROMA}
 
1184
  PINHERITED_FROMA = ^INHERITED_FROMA;
 
1185
  {$EXTERNALSYM PINHERITED_FROMA}
 
1186
  TInheritedFromA = INHERITED_FROMA;
 
1187
  PInheritedFromA = PINHERITED_FROMA;
 
1188
 
 
1189
  _INHERITED_FROMW = record
 
1190
    GenerationGap: LONG;
 
1191
    AncestorName: LPWSTR;
 
1192
  end;
 
1193
  {$EXTERNALSYM _INHERITED_FROMW}
 
1194
  INHERITED_FROMW = _INHERITED_FROMW;
 
1195
  {$EXTERNALSYM INHERITED_FROMW}
 
1196
  PINHERITED_FROMW = ^INHERITED_FROMW;
 
1197
  {$EXTERNALSYM PINHERITED_FROMW}
 
1198
  TInheritedFromW = INHERITED_FROMW;
 
1199
  PInheritedFromW = PINHERITED_FROMW;
 
1200
 
 
1201
  {$IFDEF UNICODE}
 
1202
  INHERITED_FROM = INHERITED_FROMW;
 
1203
  {$EXTERNALSYM INHERITED_FROM}
 
1204
  PINHERITED_FROM = PINHERITED_FROMW;
 
1205
  {$EXTERNALSYM PINHERITED_FROM}
 
1206
  TInheritedFrom = TInheritedFromW;
 
1207
  PInheritedFrom = PInheritedFromW;
 
1208
  {$ELSE}
 
1209
  INHERITED_FROM = INHERITED_FROMA;
 
1210
  {$EXTERNALSYM INHERITED_FROM}
 
1211
  PINHERITED_FROM = PINHERITED_FROMA;
 
1212
  {$EXTERNALSYM PINHERITED_FROM}
 
1213
  TInheritedFrom = TInheritedFromA;
 
1214
  PInheritedFrom = PInheritedFromA;
 
1215
  {$ENDIF UNICODE}
 
1216
 
 
1217
implementation
 
1218
 
 
1219
// (rom) MACRO implementation
 
1220
function AccFree(hMem: HLOCAL): HLOCAL;
 
1221
begin
 
1222
  Result := LocalFree(hMem);
 
1223
end;
 
1224
 
 
1225
end.
 
1226