1
{******************************************************************************}
3
{ Interface Unit for Object Pascal }
5
{ Portions created by Microsoft are Copyright (C) 1995-2003 Microsoft }
6
{ Corporation. All Rights Reserved. }
8
{ Portions created by Marcel van Brakel are Copyright (C) 2003 }
9
{ Marcel van Brakel. All Rights Reserved. }
11
{ Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI) }
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 }
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 }
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. }
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. }
35
{ For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
37
{******************************************************************************}
39
// $Id: JwaAccCtrl.pas,v 1.7 2005/09/03 14:27:47 marquardt Exp $
53
{$HPPEMIT '#include "aclapi.h"'}
55
{$HPPEMIT 'typedef PTRUSTEE_A *PPTRUSTEE_A'}
56
{$HPPEMIT 'typedef PTRUSTEE_W *PPTRUSTEE_W'}
57
{$HPPEMIT '#ifdef UNICODE'}
58
{$HPPEMIT 'typedef PPTRUSTEE_W PPTRUSTEE'}
60
{$HPPEMIT 'typedef PPTRUSTEE_A PPTRUSTEE'}
81
function AccFree(hMem: HLOCAL): HLOCAL;
82
{$EXTERNALSYM AccFree}
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.
93
SE_UNKNOWN_OBJECT_TYPE,
103
SE_PROVIDER_DEFINED_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;
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.
128
TRUSTEE_IS_WELL_KNOWN_GROUP,
131
TRUSTEE_IS_COMPUTER);
132
{$EXTERNALSYM _TRUSTEE_TYPE}
133
TRUSTEE_TYPE = _TRUSTEE_TYPE;
134
{$EXTERNALSYM TRUSTEE_TYPE}
135
TTrusteeType = TRUSTEE_TYPE;
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.
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;
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
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;
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;
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;
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;
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;
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;
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;
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;
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;
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.
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;
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;
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;
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;
282
TRUSTEE_ = TRUSTEE_W;
283
{$EXTERNALSYM TRUSTEE_}
284
PTRUSTEE_ = PTRUSTEE_W;
285
{$EXTERNALSYM PTRUSTEE_}
287
{$EXTERNALSYM TRUSTEE}
288
PPTRUSTEE = ^PPTRUSTEE_W;
289
{$NODEFINE PPTRUSTEE}
290
TTrustee = TTrusteeW;
291
PTrustee = PTrusteeW;
293
TRUSTEE_ = TRUSTEE_A;
294
{$EXTERNALSYM TRUSTEE_}
295
PTRUSTEE_ = PTRUSTEE_A;
296
{$EXTERNALSYM PTRUSTEE_}
298
{$EXTERNALSYM TRUSTEE}
299
PPTRUSTEE = ^PPTRUSTEE_A;
300
{$NODEFINE PPTRUSTEE}
301
TTrustee = TTrusteeA;
302
PTrustee = PTrusteeA;
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.
335
{$EXTERNALSYM _ACCESS_MODE}
336
ACCESS_MODE = _ACCESS_MODE;
337
{$EXTERNALSYM ACCESS_MODE}
338
TAccessMode = _ACCESS_MODE;
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
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
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.
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}
374
{$EXTERNALSYM INHERIT_ONLY}
377
// Informational bit that is returned
380
INHERITED_ACCESS_ENTRY = $10;
381
{$EXTERNALSYM INHERITED_ACCESS_ENTRY}
384
// Informational bit that tells where a node was inherited from. Valid only
388
INHERITED_PARENT = $10000000;
389
{$EXTERNALSYM INHERITED_PARENT}
390
INHERITED_GRANDPARENT = $20000000;
391
{$EXTERNALSYM INHERITED_GRANDPARENT}
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
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.
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;
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;
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;
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;
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;
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;
469
//------------------------------------------------------------------------------
471
//------------------------------------------------------------------------------
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}
484
ACCCTRL_DEFAULT_PROVIDER = ACCCTRL_DEFAULT_PROVIDERW;
485
{$EXTERNALSYM ACCCTRL_DEFAULT_PROVIDER}
487
ACCCTRL_DEFAULT_PROVIDER = ACCCTRL_DEFAULT_PROVIDERA;
488
{$EXTERNALSYM ACCCTRL_DEFAULT_PROVIDER}
496
ACCESS_RIGHTS = ULONG;
497
{$EXTERNALSYM ACCESS_RIGHTS}
498
PACCESS_RIGHTS = ^ACCESS_RIGHTS;
499
{$EXTERNALSYM PACCESS_RIGHTS}
505
INHERIT_FLAGS = ULONG;
506
{$EXTERNALSYM INHERIT_FLAGS}
507
PINHERIT_FLAGS = ^INHERIT_FLAGS;
508
{$EXTERNALSYM PINHERIT_FLAGS}
511
// Access / Audit structures
514
PACTRL_ACCESS_ENTRYA = ^ACTRL_ACCESS_ENTRYA;
515
{$EXTERNALSYM PACTRL_ACCESS_ENTRYA}
516
_ACTRL_ACCESS_ENTRYA = packed record
519
Access: ACCESS_RIGHTS;
520
ProvSpecificAccess: ACCESS_RIGHTS;
521
Inheritance: INHERIT_FLAGS;
522
lpInheritProperty: LPSTR;
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;
531
// Access / Audit structures
534
PACTRL_ACCESS_ENTRYW = ^ACTRL_ACCESS_ENTRYW;
535
{$EXTERNALSYM PACTRL_ACCESS_ENTRYW}
536
_ACTRL_ACCESS_ENTRYW = packed record
539
Access: ACCESS_RIGHTS;
540
ProvSpecificAccess: ACCESS_RIGHTS;
541
Inheritance: INHERIT_FLAGS;
542
lpInheritProperty: LPWSTR;
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;
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;
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;
566
PACTRL_ACCESS_ENTRY_LISTA = ^ACTRL_ACCESS_ENTRY_LISTA;
567
{$EXTERNALSYM PACTRL_ACCESS_ENTRY_LISTA}
568
_ACTRL_ACCESS_ENTRY_LISTA = packed record
570
pAccessList: PACTRL_ACCESS_ENTRYA;
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;
578
PACTRL_ACCESS_ENTRY_LISTW = ^ACTRL_ACCESS_ENTRY_LISTW;
579
{$EXTERNALSYM PACTRL_ACCESS_ENTRY_LISTW}
580
_ACTRL_ACCESS_ENTRY_LISTW = packed record
582
pAccessList: PACTRL_ACCESS_ENTRYW;
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;
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;
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;
606
PACTRL_PROPERTY_ENTRYA = ^ACTRL_PROPERTY_ENTRYA;
607
{$EXTERNALSYM PACTRL_PROPERTY_ENTRYA}
608
_ACTRL_PROPERTY_ENTRYA = packed record
610
pAccessEntryList: PACTRL_ACCESS_ENTRY_LISTA;
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;
619
PACTRL_PROPERTY_ENTRYW = ^ACTRL_PROPERTY_ENTRYW;
620
{$EXTERNALSYM PACTRL_PROPERTY_ENTRYW}
621
_ACTRL_PROPERTY_ENTRYW = packed record
623
pAccessEntryList: PACTRL_ACCESS_ENTRY_LISTW;
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;
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;
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;
648
PActrlAlistA = ^TActrlAlistA;
649
_ACTRL_ALISTA = packed record
651
pPropertyAccessList: PACTRL_PROPERTY_ENTRYA;
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;
664
PActrlAlistW = ^TActrlAlistW;
665
_ACTRL_ALISTW = packed record
667
pPropertyAccessList: PACTRL_PROPERTY_ENTRYW;
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;
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;
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;
705
// TRUSTEE_ACCESS flags
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}
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}
721
TRUSTEE_ACCESS_ALL = DWORD($FFFFFFFF);
722
{$EXTERNALSYM TRUSTEE_ACCESS_ALL}
725
PTRUSTEE_ACCESSA = ^TRUSTEE_ACCESSA;
726
{$EXTERNALSYM PTRUSTEE_ACCESSA}
727
_TRUSTEE_ACCESSA = packed record
729
Access: ACCESS_RIGHTS;
731
fReturnedAccess: ULONG;
733
{$EXTERNALSYM _TRUSTEE_ACCESSA}
734
TRUSTEE_ACCESSA = _TRUSTEE_ACCESSA;
735
{$EXTERNALSYM TRUSTEE_ACCESSA}
736
TTrusteeAccessA = TRUSTEE_ACCESSA;
737
PTrusteeAccessA = PTRUSTEE_ACCESSA;
739
PTRUSTEE_ACCESSW = ^TRUSTEE_ACCESSW;
740
{$EXTERNALSYM PTRUSTEE_ACCESSW}
741
_TRUSTEE_ACCESSW = packed record
743
Access: ACCESS_RIGHTS;
745
fReturnedAccess: ULONG;
747
{$EXTERNALSYM _TRUSTEE_ACCESSW}
748
TRUSTEE_ACCESSW = _TRUSTEE_ACCESSW;
749
{$EXTERNALSYM TRUSTEE_ACCESSW}
750
TTrusteeAccessW = TRUSTEE_ACCESSW;
751
PTrusteeAccessW = PTRUSTEE_ACCESSW;
754
TRUSTEE_ACCESS = TRUSTEE_ACCESSW;
755
{$EXTERNALSYM TRUSTEE_ACCESS}
756
PTRUSTEE_ACCESS = PTRUSTEE_ACCESSW;
757
{$EXTERNALSYM PTRUSTEE_ACCESS}
758
TTrusteeAccess = TTrusteeAccessW;
759
PTrusteeAccess = PTrusteeAccessW;
761
TRUSTEE_ACCESS = TRUSTEE_ACCESSA;
762
{$EXTERNALSYM TRUSTEE_ACCESS}
763
PTRUSTEE_ACCESS = PTRUSTEE_ACCESSA;
764
{$EXTERNALSYM PTRUSTEE_ACCESS}
765
TTrusteeAccess = TTrusteeAccessA;
766
PTrusteeAccess = PTrusteeAccessA;
770
// Generic permission values
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}
818
// Access permissions
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}
831
// Property list flags
834
ACTRL_ACCESS_PROTECTED = $00000001;
835
{$EXTERNALSYM ACTRL_ACCESS_PROTECTED}
838
// Standard and object rights
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}
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}
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}
999
PACTRL_OVERLAPPED = ^ACTRL_OVERLAPPED;
1000
{$EXTERNALSYM PACTRL_OVERLAPPED}
1001
_ACTRL_OVERLAPPED = packed record
1009
{$EXTERNALSYM _ACTRL_OVERLAPPED}
1010
ACTRL_OVERLAPPED = _ACTRL_OVERLAPPED;
1011
{$EXTERNALSYM ACTRL_OVERLAPPED}
1012
TActrlOverlapped = ACTRL_OVERLAPPED;
1013
PActrlOverlapped = PACTRL_OVERLAPPED;
1015
PACTRL_ACCESS_INFOA = ^ACTRL_ACCESS_INFOA;
1016
{$EXTERNALSYM PACTRL_ACCESS_INFOA}
1017
_ACTRL_ACCESS_INFOA = packed record
1018
fAccessPermission: ULONG;
1019
lpAccessPermissionName: LPSTR;
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;
1027
PACTRL_ACCESS_INFOW = ^ACTRL_ACCESS_INFOW;
1028
{$EXTERNALSYM PACTRL_ACCESS_INFOW}
1029
_ACTRL_ACCESS_INFOW = packed record
1030
fAccessPermission: ULONG;
1031
lpAccessPermissionName: LPWSTR;
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;
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;
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;
1055
PACTRL_CONTROL_INFOA = ^ACTRL_CONTROL_INFOA;
1056
{$EXTERNALSYM PACTRL_CONTROL_INFOA}
1057
_ACTRL_CONTROL_INFOA = packed record
1059
lpControlName: LPSTR;
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;
1067
PACTRL_CONTROL_INFOW = ^ACTRL_CONTROL_INFOW;
1068
{$EXTERNALSYM PACTRL_CONTROL_INFOW}
1069
_ACTRL_CONTROL_INFOW = packed record
1070
lpControlId: LPWSTR;
1071
lpControlName: LPWSTR;
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;
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;
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;
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}
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}
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;
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."
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;
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
1144
// GetAncestorAcl(IN ObjName, IN GenerationGap, IN DaclOrSacl?, ...)
1145
// GetAncestorName(...)
1146
// FreeNameStructure(...)
1150
_FN_OBJECT_MGR_FUNCTIONS = record
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;
1162
// Name of ancestor and number of generations between
1163
// ancestor and inheriting object.
1166
// Name of ancestor from which ACE was inherited.
1167
// NULL for explicit ACE.
1170
// Number of levels (or generations) between the object and the ancestor.
1172
// Grandparent, gap=2.
1173
// Set to 0 for explicit ACE on object.
1177
_INHERITED_FROMA = record
1178
GenerationGap: LONG;
1179
AncestorName: LPSTR;
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;
1189
_INHERITED_FROMW = record
1190
GenerationGap: LONG;
1191
AncestorName: LPWSTR;
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;
1202
INHERITED_FROM = INHERITED_FROMW;
1203
{$EXTERNALSYM INHERITED_FROM}
1204
PINHERITED_FROM = PINHERITED_FROMW;
1205
{$EXTERNALSYM PINHERITED_FROM}
1206
TInheritedFrom = TInheritedFromW;
1207
PInheritedFrom = PInheritedFromW;
1209
INHERITED_FROM = INHERITED_FROMA;
1210
{$EXTERNALSYM INHERITED_FROM}
1211
PINHERITED_FROM = PINHERITED_FROMA;
1212
{$EXTERNALSYM PINHERITED_FROM}
1213
TInheritedFrom = TInheritedFromA;
1214
PInheritedFrom = PInheritedFromA;
1219
// (rom) MACRO implementation
1220
function AccFree(hMem: HLOCAL): HLOCAL;
1222
Result := LocalFree(hMem);