{******************************************************************************} { } { Security Descriptor Definition Language API interface Unit for Object Pascal } { } { Portions created by Microsoft are Copyright (C) 1995-2001 Microsoft } { Corporation. All Rights Reserved. } { } { The original file is: sddl.h, released June 2000. The original Pascal } { code is: Sddl.pas, released December 2000. The initial developer of the } { Pascal code is Marcel van Brakel (brakelm att chello dott nl). } { } { Portions created by Marcel van Brakel are Copyright (C) 1999-2001 } { 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: JwaSddl.pas,v 1.11 2007/09/05 11:58:52 dezipaitor Exp $ {$IFNDEF JWA_OMIT_SECTIONS} unit JwaSddl; {$WEAKPACKAGEUNIT} {$ENDIF JWA_OMIT_SECTIONS} {$HPPEMIT ''} {$HPPEMIT '#include "sddl.h"'} {$HPPEMIT ''} {$IFNDEF JWA_OMIT_SECTIONS} {$I jediapilib.inc} interface uses JwaWinNT, JwaWinType; {$ENDIF JWA_OMIT_SECTIONS} {$IFNDEF JWA_IMPLEMENTATIONSECTION} // // SDDL Version information // const SDDL_REVISION_1 = 1; {$EXTERNALSYM SDDL_REVISION_1} SDDL_REVISION = SDDL_REVISION_1; {$EXTERNALSYM SDDL_REVISION} // // SDDL Component tags // SDDL_OWNER = 'O'; // Owner tag {$EXTERNALSYM SDDL_OWNER} SDDL_GROUP = 'G'; // Group tag {$EXTERNALSYM SDDL_GROUP} SDDL_DACL = 'D'; // DACL tag {$EXTERNALSYM SDDL_DACL} SDDL_SACL = 'S'; // SACL tag {$EXTERNALSYM SDDL_SACL} // // SDDL Security descriptor controls // SDDL_PROTECTED = 'P'; // DACL or SACL Protected {$EXTERNALSYM SDDL_PROTECTED} SDDL_AUTO_INHERIT_REQ = 'AR'; // Auto inherit request {$EXTERNALSYM SDDL_AUTO_INHERIT_REQ} SDDL_AUTO_INHERITED = 'AI'; // DACL/SACL are auto inherited {$EXTERNALSYM SDDL_AUTO_INHERITED} // // SDDL Ace types // SDDL_ACCESS_ALLOWED = 'A'; // Access allowed {$EXTERNALSYM SDDL_ACCESS_ALLOWED} SDDL_ACCESS_DENIED = 'D'; // Access denied {$EXTERNALSYM SDDL_ACCESS_DENIED} SDDL_OBJECT_ACCESS_ALLOWED = 'OA'; // Object access allowed {$EXTERNALSYM SDDL_OBJECT_ACCESS_ALLOWED} SDDL_OBJECT_ACCESS_DENIED = 'OD'; // Object access denied {$EXTERNALSYM SDDL_OBJECT_ACCESS_DENIED} SDDL_AUDIT = 'AU'; // Audit {$EXTERNALSYM SDDL_AUDIT} SDDL_ALARM = 'AL'; // Alarm {$EXTERNALSYM SDDL_ALARM} SDDL_OBJECT_AUDIT = 'OU'; // Object audit {$EXTERNALSYM SDDL_OBJECT_AUDIT} SDDL_OBJECT_ALARM = 'OL'; // Object alarm {$EXTERNALSYM SDDL_OBJECT_ALARM} // // SDDL Ace flags // SDDL_CONTAINER_INHERIT = 'CI'; // Container inherit {$EXTERNALSYM SDDL_CONTAINER_INHERIT} SDDL_OBJECT_INHERIT = 'OI'; // Object inherit {$EXTERNALSYM SDDL_OBJECT_INHERIT} SDDL_NO_PROPAGATE = 'NP'; // Inherit no propagate {$EXTERNALSYM SDDL_NO_PROPAGATE} SDDL_INHERIT_ONLY = 'IO'; // Inherit only {$EXTERNALSYM SDDL_INHERIT_ONLY} SDDL_INHERITED = 'ID'; // Inherited {$EXTERNALSYM SDDL_INHERITED} SDDL_AUDIT_SUCCESS = 'SA'; // Audit success {$EXTERNALSYM SDDL_AUDIT_SUCCESS} SDDL_AUDIT_FAILURE = 'FA'; // Audit failure {$EXTERNALSYM SDDL_AUDIT_FAILURE} // // SDDL Rights // SDDL_READ_PROPERTY = 'RP'; {$EXTERNALSYM SDDL_READ_PROPERTY} SDDL_WRITE_PROPERTY = 'WP'; {$EXTERNALSYM SDDL_WRITE_PROPERTY} SDDL_CREATE_CHILD = 'CC'; {$EXTERNALSYM SDDL_CREATE_CHILD} SDDL_DELETE_CHILD = 'DC'; {$EXTERNALSYM SDDL_DELETE_CHILD} SDDL_LIST_CHILDREN = 'LC'; {$EXTERNALSYM SDDL_LIST_CHILDREN} SDDL_SELF_WRITE = 'SW'; {$EXTERNALSYM SDDL_SELF_WRITE} SDDL_LIST_OBJECT = 'LO'; {$EXTERNALSYM SDDL_LIST_OBJECT} SDDL_DELETE_TREE = 'DT'; {$EXTERNALSYM SDDL_DELETE_TREE} SDDL_CONTROL_ACCESS = 'CR'; {$EXTERNALSYM SDDL_CONTROL_ACCESS} SDDL_READ_CONTROL = 'RC'; {$EXTERNALSYM SDDL_READ_CONTROL} SDDL_WRITE_DAC = 'WD'; {$EXTERNALSYM SDDL_WRITE_DAC} SDDL_WRITE_OWNER = 'WO'; {$EXTERNALSYM SDDL_WRITE_OWNER} SDDL_STANDARD_DELETE = 'SD'; {$EXTERNALSYM SDDL_STANDARD_DELETE} SDDL_GENERIC_ALL = 'GA'; {$EXTERNALSYM SDDL_GENERIC_ALL} SDDL_GENERIC_READ = 'GR'; {$EXTERNALSYM SDDL_GENERIC_READ} SDDL_GENERIC_WRITE = 'GW'; {$EXTERNALSYM SDDL_GENERIC_WRITE} SDDL_GENERIC_EXECUTE = 'GX'; {$EXTERNALSYM SDDL_GENERIC_EXECUTE} SDDL_FILE_ALL = 'FA'; {$EXTERNALSYM SDDL_FILE_ALL} SDDL_FILE_READ = 'FR'; {$EXTERNALSYM SDDL_FILE_READ} SDDL_FILE_WRITE = 'FW'; {$EXTERNALSYM SDDL_FILE_WRITE} SDDL_FILE_EXECUTE = 'FX'; {$EXTERNALSYM SDDL_FILE_EXECUTE} SDDL_KEY_ALL = 'KA'; {$EXTERNALSYM SDDL_KEY_ALL} SDDL_KEY_READ = 'KR'; {$EXTERNALSYM SDDL_KEY_READ} SDDL_KEY_WRITE = 'KW'; {$EXTERNALSYM SDDL_KEY_WRITE} SDDL_KEY_EXECUTE = 'KX'; {$EXTERNALSYM SDDL_KEY_EXECUTE} // // SDDL User alias max size // - currently, upto two supported eg. "DA" // - modify this if more WCHARs need to be there in future e.g. "DAX" // SDDL_ALIAS_SIZE = 2; {$EXTERNALSYM SDDL_ALIAS_SIZE} // // SDDL User aliases // SDDL_DOMAIN_ADMINISTRATORS = 'DA'; // Domain admins {$EXTERNALSYM SDDL_DOMAIN_ADMINISTRATORS} SDDL_DOMAIN_GUESTS = 'DG'; // Domain guests {$EXTERNALSYM SDDL_DOMAIN_GUESTS} SDDL_DOMAIN_USERS = 'DU'; // Domain users {$EXTERNALSYM SDDL_DOMAIN_USERS} SDDL_ENTERPRISE_DOMAIN_CONTROLLERS = 'ED'; // Enterprise domain controllers {$EXTERNALSYM SDDL_ENTERPRISE_DOMAIN_CONTROLLERS} SDDL_DOMAIN_DOMAIN_CONTROLLERS = 'DD'; // Domain domain controllers {$EXTERNALSYM SDDL_DOMAIN_DOMAIN_CONTROLLERS} SDDL_DOMAIN_COMPUTERS = 'DC'; // Domain computers {$EXTERNALSYM SDDL_DOMAIN_COMPUTERS} SDDL_BUILTIN_ADMINISTRATORS = 'BA'; // Builtin (local ) administrators {$EXTERNALSYM SDDL_BUILTIN_ADMINISTRATORS} SDDL_BUILTIN_GUESTS = 'BG'; // Builtin (local ) guests {$EXTERNALSYM SDDL_BUILTIN_GUESTS} SDDL_BUILTIN_USERS = 'BU'; // Builtin (local ) users {$EXTERNALSYM SDDL_BUILTIN_USERS} SDDL_LOCAL_ADMIN = 'LA'; // Local administrator account {$EXTERNALSYM SDDL_LOCAL_ADMIN} SDDL_LOCAL_GUEST = 'LG'; // Local group account {$EXTERNALSYM SDDL_LOCAL_GUEST} SDDL_ACCOUNT_OPERATORS = 'AO'; // Account operators {$EXTERNALSYM SDDL_ACCOUNT_OPERATORS} SDDL_BACKUP_OPERATORS = 'BO'; // Backup operators {$EXTERNALSYM SDDL_BACKUP_OPERATORS} SDDL_PRINTER_OPERATORS = 'PO'; // Printer operators {$EXTERNALSYM SDDL_PRINTER_OPERATORS} SDDL_SERVER_OPERATORS = 'SO'; // Server operators {$EXTERNALSYM SDDL_SERVER_OPERATORS} SDDL_AUTHENTICATED_USERS = 'AU'; // Authenticated users {$EXTERNALSYM SDDL_AUTHENTICATED_USERS} SDDL_PERSONAL_SELF = 'PS'; // Personal self {$EXTERNALSYM SDDL_PERSONAL_SELF} SDDL_CREATOR_OWNER = 'CO'; // Creator owner {$EXTERNALSYM SDDL_CREATOR_OWNER} SDDL_CREATOR_GROUP = 'CG'; // Creator group {$EXTERNALSYM SDDL_CREATOR_GROUP} SDDL_LOCAL_SYSTEM = 'SY'; // Local system {$EXTERNALSYM SDDL_LOCAL_SYSTEM} SDDL_POWER_USERS = 'PU'; // Power users {$EXTERNALSYM SDDL_POWER_USERS} SDDL_EVERYONE = 'WD'; // Everyone ( World ) {$EXTERNALSYM SDDL_EVERYONE} SDDL_REPLICATOR = 'RE'; // Replicator {$EXTERNALSYM SDDL_REPLICATOR} SDDL_INTERACTIVE = 'IU'; // Interactive logon user {$EXTERNALSYM SDDL_INTERACTIVE} SDDL_NETWORK = 'NU'; // Nework logon user {$EXTERNALSYM SDDL_NETWORK} SDDL_SERVICE = 'SU'; // Service logon user {$EXTERNALSYM SDDL_SERVICE} SDDL_RESTRICTED_CODE = 'RC'; // Restricted code {$EXTERNALSYM SDDL_RESTRICTED_CODE} SDDL_ANONYMOUS = 'AN'; // Anonymous Logon {$EXTERNALSYM SDDL_ANONYMOUS} SDDL_SCHEMA_ADMINISTRATORS = 'SA'; // Schema Administrators {$EXTERNALSYM SDDL_SCHEMA_ADMINISTRATORS} SDDL_CERT_SERV_ADMINISTRATORS = 'CA'; // Certificate Server Administrators {$EXTERNALSYM SDDL_CERT_SERV_ADMINISTRATORS} SDDL_RAS_SERVERS = 'RS'; // RAS servers group {$EXTERNALSYM SDDL_RAS_SERVERS} SDDL_ENTERPRISE_ADMINS = 'EA'; // Enterprise administrators {$EXTERNALSYM SDDL_ENTERPRISE_ADMINS} SDDL_GROUP_POLICY_ADMINS = 'PA'; // Group Policy administrators {$EXTERNALSYM SDDL_GROUP_POLICY_ADMINS} SDDL_ALIAS_PREW2KCOMPACC = 'RU'; // alias to allow previous windows 2000 {$EXTERNALSYM SDDL_ALIAS_PREW2KCOMPACC} SDDL_LOCAL_SERVICE = 'LS'; // Local service account (for services) {$EXTERNALSYM SDDL_LOCAL_SERVICE} SDDL_NETWORK_SERVICE = 'NS'; // Network service account (for services) {$EXTERNALSYM SDDL_NETWORK_SERVICE} SDDL_REMOTE_DESKTOP = 'RD'; // Remote desktop users (for terminal server) {$EXTERNALSYM SDDL_REMOTE_DESKTOP} SDDL_NETWORK_CONFIGURATION_OPS = 'NO'; // Network configuration operators ( to manage configuration of networking features) {$EXTERNALSYM SDDL_NETWORK_CONFIGURATION_OPS} SDDL_PERFMON_USERS = 'MU'; // Performance Monitor Users {$EXTERNALSYM SDDL_PERFMON_USERS} SDDL_PERFLOG_USERS = 'LU'; // Performance Log Users {$EXTERNALSYM SDDL_PERFLOG_USERS} // // SDDL Seperators - character version // SDDL_SEPERATORC = ';'; {$EXTERNALSYM SDDL_SEPERATORC} SDDL_DELIMINATORC = ':'; {$EXTERNALSYM SDDL_DELIMINATORC} SDDL_ACE_BEGINC = '('; {$EXTERNALSYM SDDL_ACE_BEGINC} SDDL_ACE_ENDC = ')'; {$EXTERNALSYM SDDL_ACE_ENDC} // // SDDL Seperators - string version // SDDL_SEPERATOR = ';'; {$EXTERNALSYM SDDL_SEPERATOR} SDDL_DELIMINATOR = ':'; {$EXTERNALSYM SDDL_DELIMINATOR} SDDL_ACE_BEGIN = '('; {$EXTERNALSYM SDDL_ACE_BEGIN} SDDL_ACE_END = ')'; {$EXTERNALSYM SDDL_ACE_END} function ConvertSidToStringSidA(Sid: PSID; var StringSid: LPSTR): BOOL; stdcall; {$EXTERNALSYM ConvertSidToStringSidA} function ConvertSidToStringSidW(Sid: PSID; var StringSid: LPWSTR): BOOL; stdcall; {$EXTERNALSYM ConvertSidToStringSidW} function ConvertSidToStringSid(Sid: PSID; var StringSid: LPTSTR): BOOL; stdcall; {$EXTERNALSYM ConvertSidToStringSid} function ConvertStringSidToSidA(StringSid: LPCSTR; var Sid: PSID): BOOL; stdcall; {$EXTERNALSYM ConvertStringSidToSidA} function ConvertStringSidToSidW(StringSid: LPCWSTR; var Sid: PSID): BOOL; stdcall; {$EXTERNALSYM ConvertStringSidToSidW} function ConvertStringSidToSid(StringSid: LPCTSTR; var Sid: PSID): BOOL; stdcall; {$EXTERNALSYM ConvertStringSidToSid} function ConvertStringSecurityDescriptorToSecurityDescriptorA(StringSecurityDescriptor: LPCSTR; StringSDRevision: DWORD; var SecurityDescriptor: PSECURITY_DESCRIPTOR; SecurityDescriptorSize: PULONG): BOOL; stdcall; {$EXTERNALSYM ConvertStringSecurityDescriptorToSecurityDescriptorA} function ConvertStringSecurityDescriptorToSecurityDescriptorW(StringSecurityDescriptor: LPCWSTR; StringSDRevision: DWORD; var SecurityDescriptor: PSECURITY_DESCRIPTOR; SecurityDescriptorSize: PULONG): BOOL; stdcall; {$EXTERNALSYM ConvertStringSecurityDescriptorToSecurityDescriptorW} function ConvertStringSecurityDescriptorToSecurityDescriptor(StringSecurityDescriptor: LPCTSTR; StringSDRevision: DWORD; var SecurityDescriptor: PSECURITY_DESCRIPTOR; SecurityDescriptorSize: PULONG): BOOL; stdcall; {$EXTERNALSYM ConvertStringSecurityDescriptorToSecurityDescriptor} function ConvertSecurityDescriptorToStringSecurityDescriptorA( SecurityDescriptor: PSECURITY_DESCRIPTOR; RequestedStringSDRevision: DWORD; SecurityInformation: SECURITY_INFORMATION; var StringSecurityDescriptor: LPSTR; StringSecurityDescriptorLen: PULONG): BOOL; stdcall; {$EXTERNALSYM ConvertSecurityDescriptorToStringSecurityDescriptorA} function ConvertSecurityDescriptorToStringSecurityDescriptorW( SecurityDescriptor: PSECURITY_DESCRIPTOR; RequestedStringSDRevision: DWORD; SecurityInformation: SECURITY_INFORMATION; var StringSecurityDescriptor: LPWSTR; StringSecurityDescriptorLen: PULONG): BOOL; stdcall; {$EXTERNALSYM ConvertSecurityDescriptorToStringSecurityDescriptorW} function ConvertSecurityDescriptorToStringSecurityDescriptor( SecurityDescriptor: PSECURITY_DESCRIPTOR; RequestedStringSDRevision: DWORD; SecurityInformation: SECURITY_INFORMATION; var StringSecurityDescriptor: LPTSTR; StringSecurityDescriptorLen: PULONG): BOOL; stdcall; {$EXTERNALSYM ConvertSecurityDescriptorToStringSecurityDescriptor} {$ENDIF JWA_IMPLEMENTATIONSECTION} {$IFNDEF JWA_OMIT_SECTIONS} implementation //uses ... {$ENDIF JWA_OMIT_SECTIONS} {$IFNDEF JWA_INTERFACESECTION} {$IFNDEF JWA_INCLUDEMODE} const advapi32 = 'advapi32.dll'; {$IFDEF UNICODE} AWSuffix = 'W'; {$ELSE} AWSuffix = 'A'; {$ENDIF UNICODE} {$ENDIF JWA_INCLUDEMODE} {$IFDEF DYNAMIC_LINK} var _ConvertSidToStringSidA: Pointer; function ConvertSidToStringSidA; begin GetProcedureAddress(_ConvertSidToStringSidA, advapi32, 'ConvertSidToStringSidA'); asm MOV ESP, EBP POP EBP JMP [_ConvertSidToStringSidA] end; end; var _ConvertSidToStringSidW: Pointer; function ConvertSidToStringSidW; begin GetProcedureAddress(_ConvertSidToStringSidW, advapi32, 'ConvertSidToStringSidW'); asm MOV ESP, EBP POP EBP JMP [_ConvertSidToStringSidW] end; end; var _ConvertSidToStringSid: Pointer; function ConvertSidToStringSid; begin GetProcedureAddress(_ConvertSidToStringSid, advapi32, 'ConvertSidToStringSid' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_ConvertSidToStringSid] end; end; var _ConvertStringSidToSidA: Pointer; function ConvertStringSidToSidA; begin GetProcedureAddress(_ConvertStringSidToSidA, advapi32, 'ConvertStringSidToSidA'); asm MOV ESP, EBP POP EBP JMP [_ConvertStringSidToSidA] end; end; var _ConvertStringSidToSidW: Pointer; function ConvertStringSidToSidW; begin GetProcedureAddress(_ConvertStringSidToSidW, advapi32, 'ConvertStringSidToSidW'); asm MOV ESP, EBP POP EBP JMP [_ConvertStringSidToSidW] end; end; var _ConvertStringSidToSid: Pointer; function ConvertStringSidToSid; begin GetProcedureAddress(_ConvertStringSidToSid, advapi32, 'ConvertStringSidToSid' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_ConvertStringSidToSid] end; end; var _ConvStrSecDescrToSecDescrA: Pointer; function ConvertStringSecurityDescriptorToSecurityDescriptorA; begin GetProcedureAddress(_ConvStrSecDescrToSecDescrA, advapi32, 'ConvertStringSecurityDescriptorToSecurityDescriptorA'); asm MOV ESP, EBP POP EBP JMP [_ConvStrSecDescrToSecDescrA] end; end; var _ConvStrSecDescrToSecDescrW: Pointer; function ConvertStringSecurityDescriptorToSecurityDescriptorW; begin GetProcedureAddress(_ConvStrSecDescrToSecDescrW, advapi32, 'ConvertStringSecurityDescriptorToSecurityDescriptorW'); asm MOV ESP, EBP POP EBP JMP [_ConvStrSecDescrToSecDescrW] end; end; var _ConvStrSecDescrToSecDescr: Pointer; function ConvertStringSecurityDescriptorToSecurityDescriptor; begin GetProcedureAddress(_ConvStrSecDescrToSecDescr, advapi32, 'ConvertStringSecurityDescriptorToSecurityDescriptor' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_ConvStrSecDescrToSecDescr] end; end; var _ConvSecDescrToStrSecDescrA: Pointer; function ConvertSecurityDescriptorToStringSecurityDescriptorA; begin GetProcedureAddress(_ConvSecDescrToStrSecDescrA, advapi32, 'ConvertSecurityDescriptorToStringSecurityDescriptorA'); asm MOV ESP, EBP POP EBP JMP [_ConvSecDescrToStrSecDescrA] end; end; var _ConvSecDescrToStrSecDescrW: Pointer; function ConvertSecurityDescriptorToStringSecurityDescriptorW; begin GetProcedureAddress(_ConvSecDescrToStrSecDescrW, advapi32, 'ConvertSecurityDescriptorToStringSecurityDescriptorW'); asm MOV ESP, EBP POP EBP JMP [_ConvSecDescrToStrSecDescrW] end; end; var _ConvSecDescrToStrSecDescr: Pointer; function ConvertSecurityDescriptorToStringSecurityDescriptor; begin GetProcedureAddress(_ConvSecDescrToStrSecDescr, advapi32, 'ConvertSecurityDescriptorToStringSecurityDescriptor' + AWSuffix); asm MOV ESP, EBP POP EBP JMP [_ConvSecDescrToStrSecDescr] end; end; {$ELSE} function ConvertSidToStringSidA; external advapi32 name 'ConvertSidToStringSidA'; function ConvertSidToStringSidW; external advapi32 name 'ConvertSidToStringSidW'; function ConvertSidToStringSid; external advapi32 name 'ConvertSidToStringSid' + AWSuffix; function ConvertStringSidToSidA; external advapi32 name 'ConvertStringSidToSidA'; function ConvertStringSidToSidW; external advapi32 name 'ConvertStringSidToSidW'; function ConvertStringSidToSid; external advapi32 name 'ConvertStringSidToSid' + AWSuffix; function ConvertStringSecurityDescriptorToSecurityDescriptorA; external advapi32 name 'ConvertStringSecurityDescriptorToSecurityDescriptorA'; function ConvertStringSecurityDescriptorToSecurityDescriptorW; external advapi32 name 'ConvertStringSecurityDescriptorToSecurityDescriptorW'; function ConvertStringSecurityDescriptorToSecurityDescriptor; external advapi32 name 'ConvertStringSecurityDescriptorToSecurityDescriptor' + AWSuffix; function ConvertSecurityDescriptorToStringSecurityDescriptorA; external advapi32 name 'ConvertSecurityDescriptorToStringSecurityDescriptorA'; function ConvertSecurityDescriptorToStringSecurityDescriptorW; external advapi32 name 'ConvertSecurityDescriptorToStringSecurityDescriptorW'; function ConvertSecurityDescriptorToStringSecurityDescriptor; external advapi32 name 'ConvertSecurityDescriptorToStringSecurityDescriptor' + AWSuffix; {$ENDIF DYNAMIC_LINK} {$ENDIF JWA_INTERFACESECTION} {$IFNDEF JWA_OMIT_SECTIONS} end. {$ENDIF JWA_OMIT_SECTIONS}