Repository URL to install this package:
Version:
3.0.0 ▾
|
{******************************************************************************}
{ }
{ Interface Unit for Object Pascal }
{ }
{ Portions created by Microsoft are Copyright (C) 1995-2003 Microsoft }
{ Corporation. All Rights Reserved. }
{ }
{ Portions created by Marcel van Brakel are Copyright (C) 2003 }
{ Marcel van Brakel. All Rights Reserved. }
{ }
{ Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI) }
{ }
{ You may retrieve the latest version of this file at the Project JEDI }
{ APILIB home page, located at http://jedi-apilib.sourceforge.net }
{ }
{ The contents of this file are used with permission, subject to the Mozilla }
{ Public License Version 1.1 (the "License"); you may not use this file except }
{ in compliance with the License. You may obtain a copy of the License at }
{ http://www.mozilla.org/MPL/MPL-1.1.html }
{ }
{ Software distributed under the License is distributed on an "AS IS" basis, }
{ WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
{ the specific language governing rights and limitations under the License. }
{ }
{ Alternatively, the contents of this file may be used under the terms of the }
{ GNU Lesser General Public License (the "LGPL License"), in which case the }
{ provisions of the LGPL License are applicable instead of those above. }
{ If you wish to allow use of your version of this file only under the terms }
{ of the LGPL License and not to allow others to use your version of this file }
{ under the MPL, indicate your decision by deleting the provisions above and }
{ replace them with the notice and other provisions required by the LGPL }
{ License. If you do not delete the provisions above, a recipient may use }
{ your version of this file under either the MPL or the LGPL License. }
{ }
{ For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
{ }
{******************************************************************************}
// $Id: JwaAccCtrl.pas,v 1.9 2007/09/05 11:58:48 dezipaitor Exp $
{$IFNDEF JWA_OMIT_SECTIONS}
unit JwaAccCtrl;
{$WEAKPACKAGEUNIT}
{$ENDIF JWA_OMIT_SECTIONS}
{$HPPEMIT ''}
{$HPPEMIT '#include "aclapi.h"'}
{$HPPEMIT ''}
{$HPPEMIT 'typedef PTRUSTEE_A *PPTRUSTEE_A'}
{$HPPEMIT 'typedef PTRUSTEE_W *PPTRUSTEE_W'}
{$HPPEMIT '#ifdef UNICODE'}
{$HPPEMIT 'typedef PPTRUSTEE_W PPTRUSTEE'}
{$HPPEMIT '#else'}
{$HPPEMIT 'typedef PPTRUSTEE_A PPTRUSTEE'}
{$HPPEMIT '#endif'}
{$HPPEMIT ''}
{$IFNDEF JWA_OMIT_SECTIONS}
{$I jediapilib.inc}
interface
uses
JwaWinNT, JwaWinType;
{$ENDIF JWA_OMIT_SECTIONS}
{$IFNDEF JWA_IMPLEMENTATIONSECTION}
(* Dependencies
// winnt
PSID
//wintype
HLOCAL
DWORD
GUID
LPSTR
LPWSTR
ULONG
PVOID
HANDLE
BOOL
LONG
*)
// (rom) MACRO
function AccFree(hMem: HLOCAL): HLOCAL;
{$EXTERNALSYM AccFree}
//
// Definition:
// This enumerated type defines the objects supported by the get/set API within
// this document. See section 3.1, Object Types for a detailed definition of the
// supported object types, and their name formats.
//
type
_SE_OBJECT_TYPE = (
SE_UNKNOWN_OBJECT_TYPE,
SE_FILE_OBJECT,
SE_SERVICE,
SE_PRINTER,
SE_REGISTRY_KEY,
SE_LMSHARE,
SE_KERNEL_OBJECT,
SE_WINDOW_OBJECT,
SE_DS_OBJECT,
SE_DS_OBJECT_ALL,
SE_PROVIDER_DEFINED_OBJECT,
SE_WMIGUID_OBJECT,
SE_REGISTRY_WOW64_32KEY);
{$EXTERNALSYM _SE_OBJECT_TYPE}
SE_OBJECT_TYPE = _SE_OBJECT_TYPE;
{$EXTERNALSYM SE_OBJECT_TYPE}
TSeObjectType = SE_OBJECT_TYPE;
//
// Definition: TRUSTEE_TYPE
// This enumerated type specifies the type of trustee account for the trustee
// returned by the API described in this document.
// TRUSTEE_IS_UNKNOWN - The trustee is an unknown, but not necessarily invalid
// type. This field is not validated on input to the APIs
// that take Trustees.
// TRUSTEE_IS_USER The trustee account is a user account.
// TRUSTEE_IS_GROUP The trustee account is a group account.
//
_TRUSTEE_TYPE = (
TRUSTEE_IS_UNKNOWN,
TRUSTEE_IS_USER,
TRUSTEE_IS_GROUP,
TRUSTEE_IS_DOMAIN,
TRUSTEE_IS_ALIAS,
TRUSTEE_IS_WELL_KNOWN_GROUP,
TRUSTEE_IS_DELETED,
TRUSTEE_IS_INVALID,
TRUSTEE_IS_COMPUTER);
{$EXTERNALSYM _TRUSTEE_TYPE}
TRUSTEE_TYPE = _TRUSTEE_TYPE;
{$EXTERNALSYM TRUSTEE_TYPE}
TTrusteeType = TRUSTEE_TYPE;
//
// Definition: TRUSTEE_FORM
// This enumerated type specifies the form the trustee identifier is in for a
// particular trustee.
// TRUSTEE_IS_SID The trustee is identified with a SID rather than with a name.
// TRUSTEE_IS_NAME The trustee is identified with a name.
//
_TRUSTEE_FORM = (
TRUSTEE_IS_SID,
TRUSTEE_IS_NAME,
TRUSTEE_BAD_FORM,
TRUSTEE_IS_OBJECTS_AND_SID,
TRUSTEE_IS_OBJECTS_AND_NAME);
{$EXTERNALSYM _TRUSTEE_FORM}
TRUSTEE_FORM = _TRUSTEE_FORM;
{$EXTERNALSYM TRUSTEE_FORM}
TTrusteeForm = TRUSTEE_FORM;
//
// Definition: MULTIPLE_TRUSTEE_OPERATION
// If the trustee is a multiple trustee, this enumerated type specifies the type.
// TRUSTEE_IS_IMPERSONATE The trustee is an impersonate trustee and the multiple
// trustee field in the trustee points to another trustee
// that is a trustee for the server that will be doing the
// impersonation.
//
_MULTIPLE_TRUSTEE_OPERATION = (NO_MULTIPLE_TRUSTEE, TRUSTEE_IS_IMPERSONATE);
{$EXTERNALSYM _MULTIPLE_TRUSTEE_OPERATION}
MULTIPLE_TRUSTEE_OPERATION = _MULTIPLE_TRUSTEE_OPERATION;
{$EXTERNALSYM MULTIPLE_TRUSTEE_OPERATION}
TMultipleTrusteeOperation = MULTIPLE_TRUSTEE_OPERATION;
POBJECTS_AND_SID = ^OBJECTS_AND_SID;
{$EXTERNALSYM POBJECTS_AND_SID}
_OBJECTS_AND_SID = packed record
ObjectsPresent: DWORD;
ObjectTypeGuid: GUID;
InheritedObjectTypeGuid: GUID;
pSid: PSID;
end;
{$EXTERNALSYM _OBJECTS_AND_SID}
OBJECTS_AND_SID = _OBJECTS_AND_SID;
{$EXTERNALSYM OBJECTS_AND_SID}
TObjectsAndSid = OBJECTS_AND_SID;
PObjectsAndSid = POBJECTS_AND_SID;
POBJECTS_AND_NAME_A = ^OBJECTS_AND_NAME_A;
{$EXTERNALSYM POBJECTS_AND_NAME_A}
_OBJECTS_AND_NAME_A = packed record
ObjectsPresent: DWORD;
ObjectType: SE_OBJECT_TYPE;
ObjectTypeName: LPSTR;
InheritedObjectTypeName: LPSTR;
ptstrName: LPSTR;
end;
{$EXTERNALSYM _OBJECTS_AND_NAME_A}
OBJECTS_AND_NAME_A = _OBJECTS_AND_NAME_A;
{$EXTERNALSYM OBJECTS_AND_NAME_A}
TObjectsAndNameA = OBJECTS_AND_NAME_A;
PObjectsAndNameA = POBJECTS_AND_NAME_A;
POBJECTS_AND_NAME_W = ^OBJECTS_AND_NAME_W;
{$EXTERNALSYM POBJECTS_AND_NAME_W}
_OBJECTS_AND_NAME_W = packed record
ObjectsPresent: DWORD;
ObjectType: SE_OBJECT_TYPE;
ObjectTypeName: LPWSTR;
InheritedObjectTypeName: LPWSTR;
ptstrName: LPWSTR;
end;
{$EXTERNALSYM _OBJECTS_AND_NAME_W}
OBJECTS_AND_NAME_W = _OBJECTS_AND_NAME_W;
{$EXTERNALSYM OBJECTS_AND_NAME_W}
TObjectsAndNameW = OBJECTS_AND_NAME_W;
PObjectsAndNameW = POBJECTS_AND_NAME_W;
{$IFDEF UNICODE}
OBJECTS_AND_NAME = OBJECTS_AND_NAME_W;
{$EXTERNALSYM OBJECTS_AND_NAME}
POBJECTS_AND_NAME = POBJECTS_AND_NAME_W;
{$EXTERNALSYM POBJECTS_AND_NAME}
TObjectsAndName = TObjectsAndNameW;
PObjectsAndName = PObjectsAndNameW;
{$ELSE}
OBJECTS_AND_NAME = OBJECTS_AND_NAME_A;
{$EXTERNALSYM OBJECTS_AND_NAME}
POBJECTS_AND_NAME = POBJECTS_AND_NAME_A;
{$EXTERNALSYM POBJECTS_AND_NAME}
TObjectsAndName = TObjectsAndNameA;
PObjectsAndName = PObjectsAndNameA;
{$ENDIF UNICODE}
//
// Definition: TRUSTEE
// This structure is used to pass account information into and out of the system
// using the API defined in this document.
// PMultipleTrustee - if NON-NULL, points to another trustee structure, as
// defined by the multiple trustee operation field.
// MultipleTrusteeOperation - Defines the multiple trustee operation/type.
// TrusteeForm - defines if the trustee is defined by name or SID.
// TrusteeType - defines if the trustee type is unknown, a user or a group.
// PwcsName - points to the trustee name or the trustee SID.
//
PTRUSTEE_A = ^TRUSTEE_A;
{$EXTERNALSYM PTRUSTEE_A}
_TRUSTEE_A = packed record
pMultipleTrustee: PTRUSTEE_A;
MultipleTrusteeOperation: MULTIPLE_TRUSTEE_OPERATION;
TrusteeForm: TRUSTEE_FORM;
TrusteeType: TRUSTEE_TYPE;
ptstrName: LPSTR;
end;
{$EXTERNALSYM _TRUSTEE_A}
TRUSTEE_A = _TRUSTEE_A;
{$EXTERNALSYM TRUSTEE_A}
TRUSTEEA = TRUSTEE_A;
{$EXTERNALSYM PTRUSTEEA}
PPTRUSTEE_A = ^PTRUSTEE_A;
{$NODEFINE PPTRUSTEE_A}
TTrusteeA = TRUSTEE_A;
PTrusteeA = PTRUSTEE_A;
PTRUSTEE_W = ^TRUSTEE_W;
{$EXTERNALSYM PTRUSTEE_W}
_TRUSTEE_W = packed record
pMultipleTrustee: PTRUSTEE_W;
MultipleTrusteeOperation: MULTIPLE_TRUSTEE_OPERATION;
TrusteeForm: TRUSTEE_FORM;
TrusteeType: TRUSTEE_TYPE;
ptstrName: LPWSTR;
end;
{$EXTERNALSYM _TRUSTEE_W}
TRUSTEE_W = _TRUSTEE_W;
{$EXTERNALSYM TRUSTEE_W}
TRUSTEEW = TRUSTEE_W;
{$EXTERNALSYM TRUSTEEW}
PPTRUSTEE_W = ^PTRUSTEE_W;
{$NODEFINE PPTRUSTEE_W}
TTrusteeW = TRUSTEE_W;
PTrusteeW = PTRUSTEE_W;
{$IFDEF UNICODE}
TRUSTEE_ = TRUSTEE_W;
{$EXTERNALSYM TRUSTEE_}
PTRUSTEE_ = PTRUSTEE_W;
{$EXTERNALSYM PTRUSTEE_}
TRUSTEE = TRUSTEEW;
{$EXTERNALSYM TRUSTEE}
PPTRUSTEE = ^PPTRUSTEE_W;
{$NODEFINE PPTRUSTEE}
TTrustee = TTrusteeW;
PTrustee = PTrusteeW;
{$ELSE}
TRUSTEE_ = TRUSTEE_A;
{$EXTERNALSYM TRUSTEE_}
PTRUSTEE_ = PTRUSTEE_A;
{$EXTERNALSYM PTRUSTEE_}
TRUSTEE = TRUSTEEA;
{$EXTERNALSYM TRUSTEE}
PPTRUSTEE = ^PPTRUSTEE_A;
{$NODEFINE PPTRUSTEE}
TTrustee = TTrusteeA;
PTrustee = PTrusteeA;
{$ENDIF UNICODE}
//
// Definition: ACCESS_MODE
// This enumerated type specifies how permissions are (requested)/to be applied
// for the trustee by the access control entry. On input this field can by any
// of the values, although it is not meaningful to mix access control and audit
// control entries. On output this field will be either SET_ACCESS, DENY_ACCESS,
// SET_AUDIT_SUCCESS, SET_AUDIT_FAILURE.
// The following descriptions define how this type effects an explicit access
// request to apply access permissions to an object.
// GRANT_ACCESS - The trustee will have at least the requested permissions upon
// successful completion of the command. (If the trustee has
// additional permissions they will not be removed).
// SET_ACCESS - The trustee will have exactly the requested permissions upon
// successful completion of the command.
// DENY_ACCESS - The trustee will be denied the specified permissions.
// REVOKE_ACCESS - Any explicit access rights the trustee has will be revoked.
// SET_AUDIT_SUCCESS - The trustee will be audited for successful opens of the
// object using the requested permissions.
// SET_AUDIT_FAILURE - The trustee will be audited for failed opens of the object
// using the requested permissions.
//
_ACCESS_MODE = (
NOT_USED_ACCESS,
GRANT_ACCESS,
SET_ACCESS,
DENY_ACCESS,
REVOKE_ACCESS,
SET_AUDIT_SUCCESS,
SET_AUDIT_FAILURE);
{$EXTERNALSYM _ACCESS_MODE}
ACCESS_MODE = _ACCESS_MODE;
{$EXTERNALSYM ACCESS_MODE}
TAccessMode = _ACCESS_MODE;
//
// Definition: Inheritance flags
// These bit masks are provided to allow simple application of inheritance in
// explicit access requests on containers.
// NO_INHERITANCE The specific access permissions will only be applied to
// the container, and will not be inherited by objects created
// within the container.
// SUB_CONTAINERS_ONLY_INHERIT The specific access permissions will be inherited
// and applied to sub containers created within the
// container, and will be applied to the container
// itself.
// SUB_OBJECTS_ONLY_INHERIT The specific access permissions will only be inherited
// by objects created within the specific container.
// The access permissions will not be applied to the
// container itself.
// SUB_CONTAINERS_AND_OBJECTS_INHERIT The specific access permissions will be
// inherited by containers created within the
// specific container, will be applied to
// objects created within the container, but
// will not be applied to the container itself.
//
const
NO_INHERITANCE = $0;
{$EXTERNALSYM NO_INHERITANCE}
SUB_OBJECTS_ONLY_INHERIT = $1;
{$EXTERNALSYM SUB_OBJECTS_ONLY_INHERIT}
SUB_CONTAINERS_ONLY_INHERIT = $2;
{$EXTERNALSYM SUB_CONTAINERS_ONLY_INHERIT}
SUB_CONTAINERS_AND_OBJECTS_INHERIT = $3;
{$EXTERNALSYM SUB_CONTAINERS_AND_OBJECTS_INHERIT}
INHERIT_NO_PROPAGATE = $4;
{$EXTERNALSYM INHERIT_NO_PROPAGATE}
INHERIT_ONLY = $8;
{$EXTERNALSYM INHERIT_ONLY}
//
// Informational bit that is returned
//
INHERITED_ACCESS_ENTRY = $10;
{$EXTERNALSYM INHERITED_ACCESS_ENTRY}
//
// Informational bit that tells where a node was inherited from. Valid only
// for NT 5 APIs
//
INHERITED_PARENT = $10000000;
{$EXTERNALSYM INHERITED_PARENT}
INHERITED_GRANDPARENT = $20000000;
{$EXTERNALSYM INHERITED_GRANDPARENT}
//
// Definition: EXPLICIT_ACCESS
// This structure is used to pass access control entry information into and out
// of the system using the API defined in this document.
// grfAccessPermissions - This contains the access permissions to assign for the
// trustee. It is in the form of an NT access mask.
// grfAccessMode - This field defines how the permissions are to be applied for
// the trustee.
// grfInheritance - For containers, this field defines how the access control
// entry is/(is requested) to be inherited on
// objects/sub-containers created within the container.
// Trustee - This field contains the definition of the trustee account the
// explicit access applies to.
//
type
PEXPLICIT_ACCESS_A = ^EXPLICIT_ACCESS_A;
{$EXTERNALSYM PEXPLICIT_ACCESS_A}
_EXPLICIT_ACCESS_A = packed record
grfAccessPermissions: DWORD;
grfAccessMode: ACCESS_MODE;
grfInheritance: DWORD;
Trustee: TRUSTEE_A;
end;
{$EXTERNALSYM _EXPLICIT_ACCESS_A}
EXPLICIT_ACCESS_A = _EXPLICIT_ACCESS_A;
{$EXTERNALSYM EXPLICIT_ACCESS_A}
EXPLICIT_ACCESSA = EXPLICIT_ACCESS_A;
{$EXTERNALSYM EXPLICIT_ACCESSA}
PEXPLICIT_ACCESSA = PEXPLICIT_ACCESS_A;
{$EXTERNALSYM PEXPLICIT_ACCESSA}
TExplicitAccessA = EXPLICIT_ACCESS_A;
PExplicitAccessA = PEXPLICIT_ACCESS_A;
PEXPLICIT_ACCESS_W = ^EXPLICIT_ACCESS_W;
{$EXTERNALSYM PEXPLICIT_ACCESS_W}
_EXPLICIT_ACCESS_W = packed record
grfAccessPermissions: DWORD;
grfAccessMode: ACCESS_MODE;
grfInheritance: DWORD;
Trustee: TRUSTEE_W;
end;
{$EXTERNALSYM _EXPLICIT_ACCESS_W}
EXPLICIT_ACCESS_W = _EXPLICIT_ACCESS_W;
{$EXTERNALSYM EXPLICIT_ACCESS_W}
EXPLICIT_ACCESSW = EXPLICIT_ACCESS_W;
{$EXTERNALSYM EXPLICIT_ACCESSW}
PEXPLICIT_ACCESSW = PEXPLICIT_ACCESS_W;
{$EXTERNALSYM PEXPLICIT_ACCESSW}
TExplicitAccessW = EXPLICIT_ACCESS_W;
PExplicitAccessW = PEXPLICIT_ACCESS_W;
{$IFDEF UNICODE}
EXPLICIT_ACCESS_ = EXPLICIT_ACCESS_W;
{$EXTERNALSYM EXPLICIT_ACCESS_}
PEXPLICIT_ACCESS_ = PEXPLICIT_ACCESS_W;
{$EXTERNALSYM PEXPLICIT_ACCESS_}
EXPLICIT_ACCESS = EXPLICIT_ACCESSW;
{$EXTERNALSYM EXPLICIT_ACCESS}
PEXPLICIT_ACCESS = PEXPLICIT_ACCESSW;
{$EXTERNALSYM PEXPLICIT_ACCESS}
TExplicitAccess = TExplicitAccessW;
PExplicitAccess = PExplicitAccessW;
{$ELSE}
EXPLICIT_ACCESS_ = EXPLICIT_ACCESS_A;
{$EXTERNALSYM EXPLICIT_ACCESS_}
PEXPLICIT_ACCESS_ = PEXPLICIT_ACCESS_A;
{$EXTERNALSYM PEXPLICIT_ACCESS_}
EXPLICIT_ACCESS = EXPLICIT_ACCESSA;
{$EXTERNALSYM EXPLICIT_ACCESS}
PEXPLICIT_ACCESS = PEXPLICIT_ACCESSA;
{$EXTERNALSYM PEXPLICIT_ACCESS}
TExplicitAccess = TExplicitAccessA;
PExplicitAccess = PExplicitAccessA;
{$ENDIF UNICODE}
//------------------------------------------------------------------------------
// NT5 APIs
//------------------------------------------------------------------------------
//
// Default provider
//
const
ACCCTRL_DEFAULT_PROVIDERA = 'Windows NT Access Provider';
{$EXTERNALSYM ACCCTRL_DEFAULT_PROVIDERA}
ACCCTRL_DEFAULT_PROVIDERW = 'Windows NT Access Provider';
{$EXTERNALSYM ACCCTRL_DEFAULT_PROVIDERW}
{$IFDEF UNICODE}
ACCCTRL_DEFAULT_PROVIDER = ACCCTRL_DEFAULT_PROVIDERW;
{$EXTERNALSYM ACCCTRL_DEFAULT_PROVIDER}
{$ELSE}
ACCCTRL_DEFAULT_PROVIDER = ACCCTRL_DEFAULT_PROVIDERA;
{$EXTERNALSYM ACCCTRL_DEFAULT_PROVIDER}
{$ENDIF UNICODE}
//
// Access rights
//
type
ACCESS_RIGHTS = ULONG;
{$EXTERNALSYM ACCESS_RIGHTS}
PACCESS_RIGHTS = ^ACCESS_RIGHTS;
{$EXTERNALSYM PACCESS_RIGHTS}
//
// Inheritance flags
//
INHERIT_FLAGS = ULONG;
{$EXTERNALSYM INHERIT_FLAGS}
PINHERIT_FLAGS = ^INHERIT_FLAGS;
{$EXTERNALSYM PINHERIT_FLAGS}
//
// Access / Audit structures
//
PACTRL_ACCESS_ENTRYA = ^ACTRL_ACCESS_ENTRYA;
{$EXTERNALSYM PACTRL_ACCESS_ENTRYA}
_ACTRL_ACCESS_ENTRYA = packed record
Trustee: TRUSTEE_A;
fAccessFlags: ULONG;
Access: ACCESS_RIGHTS;
ProvSpecificAccess: ACCESS_RIGHTS;
Inheritance: INHERIT_FLAGS;
lpInheritProperty: LPSTR;
end;
{$EXTERNALSYM _ACTRL_ACCESS_ENTRYA}
ACTRL_ACCESS_ENTRYA = _ACTRL_ACCESS_ENTRYA;
{$EXTERNALSYM ACTRL_ACCESS_ENTRYA}
TActrlAccessEntryA = ACTRL_ACCESS_ENTRYA;
PActrlAccessEntryA = PACTRL_ACCESS_ENTRYA;
//
// Access / Audit structures
//
PACTRL_ACCESS_ENTRYW = ^ACTRL_ACCESS_ENTRYW;
{$EXTERNALSYM PACTRL_ACCESS_ENTRYW}
_ACTRL_ACCESS_ENTRYW = packed record
Trustee: TRUSTEE_W;
fAccessFlags: ULONG;
Access: ACCESS_RIGHTS;
ProvSpecificAccess: ACCESS_RIGHTS;
Inheritance: INHERIT_FLAGS;
lpInheritProperty: LPWSTR;
end;
{$EXTERNALSYM _ACTRL_ACCESS_ENTRYW}
ACTRL_ACCESS_ENTRYW = _ACTRL_ACCESS_ENTRYW;
{$EXTERNALSYM ACTRL_ACCESS_ENTRYW}
TActrlAccessEntryW = ACTRL_ACCESS_ENTRYW;
PActrlAccessEntryW = PACTRL_ACCESS_ENTRYW;
{$IFDEF UNICODE}
ACTRL_ACCESS_ENTRY = ACTRL_ACCESS_ENTRYW;
{$EXTERNALSYM ACTRL_ACCESS_ENTRY}
PACTRL_ACCESS_ENTRY = PACTRL_ACCESS_ENTRYW;
{$EXTERNALSYM PACTRL_ACCESS_ENTRY}
TActrlAccessEntry = TActrlAccessEntryW;
PActrlAccessEntry = PActrlAccessEntryW;
{$ELSE}
ACTRL_ACCESS_ENTRY = ACTRL_ACCESS_ENTRYA;
{$EXTERNALSYM ACTRL_ACCESS_ENTRY}
PACTRL_ACCESS_ENTRY = PACTRL_ACCESS_ENTRYA;
{$EXTERNALSYM PACTRL_ACCESS_ENTRY}
TActrlAccessEntry = TActrlAccessEntryA;
PActrlAccessEntry = PActrlAccessEntryA;
{$ENDIF UNICODE}
PACTRL_ACCESS_ENTRY_LISTA = ^ACTRL_ACCESS_ENTRY_LISTA;
{$EXTERNALSYM PACTRL_ACCESS_ENTRY_LISTA}
_ACTRL_ACCESS_ENTRY_LISTA = packed record
cEntries: ULONG;
pAccessList: PACTRL_ACCESS_ENTRYA;
end;
{$EXTERNALSYM _ACTRL_ACCESS_ENTRY_LISTA}
ACTRL_ACCESS_ENTRY_LISTA = _ACTRL_ACCESS_ENTRY_LISTA;
{$EXTERNALSYM ACTRL_ACCESS_ENTRY_LISTA}
TActrlAccessEntryListA = ACTRL_ACCESS_ENTRY_LISTA;
PActrlAccessEntryListA = PACTRL_ACCESS_ENTRY_LISTA;
PACTRL_ACCESS_ENTRY_LISTW = ^ACTRL_ACCESS_ENTRY_LISTW;
{$EXTERNALSYM PACTRL_ACCESS_ENTRY_LISTW}
_ACTRL_ACCESS_ENTRY_LISTW = packed record
cEntries: ULONG;
pAccessList: PACTRL_ACCESS_ENTRYW;
end;
{$EXTERNALSYM _ACTRL_ACCESS_ENTRY_LISTW}
ACTRL_ACCESS_ENTRY_LISTW = _ACTRL_ACCESS_ENTRY_LISTW;
{$EXTERNALSYM ACTRL_ACCESS_ENTRY_LISTW}
TActrlAccessEntryListW = ACTRL_ACCESS_ENTRY_LISTW;
PActrlAccessEntryListW = PACTRL_ACCESS_ENTRY_LISTW;
{$IFDEF UNICODE}
ACTRL_ACCESS_ENTRY_LIST = ACTRL_ACCESS_ENTRY_LISTW;
{$EXTERNALSYM ACTRL_ACCESS_ENTRY_LIST}
PACTRL_ACCESS_ENTRY_LIST = PACTRL_ACCESS_ENTRY_LISTW;
{$EXTERNALSYM PACTRL_ACCESS_ENTRY_LIST}
TActrlAccessEntryList = TActrlAccessEntryListW;
PActrlAccessEntryList = PActrlAccessEntryListW;
{$ELSE}
ACTRL_ACCESS_ENTRY_LIST = ACTRL_ACCESS_ENTRY_LISTA;
{$EXTERNALSYM ACTRL_ACCESS_ENTRY_LIST}
PACTRL_ACCESS_ENTRY_LIST = PACTRL_ACCESS_ENTRY_LISTA;
{$EXTERNALSYM PACTRL_ACCESS_ENTRY_LIST}
TActrlAccessEntryList = TActrlAccessEntryListA;
PActrlAccessEntryList = PActrlAccessEntryListA;
{$ENDIF UNICODE}
PACTRL_PROPERTY_ENTRYA = ^ACTRL_PROPERTY_ENTRYA;
{$EXTERNALSYM PACTRL_PROPERTY_ENTRYA}
_ACTRL_PROPERTY_ENTRYA = packed record
lpProperty: LPSTR;
pAccessEntryList: PACTRL_ACCESS_ENTRY_LISTA;
fListFlags: ULONG;
end;
{$EXTERNALSYM _ACTRL_PROPERTY_ENTRYA}
ACTRL_PROPERTY_ENTRYA = _ACTRL_PROPERTY_ENTRYA;
{$EXTERNALSYM ACTRL_PROPERTY_ENTRYA}
TActrlPropertyEntryA = ACTRL_PROPERTY_ENTRYA;
PActrlPropertyEntryA = PACTRL_PROPERTY_ENTRYA;
PACTRL_PROPERTY_ENTRYW = ^ACTRL_PROPERTY_ENTRYW;
{$EXTERNALSYM PACTRL_PROPERTY_ENTRYW}
_ACTRL_PROPERTY_ENTRYW = packed record
lpProperty: LPWSTR;
pAccessEntryList: PACTRL_ACCESS_ENTRY_LISTW;
fListFlags: ULONG;
end;
{$EXTERNALSYM _ACTRL_PROPERTY_ENTRYW}
ACTRL_PROPERTY_ENTRYW = _ACTRL_PROPERTY_ENTRYW;
{$EXTERNALSYM ACTRL_PROPERTY_ENTRYW}
TActrlPropertyEntryW = ACTRL_PROPERTY_ENTRYW;
PActrlPropertyEntryW = PACTRL_PROPERTY_ENTRYW;
{$IFDEF UNICODE}
ACTRL_PROPERTY_ENTRY = ACTRL_PROPERTY_ENTRYW;
{$EXTERNALSYM ACTRL_PROPERTY_ENTRY}
PACTRL_PROPERTY_ENTRY = PACTRL_PROPERTY_ENTRYW;
{$EXTERNALSYM PACTRL_PROPERTY_ENTRY}
TActrlPropertyEntry = TActrlPropertyEntryW;
PActrlPropertyEntry = PActrlPropertyEntryW;
{$ELSE}
ACTRL_PROPERTY_ENTRY = ACTRL_PROPERTY_ENTRYA;
{$EXTERNALSYM ACTRL_PROPERTY_ENTRY}
PACTRL_PROPERTY_ENTRY = PACTRL_PROPERTY_ENTRYA;
{$EXTERNALSYM PACTRL_PROPERTY_ENTRY}
TActrlPropertyEntry = TActrlPropertyEntryA;
PActrlPropertyEntry = PActrlPropertyEntryA;
{$ENDIF UNICODE}
PActrlAlistA = ^TActrlAlistA;
_ACTRL_ALISTA = packed record
cEntries: ULONG;
pPropertyAccessList: PACTRL_PROPERTY_ENTRYA;
end;
{$EXTERNALSYM _ACTRL_ALISTA}
ACTRL_ACCESSA = _ACTRL_ALISTA;
{$EXTERNALSYM ACTRL_ACCESSA}
PACTRL_ACCESSA = ^_ACTRL_ALISTA;
{$EXTERNALSYM PACTRL_ACCESSA}
ACTRL_AUDITA = ACTRL_ACCESSA;
{$EXTERNALSYM ACTRL_AUDITA}
PACTRL_AUDITA = ^ACTRL_AUDITA;
{$EXTERNALSYM PACTRL_AUDITA}
TActrlAlistA = _ACTRL_ALISTA;
PActrlAlistW = ^TActrlAlistW;
_ACTRL_ALISTW = packed record
cEntries: ULONG;
pPropertyAccessList: PACTRL_PROPERTY_ENTRYW;
end;
{$EXTERNALSYM _ACTRL_ALISTW}
ACTRL_ACCESSW = _ACTRL_ALISTW;
{$EXTERNALSYM ACTRL_ACCESSW}
PACTRL_ACCESSW = ^_ACTRL_ALISTW;
{$EXTERNALSYM PACTRL_ACCESSW}
ACTRL_AUDITW = ACTRL_ACCESSW;
{$EXTERNALSYM ACTRL_AUDITW}
PACTRL_AUDITW = ^ACTRL_AUDITW;
{$EXTERNALSYM PACTRL_AUDITW}
TActrlAlistW = _ACTRL_ALISTW;
{$IFDEF UNICODE}
ACTRL_ACCESS = ACTRL_ACCESSW;
{$EXTERNALSYM ACTRL_ACCESS}
PACTRL_ACCESS = PACTRL_ACCESSW;
{$EXTERNALSYM PACTRL_ACCESS}
ACTRL_AUDIT = ACTRL_AUDITW;
{$EXTERNALSYM ACTRL_AUDIT}
PACTRL_AUDIT = PACTRL_AUDITW;
{$EXTERNALSYM PACTRL_AUDIT}
TActrlAlist = TActrlAlistW;
PActrlAlist = PActrlAlistW;
{$ELSE}
ACTRL_ACCESS = ACTRL_ACCESSA;
{$EXTERNALSYM ACTRL_ACCESS}
PACTRL_ACCESS = PACTRL_ACCESSA;
{$EXTERNALSYM PACTRL_ACCESS}
ACTRL_AUDIT = ACTRL_AUDITA;
{$EXTERNALSYM ACTRL_AUDIT}
PACTRL_AUDIT = PACTRL_AUDITA;
{$EXTERNALSYM PACTRL_AUDIT}
TActrlAlist = TActrlAlistA;
PActrlAlist = PActrlAlistA;
{$ENDIF UNICODE}
//
// TRUSTEE_ACCESS flags
//
const
TRUSTEE_ACCESS_ALLOWED = $00000001;
{$EXTERNALSYM TRUSTEE_ACCESS_ALLOWED}
TRUSTEE_ACCESS_READ = $00000002;
{$EXTERNALSYM TRUSTEE_ACCESS_READ}
TRUSTEE_ACCESS_WRITE = $00000004;
{$EXTERNALSYM TRUSTEE_ACCESS_WRITE}
TRUSTEE_ACCESS_EXPLICIT = $00000001;
{$EXTERNALSYM TRUSTEE_ACCESS_EXPLICIT}
TRUSTEE_ACCESS_READ_WRITE = TRUSTEE_ACCESS_READ or TRUSTEE_ACCESS_WRITE;
{$EXTERNALSYM TRUSTEE_ACCESS_READ_WRITE}
TRUSTEE_ACCESS_ALL = DWORD($FFFFFFFF);
{$EXTERNALSYM TRUSTEE_ACCESS_ALL}
type
PTRUSTEE_ACCESSA = ^TRUSTEE_ACCESSA;
{$EXTERNALSYM PTRUSTEE_ACCESSA}
_TRUSTEE_ACCESSA = packed record
lpProperty: LPSTR;
Access: ACCESS_RIGHTS;
fAccessFlags: ULONG;
fReturnedAccess: ULONG;
end;
{$EXTERNALSYM _TRUSTEE_ACCESSA}
TRUSTEE_ACCESSA = _TRUSTEE_ACCESSA;
{$EXTERNALSYM TRUSTEE_ACCESSA}
TTrusteeAccessA = TRUSTEE_ACCESSA;
PTrusteeAccessA = PTRUSTEE_ACCESSA;
PTRUSTEE_ACCESSW = ^TRUSTEE_ACCESSW;
{$EXTERNALSYM PTRUSTEE_ACCESSW}
_TRUSTEE_ACCESSW = packed record
lpProperty: LPWSTR;
Access: ACCESS_RIGHTS;
fAccessFlags: ULONG;
fReturnedAccess: ULONG;
end;
{$EXTERNALSYM _TRUSTEE_ACCESSW}
TRUSTEE_ACCESSW = _TRUSTEE_ACCESSW;
{$EXTERNALSYM TRUSTEE_ACCESSW}
TTrusteeAccessW = TRUSTEE_ACCESSW;
PTrusteeAccessW = PTRUSTEE_ACCESSW;
{$IFDEF UNICODE}
TRUSTEE_ACCESS = TRUSTEE_ACCESSW;
{$EXTERNALSYM TRUSTEE_ACCESS}
PTRUSTEE_ACCESS = PTRUSTEE_ACCESSW;
{$EXTERNALSYM PTRUSTEE_ACCESS}
TTrusteeAccess = TTrusteeAccessW;
PTrusteeAccess = PTrusteeAccessW;
{$ELSE}
TRUSTEE_ACCESS = TRUSTEE_ACCESSA;
{$EXTERNALSYM TRUSTEE_ACCESS}
PTRUSTEE_ACCESS = PTRUSTEE_ACCESSA;
{$EXTERNALSYM PTRUSTEE_ACCESS}
TTrusteeAccess = TTrusteeAccessA;
PTrusteeAccess = PTrusteeAccessA;
{$ENDIF UNICODE}
//
// Generic permission values
//
const
ACTRL_RESERVED = $00000000;
{$EXTERNALSYM ACTRL_RESERVED}
ACTRL_PERM_1 = $00000001;
{$EXTERNALSYM ACTRL_PERM_1}
ACTRL_PERM_2 = $00000002;
{$EXTERNALSYM ACTRL_PERM_2}
ACTRL_PERM_3 = $00000004;
{$EXTERNALSYM ACTRL_PERM_3}
ACTRL_PERM_4 = $00000008;
{$EXTERNALSYM ACTRL_PERM_4}
ACTRL_PERM_5 = $00000010;
{$EXTERNALSYM ACTRL_PERM_5}
ACTRL_PERM_6 = $00000020;
{$EXTERNALSYM ACTRL_PERM_6}
ACTRL_PERM_7 = $00000040;
{$EXTERNALSYM ACTRL_PERM_7}
ACTRL_PERM_8 = $00000080;
{$EXTERNALSYM ACTRL_PERM_8}
ACTRL_PERM_9 = $00000100;
{$EXTERNALSYM ACTRL_PERM_9}
ACTRL_PERM_10 = $00000200;
{$EXTERNALSYM ACTRL_PERM_10}
ACTRL_PERM_11 = $00000400;
{$EXTERNALSYM ACTRL_PERM_11}
ACTRL_PERM_12 = $00000800;
{$EXTERNALSYM ACTRL_PERM_12}
ACTRL_PERM_13 = $00001000;
{$EXTERNALSYM ACTRL_PERM_13}
ACTRL_PERM_14 = $00002000;
{$EXTERNALSYM ACTRL_PERM_14}
ACTRL_PERM_15 = $00004000;
{$EXTERNALSYM ACTRL_PERM_15}
ACTRL_PERM_16 = $00008000;
{$EXTERNALSYM ACTRL_PERM_16}
ACTRL_PERM_17 = $00010000;
{$EXTERNALSYM ACTRL_PERM_17}
ACTRL_PERM_18 = $00020000;
{$EXTERNALSYM ACTRL_PERM_18}
ACTRL_PERM_19 = $00040000;
{$EXTERNALSYM ACTRL_PERM_19}
ACTRL_PERM_20 = $00080000;
{$EXTERNALSYM ACTRL_PERM_20}
//
// Access permissions
//
ACTRL_ACCESS_ALLOWED = $00000001;
{$EXTERNALSYM ACTRL_ACCESS_ALLOWED}
ACTRL_ACCESS_DENIED = $00000002;
{$EXTERNALSYM ACTRL_ACCESS_DENIED}
ACTRL_AUDIT_SUCCESS = $00000004;
{$EXTERNALSYM ACTRL_AUDIT_SUCCESS}
ACTRL_AUDIT_FAILURE = $00000008;
{$EXTERNALSYM ACTRL_AUDIT_FAILURE}
//
// Property list flags
//
ACTRL_ACCESS_PROTECTED = $00000001;
{$EXTERNALSYM ACTRL_ACCESS_PROTECTED}
//
// Standard and object rights
//
ACTRL_SYSTEM_ACCESS = $04000000;
{$EXTERNALSYM ACTRL_SYSTEM_ACCESS}
ACTRL_DELETE = $08000000;
{$EXTERNALSYM ACTRL_DELETE}
ACTRL_READ_CONTROL = $10000000;
{$EXTERNALSYM ACTRL_READ_CONTROL}
ACTRL_CHANGE_ACCESS = $20000000;
{$EXTERNALSYM ACTRL_CHANGE_ACCESS}
ACTRL_CHANGE_OWNER = $40000000;
{$EXTERNALSYM ACTRL_CHANGE_OWNER}
ACTRL_SYNCHRONIZE = DWORD($80000000);
{$EXTERNALSYM ACTRL_SYNCHRONIZE}
ACTRL_STD_RIGHTS_ALL = DWORD($f8000000);
{$EXTERNALSYM ACTRL_STD_RIGHTS_ALL}
ACTRL_STD_RIGHT_REQUIRED = DWORD(ACTRL_STD_RIGHTS_ALL and not ACTRL_SYNCHRONIZE);
{$EXTERNALSYM ACTRL_STD_RIGHT_REQUIRED}
ACTRL_DS_OPEN = ACTRL_RESERVED;
{$EXTERNALSYM ACTRL_DS_OPEN}
ACTRL_DS_CREATE_CHILD = ACTRL_PERM_1;
{$EXTERNALSYM ACTRL_DS_CREATE_CHILD}
ACTRL_DS_DELETE_CHILD = ACTRL_PERM_2;
{$EXTERNALSYM ACTRL_DS_DELETE_CHILD}
ACTRL_DS_LIST = ACTRL_PERM_3;
{$EXTERNALSYM ACTRL_DS_LIST}
ACTRL_DS_SELF = ACTRL_PERM_4;
{$EXTERNALSYM ACTRL_DS_SELF}
ACTRL_DS_READ_PROP = ACTRL_PERM_5;
{$EXTERNALSYM ACTRL_DS_READ_PROP}
ACTRL_DS_WRITE_PROP = ACTRL_PERM_6;
{$EXTERNALSYM ACTRL_DS_WRITE_PROP}
ACTRL_DS_DELETE_TREE = ACTRL_PERM_7;
{$EXTERNALSYM ACTRL_DS_DELETE_TREE}
ACTRL_DS_LIST_OBJECT = ACTRL_PERM_8;
{$EXTERNALSYM ACTRL_DS_LIST_OBJECT}
ACTRL_DS_CONTROL_ACCESS = ACTRL_PERM_9;
{$EXTERNALSYM ACTRL_DS_CONTROL_ACCESS}
ACTRL_FILE_READ = ACTRL_PERM_1;
{$EXTERNALSYM ACTRL_FILE_READ}
ACTRL_FILE_WRITE = ACTRL_PERM_2;
{$EXTERNALSYM ACTRL_FILE_WRITE}
ACTRL_FILE_APPEND = ACTRL_PERM_3;
{$EXTERNALSYM ACTRL_FILE_APPEND}
ACTRL_FILE_READ_PROP = ACTRL_PERM_4;
{$EXTERNALSYM ACTRL_FILE_READ_PROP}
ACTRL_FILE_WRITE_PROP = ACTRL_PERM_5;
{$EXTERNALSYM ACTRL_FILE_WRITE_PROP}
ACTRL_FILE_EXECUTE = ACTRL_PERM_6;
{$EXTERNALSYM ACTRL_FILE_EXECUTE}
ACTRL_FILE_READ_ATTRIB = ACTRL_PERM_8;
{$EXTERNALSYM ACTRL_FILE_READ_ATTRIB}
ACTRL_FILE_WRITE_ATTRIB = ACTRL_PERM_9;
{$EXTERNALSYM ACTRL_FILE_WRITE_ATTRIB}
ACTRL_FILE_CREATE_PIPE = ACTRL_PERM_10;
{$EXTERNALSYM ACTRL_FILE_CREATE_PIPE}
ACTRL_DIR_LIST = ACTRL_PERM_1;
{$EXTERNALSYM ACTRL_DIR_LIST}
ACTRL_DIR_CREATE_OBJECT = ACTRL_PERM_2;
{$EXTERNALSYM ACTRL_DIR_CREATE_OBJECT}
ACTRL_DIR_CREATE_CHILD = ACTRL_PERM_3;
{$EXTERNALSYM ACTRL_DIR_CREATE_CHILD}
ACTRL_DIR_DELETE_CHILD = ACTRL_PERM_7;
{$EXTERNALSYM ACTRL_DIR_DELETE_CHILD}
ACTRL_DIR_TRAVERSE = ACTRL_PERM_6;
{$EXTERNALSYM ACTRL_DIR_TRAVERSE}
ACTRL_KERNEL_TERMINATE = ACTRL_PERM_1;
{$EXTERNALSYM ACTRL_KERNEL_TERMINATE}
ACTRL_KERNEL_THREAD = ACTRL_PERM_2;
{$EXTERNALSYM ACTRL_KERNEL_THREAD}
ACTRL_KERNEL_VM = ACTRL_PERM_3;
{$EXTERNALSYM ACTRL_KERNEL_VM}
ACTRL_KERNEL_VM_READ = ACTRL_PERM_4;
{$EXTERNALSYM ACTRL_KERNEL_VM_READ}
ACTRL_KERNEL_VM_WRITE = ACTRL_PERM_5;
{$EXTERNALSYM ACTRL_KERNEL_VM_WRITE}
ACTRL_KERNEL_DUP_HANDLE = ACTRL_PERM_6;
{$EXTERNALSYM ACTRL_KERNEL_DUP_HANDLE}
ACTRL_KERNEL_PROCESS = ACTRL_PERM_7;
{$EXTERNALSYM ACTRL_KERNEL_PROCESS}
ACTRL_KERNEL_SET_INFO = ACTRL_PERM_8;
{$EXTERNALSYM ACTRL_KERNEL_SET_INFO}
ACTRL_KERNEL_GET_INFO = ACTRL_PERM_9;
{$EXTERNALSYM ACTRL_KERNEL_GET_INFO}
ACTRL_KERNEL_CONTROL = ACTRL_PERM_10;
{$EXTERNALSYM ACTRL_KERNEL_CONTROL}
ACTRL_KERNEL_ALERT = ACTRL_PERM_11;
{$EXTERNALSYM ACTRL_KERNEL_ALERT}
ACTRL_KERNEL_GET_CONTEXT = ACTRL_PERM_12;
{$EXTERNALSYM ACTRL_KERNEL_GET_CONTEXT}
ACTRL_KERNEL_SET_CONTEXT = ACTRL_PERM_13;
{$EXTERNALSYM ACTRL_KERNEL_SET_CONTEXT}
ACTRL_KERNEL_TOKEN = ACTRL_PERM_14;
{$EXTERNALSYM ACTRL_KERNEL_TOKEN}
ACTRL_KERNEL_IMPERSONATE = ACTRL_PERM_15;
{$EXTERNALSYM ACTRL_KERNEL_IMPERSONATE}
ACTRL_KERNEL_DIMPERSONATE = ACTRL_PERM_16;
{$EXTERNALSYM ACTRL_KERNEL_DIMPERSONATE}
ACTRL_PRINT_SADMIN = ACTRL_PERM_1;
{$EXTERNALSYM ACTRL_PRINT_SADMIN}
ACTRL_PRINT_SLIST = ACTRL_PERM_2;
{$EXTERNALSYM ACTRL_PRINT_SLIST}
ACTRL_PRINT_PADMIN = ACTRL_PERM_3;
{$EXTERNALSYM ACTRL_PRINT_PADMIN}
ACTRL_PRINT_PUSE = ACTRL_PERM_4;
{$EXTERNALSYM ACTRL_PRINT_PUSE}
ACTRL_PRINT_JADMIN = ACTRL_PERM_5;
{$EXTERNALSYM ACTRL_PRINT_JADMIN}
ACTRL_SVC_GET_INFO = ACTRL_PERM_1;
{$EXTERNALSYM ACTRL_SVC_GET_INFO}
ACTRL_SVC_SET_INFO = ACTRL_PERM_2;
{$EXTERNALSYM ACTRL_SVC_SET_INFO}
ACTRL_SVC_STATUS = ACTRL_PERM_3;
{$EXTERNALSYM ACTRL_SVC_STATUS}
ACTRL_SVC_LIST = ACTRL_PERM_4;
{$EXTERNALSYM ACTRL_SVC_LIST}
ACTRL_SVC_START = ACTRL_PERM_5;
{$EXTERNALSYM ACTRL_SVC_START}
ACTRL_SVC_STOP = ACTRL_PERM_6;
{$EXTERNALSYM ACTRL_SVC_STOP}
ACTRL_SVC_PAUSE = ACTRL_PERM_7;
{$EXTERNALSYM ACTRL_SVC_PAUSE}
ACTRL_SVC_INTERROGATE = ACTRL_PERM_8;
{$EXTERNALSYM ACTRL_SVC_INTERROGATE}
ACTRL_SVC_UCONTROL = ACTRL_PERM_9;
{$EXTERNALSYM ACTRL_SVC_UCONTROL}
ACTRL_REG_QUERY = ACTRL_PERM_1;
{$EXTERNALSYM ACTRL_REG_QUERY}
ACTRL_REG_SET = ACTRL_PERM_2;
{$EXTERNALSYM ACTRL_REG_SET}
ACTRL_REG_CREATE_CHILD = ACTRL_PERM_3;
{$EXTERNALSYM ACTRL_REG_CREATE_CHILD}
ACTRL_REG_LIST = ACTRL_PERM_4;
{$EXTERNALSYM ACTRL_REG_LIST}
ACTRL_REG_NOTIFY = ACTRL_PERM_5;
{$EXTERNALSYM ACTRL_REG_NOTIFY}
ACTRL_REG_LINK = ACTRL_PERM_6;
{$EXTERNALSYM ACTRL_REG_LINK}
ACTRL_WIN_CLIPBRD = ACTRL_PERM_1;
{$EXTERNALSYM ACTRL_WIN_CLIPBRD}
ACTRL_WIN_GLOBAL_ATOMS = ACTRL_PERM_2;
{$EXTERNALSYM ACTRL_WIN_GLOBAL_ATOMS}
ACTRL_WIN_CREATE = ACTRL_PERM_3;
{$EXTERNALSYM ACTRL_WIN_CREATE}
ACTRL_WIN_LIST_DESK = ACTRL_PERM_4;
{$EXTERNALSYM ACTRL_WIN_LIST_DESK}
ACTRL_WIN_LIST = ACTRL_PERM_5;
{$EXTERNALSYM ACTRL_WIN_LIST}
ACTRL_WIN_READ_ATTRIBS = ACTRL_PERM_6;
{$EXTERNALSYM ACTRL_WIN_READ_ATTRIBS}
ACTRL_WIN_WRITE_ATTRIBS = ACTRL_PERM_7;
{$EXTERNALSYM ACTRL_WIN_WRITE_ATTRIBS}
ACTRL_WIN_SCREEN = ACTRL_PERM_8;
{$EXTERNALSYM ACTRL_WIN_SCREEN}
ACTRL_WIN_EXIT = ACTRL_PERM_9;
{$EXTERNALSYM ACTRL_WIN_EXIT}
type
PACTRL_OVERLAPPED = ^ACTRL_OVERLAPPED;
{$EXTERNALSYM PACTRL_OVERLAPPED}
_ACTRL_OVERLAPPED = packed record
//union {
Provider: PVOID;
// ULONG Reserved1;
//};
Reserved2: ULONG;
hEvent: HANDLE;
end;
{$EXTERNALSYM _ACTRL_OVERLAPPED}
ACTRL_OVERLAPPED = _ACTRL_OVERLAPPED;
{$EXTERNALSYM ACTRL_OVERLAPPED}
TActrlOverlapped = ACTRL_OVERLAPPED;
PActrlOverlapped = PACTRL_OVERLAPPED;
PACTRL_ACCESS_INFOA = ^ACTRL_ACCESS_INFOA;
{$EXTERNALSYM PACTRL_ACCESS_INFOA}
_ACTRL_ACCESS_INFOA = packed record
fAccessPermission: ULONG;
lpAccessPermissionName: LPSTR;
end;
{$EXTERNALSYM _ACTRL_ACCESS_INFOA}
ACTRL_ACCESS_INFOA = _ACTRL_ACCESS_INFOA;
{$EXTERNALSYM ACTRL_ACCESS_INFOA}
TActrlAccessInfoA = ACTRL_ACCESS_INFOA;
PActrlAccessInfoA = PACTRL_ACCESS_INFOA;
PACTRL_ACCESS_INFOW = ^ACTRL_ACCESS_INFOW;
{$EXTERNALSYM PACTRL_ACCESS_INFOW}
_ACTRL_ACCESS_INFOW = packed record
fAccessPermission: ULONG;
lpAccessPermissionName: LPWSTR;
end;
{$EXTERNALSYM _ACTRL_ACCESS_INFOW}
ACTRL_ACCESS_INFOW = _ACTRL_ACCESS_INFOW;
{$EXTERNALSYM ACTRL_ACCESS_INFOW}
TActrlAccessInfoW = ACTRL_ACCESS_INFOW;
PActrlAccessInfoW = PACTRL_ACCESS_INFOW;
{$IFDEF UNICODE}
ACTRL_ACCESS_INFO = ACTRL_ACCESS_INFOW;
{$EXTERNALSYM ACTRL_ACCESS_INFO}
PACTRL_ACCESS_INFO = PACTRL_ACCESS_INFOW;
{$EXTERNALSYM PACTRL_ACCESS_INFO}
TActrlAccessInfo = TActrlAccessInfoW;
PActrlAccessInfo = PActrlAccessInfoW;
{$ELSE}
ACTRL_ACCESS_INFO = ACTRL_ACCESS_INFOA;
{$EXTERNALSYM ACTRL_ACCESS_INFO}
PACTRL_ACCESS_INFO = PACTRL_ACCESS_INFOA;
{$EXTERNALSYM PACTRL_ACCESS_INFO}
TActrlAccessInfo = TActrlAccessInfoA;
PActrlAccessInfo = PActrlAccessInfoA;
{$ENDIF UNICODE}
PACTRL_CONTROL_INFOA = ^ACTRL_CONTROL_INFOA;
{$EXTERNALSYM PACTRL_CONTROL_INFOA}
_ACTRL_CONTROL_INFOA = packed record
lpControlId: LPSTR;
lpControlName: LPSTR;
end;
{$EXTERNALSYM _ACTRL_CONTROL_INFOA}
ACTRL_CONTROL_INFOA = _ACTRL_CONTROL_INFOA;
{$EXTERNALSYM ACTRL_CONTROL_INFOA}
TActrlControlInfoA = ACTRL_CONTROL_INFOA;
PActrlControlInfoA = PACTRL_CONTROL_INFOA;
PACTRL_CONTROL_INFOW = ^ACTRL_CONTROL_INFOW;
{$EXTERNALSYM PACTRL_CONTROL_INFOW}
_ACTRL_CONTROL_INFOW = packed record
lpControlId: LPWSTR;
lpControlName: LPWSTR;
end;
{$EXTERNALSYM _ACTRL_CONTROL_INFOW}
ACTRL_CONTROL_INFOW = _ACTRL_CONTROL_INFOW;
{$EXTERNALSYM ACTRL_CONTROL_INFOW}
TActrlControlInfoW = ACTRL_CONTROL_INFOW;
PActrlControlInfoW = PACTRL_CONTROL_INFOW;
{$IFDEF UNICODE}
ACTRL_CONTROL_INFO = ACTRL_CONTROL_INFOW;
{$EXTERNALSYM ACTRL_CONTROL_INFO}
PACTRL_CONTROL_INFO = PACTRL_CONTROL_INFOW;
{$EXTERNALSYM PACTRL_CONTROL_INFO}
TActrlControlInfo = TActrlControlInfoW;
PActrlControlInfo = PActrlControlInfoW;
{$ELSE}
ACTRL_CONTROL_INFO = ACTRL_CONTROL_INFOA;
{$EXTERNALSYM ACTRL_CONTROL_INFO}
PACTRL_CONTROL_INFO = PACTRL_CONTROL_INFOA;
{$EXTERNALSYM PACTRL_CONTROL_INFO}
TActrlControlInfo = TActrlControlInfoA;
PActrlControlInfo = PActrlControlInfoA;
{$ENDIF UNICODE}
const
ACTRL_ACCESS_NO_OPTIONS = $00000000;
{$EXTERNALSYM ACTRL_ACCESS_NO_OPTIONS}
ACTRL_ACCESS_SUPPORTS_OBJECT_ENTRIES = $00000001;
{$EXTERNALSYM ACTRL_ACCESS_SUPPORTS_OBJECT_ENTRIES}
ProgressInvokeNever = 1; // Never invoke the progress function
{$EXTERNALSYM ProgressInvokeNever}
ProgressInvokeEveryObject = 2; // Invoke for each object
{$EXTERNALSYM ProgressInvokeEveryObject}
ProgressInvokeOnError = 3; // Invoke only for each error case
{$EXTERNALSYM ProgressInvokeOnError}
ProgressCancelOperation = 4; // Stop propagation and return
{$EXTERNALSYM ProgressCancelOperation}
ProgressRetryOperation = 5; // Retry operation on subtree
{$EXTERNALSYM ProgressRetryOperation}
type
PROG_INVOKE_SETTING = DWORD;
{$EXTERNALSYM PROG_INVOKE_SETTING}
PPROG_INVOKE_SETTING = ^PROG_INVOKE_SETTING;
{$EXTERNALSYM PPROG_INVOKE_SETTING}
TProgInvokeSetting = PROG_INVOKE_SETTING;
PProgInvokeSetting = PPROG_INVOKE_SETTING;
//
// Progress Function:
// Caller of tree operation implements this Progress function, then
// passes its function pointer to tree operation.
// Tree operation invokes Progress function to provide progress and error
// information to the caller during the potentially long execution
// of the tree operation. Tree operation provides the name of the object
// last processed and the error status of the operation on that object.
// Tree operation also passes the current InvokeSetting value.
// Caller may change the InvokeSetting value, for example, from "Always"
// to "Only On Error."
//
type
FN_PROGRESS = procedure(pObjectName: LPWSTR; Status: DWORD;
var pInvokeSetting: PROG_INVOKE_SETTING; Args: PVOID; SecuritySet: BOOL); stdcall;
{$EXTERNALSYM FN_PROGRESS}
TFnProgress = FN_PROGRESS;
//
// New Object Type function pointers. TBD.
// To support additional object resource managers generically, the
// resource manager must provide it's own functions for operations
// like:
// GetAncestorAcl(IN ObjName, IN GenerationGap, IN DaclOrSacl?, ...)
// GetAncestorName(...)
// FreeNameStructure(...)
//
type
_FN_OBJECT_MGR_FUNCTIONS = record
Placeholder: ULONG;
end;
{$EXTERNALSYM _FN_OBJECT_MGR_FUNCTIONS}
FN_OBJECT_MGR_FUNCTS = _FN_OBJECT_MGR_FUNCTIONS;
{$EXTERNALSYM FN_OBJECT_MGR_FUNCTS}
PFN_OBJECT_MGR_FUNCTS = ^FN_OBJECT_MGR_FUNCTS;
{$EXTERNALSYM PFN_OBJECT_MGR_FUNCTS}
TFnObjectMgrFuncts = FN_OBJECT_MGR_FUNCTS;
PFnObjectMgrFuncts = PFN_OBJECT_MGR_FUNCTS;
//
// Name of ancestor and number of generations between
// ancestor and inheriting object.
//
// GenerationGap:
// Name of ancestor from which ACE was inherited.
// NULL for explicit ACE.
//
// AncestorName:
// Number of levels (or generations) between the object and the ancestor.
// Parent, gap=1.
// Grandparent, gap=2.
// Set to 0 for explicit ACE on object.
//
type
_INHERITED_FROMA = record
GenerationGap: LONG;
AncestorName: LPSTR;
end;
{$EXTERNALSYM _INHERITED_FROMA}
INHERITED_FROMA = _INHERITED_FROMA;
{$EXTERNALSYM INHERITED_FROMA}
PINHERITED_FROMA = ^INHERITED_FROMA;
{$EXTERNALSYM PINHERITED_FROMA}
TInheritedFromA = INHERITED_FROMA;
PInheritedFromA = PINHERITED_FROMA;
_INHERITED_FROMW = record
GenerationGap: LONG;
AncestorName: LPWSTR;
end;
{$EXTERNALSYM _INHERITED_FROMW}
INHERITED_FROMW = _INHERITED_FROMW;
{$EXTERNALSYM INHERITED_FROMW}
PINHERITED_FROMW = ^INHERITED_FROMW;
{$EXTERNALSYM PINHERITED_FROMW}
TInheritedFromW = INHERITED_FROMW;
PInheritedFromW = PINHERITED_FROMW;
{$IFDEF UNICODE}
INHERITED_FROM = INHERITED_FROMW;
{$EXTERNALSYM INHERITED_FROM}
PINHERITED_FROM = PINHERITED_FROMW;
{$EXTERNALSYM PINHERITED_FROM}
TInheritedFrom = TInheritedFromW;
PInheritedFrom = PInheritedFromW;
{$ELSE}
INHERITED_FROM = INHERITED_FROMA;
{$EXTERNALSYM INHERITED_FROM}
PINHERITED_FROM = PINHERITED_FROMA;
{$EXTERNALSYM PINHERITED_FROM}
TInheritedFrom = TInheritedFromA;
PInheritedFrom = PInheritedFromA;
{$ENDIF UNICODE}
{$ENDIF JWA_IMPLEMENTATIONSECTION}
{$IFNDEF JWA_OMIT_SECTIONS}
implementation
uses
JwaWinBase;
{$ENDIF JWA_OMIT_SECTIONS}
{$IFNDEF JWA_INTERFACESECTION}
// (rom) MACRO implementation
function AccFree(hMem: HLOCAL): HLOCAL;
begin
Result := LocalFree(hMem);
end;
{$ENDIF JWA_INTERFACESECTION}
{$IFNDEF JWA_OMIT_SECTIONS}
end.
{$ENDIF JWA_OMIT_SECTIONS}