JwaSddl.pas
上传用户:davidchvip
上传日期:2009-07-28
资源大小:1749k
文件大小:23k
源码类别:

Windows编程

开发平台:

Delphi

  1. {******************************************************************************}
  2. {                                                                       }
  3. { Security Descriptor Definition Language API interface Unit for Object Pascal }
  4. {                                                                       }
  5. { Portions created by Microsoft are Copyright (C) 1995-2001 Microsoft          }
  6. { Corporation. All Rights Reserved.                                            }
  7. {                 }
  8. { The original file is: sddl.h, released June 2000. The original Pascal        }
  9. { code is: Sddl.pas, released December 2000. The initial developer of the      }
  10. { Pascal code is Marcel van Brakel (brakelm@chello.nl).                        }
  11. {                                                                              }
  12. { Portions created by Marcel van Brakel are Copyright (C) 1999-2001            }
  13. { Marcel van Brakel. All Rights Reserved.                                      }
  14. {                 }
  15. { Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI)        }
  16. {                }
  17. { You may retrieve the latest version of this file at the Project JEDI home    }
  18. { page, located at http://delphi-jedi.org or my personal homepage located at   }
  19. { http://members.chello.nl/m.vanbrakel2                                        }
  20. {                }
  21. { The contents of this file are used with permission, subject to the Mozilla   }
  22. { Public License Version 1.1 (the "License"); you may not use this file except }
  23. { in compliance with the License. You may obtain a copy of the License at      }
  24. { http://www.mozilla.org/MPL/MPL-1.1.html                                      }
  25. {                                                                              }
  26. { Software distributed under the License is distributed on an "AS IS" basis,   }
  27. { WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
  28. { the specific language governing rights and limitations under the License.    }
  29. {                                                                              }
  30. { Alternatively, the contents of this file may be used under the terms of the  }
  31. { GNU Lesser General Public License (the  "LGPL License"), in which case the   }
  32. { provisions of the LGPL License are applicable instead of those above.        }
  33. { If you wish to allow use of your version of this file only under the terms   }
  34. { of the LGPL License and not to allow others to use your version of this file }
  35. { under the MPL, indicate your decision by deleting  the provisions above and  }
  36. { replace  them with the notice and other provisions required by the LGPL      }
  37. { License.  If you do not delete the provisions above, a recipient may use     }
  38. { your version of this file under either the MPL or the LGPL License.          }
  39. {                 }
  40. { For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
  41. {                 }
  42. {******************************************************************************}
  43. unit JwaSddl;
  44. {$WEAKPACKAGEUNIT}
  45. {$HPPEMIT ''}
  46. {$HPPEMIT '#include "sddl.h"'}
  47. {$HPPEMIT ''}
  48. {$I WINDEFINES.INC}
  49. interface
  50. uses
  51.   JwaWinNT, JwaWinType;
  52. //
  53. // SDDL Version information
  54. //
  55. const
  56.   SDDL_REVISION_1 = 1;
  57.   {$EXTERNALSYM SDDL_REVISION_1}
  58.   SDDL_REVISION   = SDDL_REVISION_1;
  59.   {$EXTERNALSYM SDDL_REVISION}
  60. //
  61. // SDDL Component tags
  62. //
  63.   SDDL_OWNER = 'O'; // Owner tag
  64.   {$EXTERNALSYM SDDL_OWNER}
  65.   SDDL_GROUP = 'G'; // Group tag
  66.   {$EXTERNALSYM SDDL_GROUP}
  67.   SDDL_DACL  = 'D'; // DACL tag
  68.   {$EXTERNALSYM SDDL_DACL}
  69.   SDDL_SACL  = 'S'; // SACL tag
  70.   {$EXTERNALSYM SDDL_SACL}
  71. //
  72. // SDDL Security descriptor controls
  73. //
  74.   SDDL_PROTECTED        = 'P'; // DACL or SACL Protected
  75.   {$EXTERNALSYM SDDL_PROTECTED}
  76.   SDDL_AUTO_INHERIT_REQ = 'AR'; // Auto inherit request
  77.   {$EXTERNALSYM SDDL_AUTO_INHERIT_REQ}
  78.   SDDL_AUTO_INHERITED   = 'AI'; // DACL/SACL are auto inherited
  79.   {$EXTERNALSYM SDDL_AUTO_INHERITED}
  80. //
  81. // SDDL Ace types
  82. //
  83.   SDDL_ACCESS_ALLOWED        = 'A'; // Access allowed
  84.   {$EXTERNALSYM SDDL_ACCESS_ALLOWED}
  85.   SDDL_ACCESS_DENIED         = 'D'; // Access denied
  86.   {$EXTERNALSYM SDDL_ACCESS_DENIED}
  87.   SDDL_OBJECT_ACCESS_ALLOWED = 'OA'; // Object access allowed
  88.   {$EXTERNALSYM SDDL_OBJECT_ACCESS_ALLOWED}
  89.   SDDL_OBJECT_ACCESS_DENIED  = 'OD'; // Object access denied
  90.   {$EXTERNALSYM SDDL_OBJECT_ACCESS_DENIED}
  91.   SDDL_AUDIT                 = 'AU'; // Audit
  92.   {$EXTERNALSYM SDDL_AUDIT}
  93.   SDDL_ALARM                 = 'AL'; // Alarm
  94.   {$EXTERNALSYM SDDL_ALARM}
  95.   SDDL_OBJECT_AUDIT          = 'OU'; // Object audit
  96.   {$EXTERNALSYM SDDL_OBJECT_AUDIT}
  97.   SDDL_OBJECT_ALARM          = 'OL'; // Object alarm
  98.   {$EXTERNALSYM SDDL_OBJECT_ALARM}
  99. //
  100. // SDDL Ace flags
  101. //
  102.   SDDL_CONTAINER_INHERIT = 'CI'; // Container inherit
  103.   {$EXTERNALSYM SDDL_CONTAINER_INHERIT}
  104.   SDDL_OBJECT_INHERIT    = 'OI'; // Object inherit
  105.   {$EXTERNALSYM SDDL_OBJECT_INHERIT}
  106.   SDDL_NO_PROPAGATE      = 'NP'; // Inherit no propagate
  107.   {$EXTERNALSYM SDDL_NO_PROPAGATE}
  108.   SDDL_INHERIT_ONLY      = 'IO'; // Inherit only
  109.   {$EXTERNALSYM SDDL_INHERIT_ONLY}
  110.   SDDL_INHERITED         = 'ID'; // Inherited
  111.   {$EXTERNALSYM SDDL_INHERITED}
  112.   SDDL_AUDIT_SUCCESS     = 'SA'; // Audit success
  113.   {$EXTERNALSYM SDDL_AUDIT_SUCCESS}
  114.   SDDL_AUDIT_FAILURE     = 'FA'; // Audit failure
  115.   {$EXTERNALSYM SDDL_AUDIT_FAILURE}
  116. //
  117. // SDDL Rights
  118. //
  119.   SDDL_READ_PROPERTY   = 'RP';
  120.   {$EXTERNALSYM SDDL_READ_PROPERTY}
  121.   SDDL_WRITE_PROPERTY  = 'WP';
  122.   {$EXTERNALSYM SDDL_WRITE_PROPERTY}
  123.   SDDL_CREATE_CHILD    = 'CC';
  124.   {$EXTERNALSYM SDDL_CREATE_CHILD}
  125.   SDDL_DELETE_CHILD    = 'DC';
  126.   {$EXTERNALSYM SDDL_DELETE_CHILD}
  127.   SDDL_LIST_CHILDREN   = 'LC';
  128.   {$EXTERNALSYM SDDL_LIST_CHILDREN}
  129.   SDDL_SELF_WRITE      = 'SW';
  130.   {$EXTERNALSYM SDDL_SELF_WRITE}
  131.   SDDL_LIST_OBJECT     = 'LO';
  132.   {$EXTERNALSYM SDDL_LIST_OBJECT}
  133.   SDDL_DELETE_TREE     = 'DT';
  134.   {$EXTERNALSYM SDDL_DELETE_TREE}
  135.   SDDL_CONTROL_ACCESS  = 'CR';
  136.   {$EXTERNALSYM SDDL_CONTROL_ACCESS}
  137.   SDDL_READ_CONTROL    = 'RC';
  138.   {$EXTERNALSYM SDDL_READ_CONTROL}
  139.   SDDL_WRITE_DAC       = 'WD';
  140.   {$EXTERNALSYM SDDL_WRITE_DAC}
  141.   SDDL_WRITE_OWNER     = 'WO';
  142.   {$EXTERNALSYM SDDL_WRITE_OWNER}
  143.   SDDL_STANDARD_DELETE = 'SD';
  144.   {$EXTERNALSYM SDDL_STANDARD_DELETE}
  145.   SDDL_GENERIC_ALL     = 'GA';
  146.   {$EXTERNALSYM SDDL_GENERIC_ALL}
  147.   SDDL_GENERIC_READ    = 'GR';
  148.   {$EXTERNALSYM SDDL_GENERIC_READ}
  149.   SDDL_GENERIC_WRITE   = 'GW';
  150.   {$EXTERNALSYM SDDL_GENERIC_WRITE}
  151.   SDDL_GENERIC_EXECUTE = 'GX';
  152.   {$EXTERNALSYM SDDL_GENERIC_EXECUTE}
  153.   SDDL_FILE_ALL        = 'FA';
  154.   {$EXTERNALSYM SDDL_FILE_ALL}
  155.   SDDL_FILE_READ       = 'FR';
  156.   {$EXTERNALSYM SDDL_FILE_READ}
  157.   SDDL_FILE_WRITE      = 'FW';
  158.   {$EXTERNALSYM SDDL_FILE_WRITE}
  159.   SDDL_FILE_EXECUTE    = 'FX';
  160.   {$EXTERNALSYM SDDL_FILE_EXECUTE}
  161.   SDDL_KEY_ALL         = 'KA';
  162.   {$EXTERNALSYM SDDL_KEY_ALL}
  163.   SDDL_KEY_READ        = 'KR';
  164.   {$EXTERNALSYM SDDL_KEY_READ}
  165.   SDDL_KEY_WRITE       = 'KW';
  166.   {$EXTERNALSYM SDDL_KEY_WRITE}
  167.   SDDL_KEY_EXECUTE     = 'KX';
  168.   {$EXTERNALSYM SDDL_KEY_EXECUTE}
  169. //
  170. // SDDL User alias max size
  171. //      - currently, upto two supported eg. "DA"
  172. //      - modify this if more WCHARs need to be there in future e.g. "DAX"
  173. //
  174.   SDDL_ALIAS_SIZE = 2;
  175.   {$EXTERNALSYM SDDL_ALIAS_SIZE}
  176. //
  177. // SDDL User aliases
  178. //
  179.   SDDL_DOMAIN_ADMINISTRATORS         = 'DA'; // Domain admins
  180.   {$EXTERNALSYM SDDL_DOMAIN_ADMINISTRATORS}
  181.   SDDL_DOMAIN_GUESTS                 = 'DG'; // Domain guests
  182.   {$EXTERNALSYM SDDL_DOMAIN_GUESTS}
  183.   SDDL_DOMAIN_USERS                  = 'DU'; // Domain users
  184.   {$EXTERNALSYM SDDL_DOMAIN_USERS}
  185.   SDDL_ENTERPRISE_DOMAIN_CONTROLLERS = 'ED'; // Enterprise domain controllers
  186.   {$EXTERNALSYM SDDL_ENTERPRISE_DOMAIN_CONTROLLERS}
  187.   SDDL_DOMAIN_DOMAIN_CONTROLLERS     = 'DD'; // Domain domain controllers
  188.   {$EXTERNALSYM SDDL_DOMAIN_DOMAIN_CONTROLLERS}
  189.   SDDL_DOMAIN_COMPUTERS              = 'DC'; // Domain computers
  190.   {$EXTERNALSYM SDDL_DOMAIN_COMPUTERS}
  191.   SDDL_BUILTIN_ADMINISTRATORS        = 'BA'; // Builtin (local ) administrators
  192.   {$EXTERNALSYM SDDL_BUILTIN_ADMINISTRATORS}
  193.   SDDL_BUILTIN_GUESTS                = 'BG'; // Builtin (local ) guests
  194.   {$EXTERNALSYM SDDL_BUILTIN_GUESTS}
  195.   SDDL_BUILTIN_USERS                 = 'BU'; // Builtin (local ) users
  196.   {$EXTERNALSYM SDDL_BUILTIN_USERS}
  197.   SDDL_LOCAL_ADMIN                   = 'LA'; // Local administrator account
  198.   {$EXTERNALSYM SDDL_LOCAL_ADMIN}
  199.   SDDL_LOCAL_GUEST                   = 'LG'; // Local group account
  200.   {$EXTERNALSYM SDDL_LOCAL_GUEST}
  201.   SDDL_ACCOUNT_OPERATORS             = 'AO'; // Account operators
  202.   {$EXTERNALSYM SDDL_ACCOUNT_OPERATORS}
  203.   SDDL_BACKUP_OPERATORS              = 'BO'; // Backup operators
  204.   {$EXTERNALSYM SDDL_BACKUP_OPERATORS}
  205.   SDDL_PRINTER_OPERATORS             = 'PO'; // Printer operators
  206.   {$EXTERNALSYM SDDL_PRINTER_OPERATORS}
  207.   SDDL_SERVER_OPERATORS              = 'SO'; // Server operators
  208.   {$EXTERNALSYM SDDL_SERVER_OPERATORS}
  209.   SDDL_AUTHENTICATED_USERS           = 'AU'; // Authenticated users
  210.   {$EXTERNALSYM SDDL_AUTHENTICATED_USERS}
  211.   SDDL_PERSONAL_SELF                 = 'PS'; // Personal self
  212.   {$EXTERNALSYM SDDL_PERSONAL_SELF}
  213.   SDDL_CREATOR_OWNER                 = 'CO'; // Creator owner
  214.   {$EXTERNALSYM SDDL_CREATOR_OWNER}
  215.   SDDL_CREATOR_GROUP                 = 'CG'; // Creator group
  216.   {$EXTERNALSYM SDDL_CREATOR_GROUP}
  217.   SDDL_LOCAL_SYSTEM                  = 'SY'; // Local system
  218.   {$EXTERNALSYM SDDL_LOCAL_SYSTEM}
  219.   SDDL_POWER_USERS                   = 'PU'; // Power users
  220.   {$EXTERNALSYM SDDL_POWER_USERS}
  221.   SDDL_EVERYONE                      = 'WD'; // Everyone ( World )
  222.   {$EXTERNALSYM SDDL_EVERYONE}
  223.   SDDL_REPLICATOR                    = 'RE'; // Replicator
  224.   {$EXTERNALSYM SDDL_REPLICATOR}
  225.   SDDL_INTERACTIVE                   = 'IU'; // Interactive logon user
  226.   {$EXTERNALSYM SDDL_INTERACTIVE}
  227.   SDDL_NETWORK                       = 'NU'; // Nework logon user
  228.   {$EXTERNALSYM SDDL_NETWORK}
  229.   SDDL_SERVICE                       = 'SU'; // Service logon user
  230.   {$EXTERNALSYM SDDL_SERVICE}
  231.   SDDL_RESTRICTED_CODE               = 'RC'; // Restricted code
  232.   {$EXTERNALSYM SDDL_RESTRICTED_CODE}
  233.   SDDL_ANONYMOUS                     = 'AN'; // Anonymous Logon
  234.   {$EXTERNALSYM SDDL_ANONYMOUS}
  235.   SDDL_SCHEMA_ADMINISTRATORS         = 'SA'; // Schema Administrators
  236.   {$EXTERNALSYM SDDL_SCHEMA_ADMINISTRATORS}
  237.   SDDL_CERT_SERV_ADMINISTRATORS      = 'CA'; // Certificate Server Administrators
  238.   {$EXTERNALSYM SDDL_CERT_SERV_ADMINISTRATORS}
  239.   SDDL_RAS_SERVERS                   = 'RS'; // RAS servers group
  240.   {$EXTERNALSYM SDDL_RAS_SERVERS}
  241.   SDDL_ENTERPRISE_ADMINS             = 'EA'; // Enterprise administrators
  242.   {$EXTERNALSYM SDDL_ENTERPRISE_ADMINS}
  243.   SDDL_GROUP_POLICY_ADMINS           = 'PA'; // Group Policy administrators
  244.   {$EXTERNALSYM SDDL_GROUP_POLICY_ADMINS}
  245.   SDDL_ALIAS_PREW2KCOMPACC           = 'RU'; // alias to allow previous windows 2000
  246.   {$EXTERNALSYM SDDL_ALIAS_PREW2KCOMPACC}
  247.   SDDL_LOCAL_SERVICE                 = 'LS'; // Local service account (for services)
  248.   {$EXTERNALSYM SDDL_LOCAL_SERVICE}
  249.   SDDL_NETWORK_SERVICE               = 'NS'; // Network service account (for services)
  250.   {$EXTERNALSYM SDDL_NETWORK_SERVICE}
  251.   SDDL_REMOTE_DESKTOP                = 'RD'; // Remote desktop users (for terminal server)
  252.   {$EXTERNALSYM SDDL_REMOTE_DESKTOP}
  253.   SDDL_NETWORK_CONFIGURATION_OPS     = 'NO'; // Network configuration operators ( to manage configuration of networking features)
  254.   {$EXTERNALSYM SDDL_NETWORK_CONFIGURATION_OPS}
  255.   SDDL_PERFMON_USERS                 = 'MU'; // Performance Monitor Users
  256.   {$EXTERNALSYM SDDL_PERFMON_USERS}
  257.   SDDL_PERFLOG_USERS                 = 'LU'; // Performance Log Users
  258.   {$EXTERNALSYM SDDL_PERFLOG_USERS}
  259. //
  260. // SDDL Seperators - character version
  261. //
  262.   SDDL_SEPERATORC   = ';';
  263.   {$EXTERNALSYM SDDL_SEPERATORC}
  264.   SDDL_DELIMINATORC = ':';
  265.   {$EXTERNALSYM SDDL_DELIMINATORC}
  266.   SDDL_ACE_BEGINC   = '(';
  267.   {$EXTERNALSYM SDDL_ACE_BEGINC}
  268.   SDDL_ACE_ENDC     = ')';
  269.   {$EXTERNALSYM SDDL_ACE_ENDC}
  270. //
  271. // SDDL Seperators - string version
  272. //
  273.   SDDL_SEPERATOR   = ';';
  274.   {$EXTERNALSYM SDDL_SEPERATOR}
  275.   SDDL_DELIMINATOR = ':';
  276.   {$EXTERNALSYM SDDL_DELIMINATOR}
  277.   SDDL_ACE_BEGIN   = '(';
  278.   {$EXTERNALSYM SDDL_ACE_BEGIN}
  279.   SDDL_ACE_END     = ')';
  280.   {$EXTERNALSYM SDDL_ACE_END}
  281. function ConvertSidToStringSidA(Sid: PSID; var StringSid: LPSTR): BOOL; stdcall;
  282. {$EXTERNALSYM ConvertSidToStringSidA}
  283. function ConvertSidToStringSidW(Sid: PSID; var StringSid: LPWSTR): BOOL; stdcall;
  284. {$EXTERNALSYM ConvertSidToStringSidW}
  285. {$IFDEF UNICODE}
  286. function ConvertSidToStringSid(Sid: PSID; var StringSid: LPWSTR): BOOL; stdcall;
  287. {$EXTERNALSYM ConvertSidToStringSid}
  288. {$ELSE}
  289. function ConvertSidToStringSid(Sid: PSID; var StringSid: LPSTR): BOOL; stdcall;
  290. {$EXTERNALSYM ConvertSidToStringSid}
  291. {$ENDIF}
  292. function ConvertStringSidToSidA(StringSid: LPCSTR; var Sid: PSID): BOOL; stdcall;
  293. {$EXTERNALSYM ConvertStringSidToSidA}
  294. function ConvertStringSidToSidW(StringSid: LPCWSTR; var Sid: PSID): BOOL; stdcall;
  295. {$EXTERNALSYM ConvertStringSidToSidW}
  296. {$IFDEF UNICODE}
  297. function ConvertStringSidToSid(StringSid: LPCWSTR; var Sid: PSID): BOOL; stdcall;
  298. {$EXTERNALSYM ConvertStringSidToSid}
  299. {$ELSE}
  300. function ConvertStringSidToSid(StringSid: LPCSTR; var Sid: PSID): BOOL; stdcall;
  301. {$EXTERNALSYM ConvertStringSidToSid}
  302. {$ENDIF}
  303. function ConvertStringSecurityDescriptorToSecurityDescriptorA(StringSecurityDescriptor: LPCSTR;
  304.   StringSDRevision: DWORD; var SecurityDescriptor: PSECURITY_DESCRIPTOR;
  305.   SecurityDescriptorSize: PULONG): BOOL; stdcall;
  306. {$EXTERNALSYM ConvertStringSecurityDescriptorToSecurityDescriptorA}
  307. function ConvertStringSecurityDescriptorToSecurityDescriptorW(StringSecurityDescriptor: LPCWSTR;
  308.   StringSDRevision: DWORD; var SecurityDescriptor: PSECURITY_DESCRIPTOR;
  309.   SecurityDescriptorSize: PULONG): BOOL; stdcall;
  310. {$EXTERNALSYM ConvertStringSecurityDescriptorToSecurityDescriptorW}
  311. {$IFDEF UNICODE}
  312. function ConvertStringSecurityDescriptorToSecurityDescriptor(StringSecurityDescriptor: LPCWSTR;
  313.   StringSDRevision: DWORD; var SecurityDescriptor: PSECURITY_DESCRIPTOR;
  314.   SecurityDescriptorSize: PULONG): BOOL; stdcall;
  315. {$EXTERNALSYM ConvertStringSecurityDescriptorToSecurityDescriptor}
  316. {$ELSE}
  317. function ConvertStringSecurityDescriptorToSecurityDescriptor(StringSecurityDescriptor: LPCSTR;
  318.   StringSDRevision: DWORD; var SecurityDescriptor: PSECURITY_DESCRIPTOR;
  319.   SecurityDescriptorSize: PULONG): BOOL; stdcall;
  320. {$EXTERNALSYM ConvertStringSecurityDescriptorToSecurityDescriptor}
  321. {$ENDIF}
  322. function ConvertSecurityDescriptorToStringSecurityDescriptorA(
  323.   SecurityDescriptor: PSECURITY_DESCRIPTOR; RequestedStringSDRevision: DWORD;
  324.   SecurityInformation: SECURITY_INFORMATION; var StringSecurityDescriptor: LPSTR;
  325.   StringSecurityDescriptorLen: PULONG): BOOL; stdcall;
  326. {$EXTERNALSYM ConvertSecurityDescriptorToStringSecurityDescriptorA}
  327. function ConvertSecurityDescriptorToStringSecurityDescriptorW(
  328.   SecurityDescriptor: PSECURITY_DESCRIPTOR; RequestedStringSDRevision: DWORD;
  329.   SecurityInformation: SECURITY_INFORMATION; var StringSecurityDescriptor: LPWSTR;
  330.   StringSecurityDescriptorLen: PULONG): BOOL; stdcall;
  331. {$EXTERNALSYM ConvertSecurityDescriptorToStringSecurityDescriptorW}
  332. {$IFDEF UNICODE}
  333. function ConvertSecurityDescriptorToStringSecurityDescriptor(
  334.   SecurityDescriptor: PSECURITY_DESCRIPTOR; RequestedStringSDRevision: DWORD;
  335.   SecurityInformation: SECURITY_INFORMATION; var StringSecurityDescriptor: LPWSTR;
  336.   StringSecurityDescriptorLen: PULONG): BOOL; stdcall;
  337. {$EXTERNALSYM ConvertSecurityDescriptorToStringSecurityDescriptor}
  338. {$ELSE}
  339. function ConvertSecurityDescriptorToStringSecurityDescriptor(
  340.   SecurityDescriptor: PSECURITY_DESCRIPTOR; RequestedStringSDRevision: DWORD;
  341.   SecurityInformation: SECURITY_INFORMATION; var StringSecurityDescriptor: LPSTR;
  342.   StringSecurityDescriptorLen: PULONG): BOOL; stdcall;
  343. {$EXTERNALSYM ConvertSecurityDescriptorToStringSecurityDescriptor}
  344. {$ENDIF}
  345. implementation
  346. const
  347.   advapi32 = 'advapi32.dll';
  348. {$IFDEF DYNAMIC_LINK}
  349. var
  350.   _ConvertSidToStringSidA: Pointer;
  351. function ConvertSidToStringSidA;
  352. begin
  353.   GetProcedureAddress(_ConvertSidToStringSidA, advapi32, 'ConvertSidToStringSidA');
  354.   asm
  355.     mov esp, ebp
  356.     pop ebp
  357.     jmp [_ConvertSidToStringSidA]
  358.   end;
  359. end;
  360. {$ELSE}
  361. function ConvertSidToStringSidA; external advapi32 name 'ConvertSidToStringSidA';
  362. {$ENDIF DYNAMIC_LINK}
  363. {$IFDEF DYNAMIC_LINK}
  364. var
  365.   _ConvertSidToStringSidW: Pointer;
  366. function ConvertSidToStringSidW;
  367. begin
  368.   GetProcedureAddress(_ConvertSidToStringSidW, advapi32, 'ConvertSidToStringSidW');
  369.   asm
  370.     mov esp, ebp
  371.     pop ebp
  372.     jmp [_ConvertSidToStringSidW]
  373.   end;
  374. end;
  375. {$ELSE}
  376. function ConvertSidToStringSidW; external advapi32 name 'ConvertSidToStringSidW';
  377. {$ENDIF DYNAMIC_LINK}
  378. {$IFDEF UNICODE}
  379. {$IFDEF DYNAMIC_LINK}
  380. var
  381.   _ConvertSidToStringSid: Pointer;
  382. function ConvertSidToStringSid;
  383. begin
  384.   GetProcedureAddress(_ConvertSidToStringSid, advapi32, 'ConvertSidToStringSidW');
  385.   asm
  386.     mov esp, ebp
  387.     pop ebp
  388.     jmp [_ConvertSidToStringSid]
  389.   end;
  390. end;
  391. {$ELSE}
  392. function ConvertSidToStringSid; external advapi32 name 'ConvertSidToStringSidW';
  393. {$ENDIF DYNAMIC_LINK}
  394. {$ELSE}
  395. {$IFDEF DYNAMIC_LINK}
  396. var
  397.   _ConvertSidToStringSid: Pointer;
  398. function ConvertSidToStringSid;
  399. begin
  400.   GetProcedureAddress(_ConvertSidToStringSid, advapi32, 'ConvertSidToStringSidA');
  401.   asm
  402.     mov esp, ebp
  403.     pop ebp
  404.     jmp [_ConvertSidToStringSid]
  405.   end;
  406. end;
  407. {$ELSE}
  408. function ConvertSidToStringSid; external advapi32 name 'ConvertSidToStringSidA';
  409. {$ENDIF DYNAMIC_LINK}
  410. {$ENDIF}
  411. {$IFDEF DYNAMIC_LINK}
  412. var
  413.   _ConvertStringSidToSidA: Pointer;
  414. function ConvertStringSidToSidA;
  415. begin
  416.   GetProcedureAddress(_ConvertStringSidToSidA, advapi32, 'ConvertStringSidToSidA');
  417.   asm
  418.     mov esp, ebp
  419.     pop ebp
  420.     jmp [_ConvertStringSidToSidA]
  421.   end;
  422. end;
  423. {$ELSE}
  424. function ConvertStringSidToSidA; external advapi32 name 'ConvertStringSidToSidA';
  425. {$ENDIF DYNAMIC_LINK}
  426. {$IFDEF DYNAMIC_LINK}
  427. var
  428.   _ConvertStringSidToSidW: Pointer;
  429. function ConvertStringSidToSidW;
  430. begin
  431.   GetProcedureAddress(_ConvertStringSidToSidW, advapi32, 'ConvertStringSidToSidW');
  432.   asm
  433.     mov esp, ebp
  434.     pop ebp
  435.     jmp [_ConvertStringSidToSidW]
  436.   end;
  437. end;
  438. {$ELSE}
  439. function ConvertStringSidToSidW; external advapi32 name 'ConvertStringSidToSidW';
  440. {$ENDIF DYNAMIC_LINK}
  441. {$IFDEF UNICODE}
  442. {$IFDEF DYNAMIC_LINK}
  443. var
  444.   _ConvertStringSidToSid: Pointer;
  445. function ConvertStringSidToSid;
  446. begin
  447.   GetProcedureAddress(_ConvertStringSidToSid, advapi32, 'ConvertStringSidToSidW');
  448.   asm
  449.     mov esp, ebp
  450.     pop ebp
  451.     jmp [_ConvertStringSidToSid]
  452.   end;
  453. end;
  454. {$ELSE}
  455. function ConvertStringSidToSid; external advapi32 name 'ConvertStringSidToSidW';
  456. {$ENDIF DYNAMIC_LINK}
  457. {$ELSE}
  458. {$IFDEF DYNAMIC_LINK}
  459. var
  460.   _ConvertStringSidToSid: Pointer;
  461. function ConvertStringSidToSid;
  462. begin
  463.   GetProcedureAddress(_ConvertStringSidToSid, advapi32, 'ConvertStringSidToSidA');
  464.   asm
  465.     mov esp, ebp
  466.     pop ebp
  467.     jmp [_ConvertStringSidToSid]
  468.   end;
  469. end;
  470. {$ELSE}
  471. function ConvertStringSidToSid; external advapi32 name 'ConvertStringSidToSidA';
  472. {$ENDIF DYNAMIC_LINK}
  473. {$ENDIF}
  474. {$IFDEF DYNAMIC_LINK}
  475. var
  476.   _ConvStrSecDescrToSecDescrA: Pointer;
  477. function ConvertStringSecurityDescriptorToSecurityDescriptorA;
  478. begin
  479.   GetProcedureAddress(_ConvStrSecDescrToSecDescrA, advapi32, 'ConvertStringSecurityDescriptorToSecurityDescriptorA');
  480.   asm
  481.     mov esp, ebp
  482.     pop ebp
  483.     jmp [_ConvStrSecDescrToSecDescrA]
  484.   end;
  485. end;
  486. {$ELSE}
  487. function ConvertStringSecurityDescriptorToSecurityDescriptorA; external advapi32 name 'ConvertStringSecurityDescriptorToSecurityDescriptorA';
  488. {$ENDIF DYNAMIC_LINK}
  489. {$IFDEF DYNAMIC_LINK}
  490. var
  491.   _ConvStrSecDescrToSecDescrW: Pointer;
  492. function ConvertStringSecurityDescriptorToSecurityDescriptorW;
  493. begin
  494.   GetProcedureAddress(_ConvStrSecDescrToSecDescrW, advapi32, 'ConvertStringSecurityDescriptorToSecurityDescriptorW');
  495.   asm
  496.     mov esp, ebp
  497.     pop ebp
  498.     jmp [_ConvStrSecDescrToSecDescrW]
  499.   end;
  500. end;
  501. {$ELSE}
  502. function ConvertStringSecurityDescriptorToSecurityDescriptorW; external advapi32 name 'ConvertStringSecurityDescriptorToSecurityDescriptorW';
  503. {$ENDIF DYNAMIC_LINK}
  504. {$IFDEF UNICODE}
  505. {$IFDEF DYNAMIC_LINK}
  506. var
  507.   _ConvStrSecDescrToSecDescr: Pointer;
  508. function ConvertStringSecurityDescriptorToSecurityDescriptor;
  509. begin
  510.   GetProcedureAddress(_ConvStrSecDescrToSecDescr, advapi32, 'ConvertStringSecurityDescriptorToSecurityDescriptorW');
  511.   asm
  512.     mov esp, ebp
  513.     pop ebp
  514.     jmp [_ConvStrSecDescrToSecDescr]
  515.   end;
  516. end;
  517. {$ELSE}
  518. function ConvertStringSecurityDescriptorToSecurityDescriptor; external advapi32 name 'ConvertStringSecurityDescriptorToSecurityDescriptorW';
  519. {$ENDIF DYNAMIC_LINK}
  520. {$ELSE}
  521. {$IFDEF DYNAMIC_LINK}
  522. var
  523.   _ConvStrSecDescrToSecDescr: Pointer;
  524. function ConvertStringSecurityDescriptorToSecurityDescriptor;
  525. begin
  526.   GetProcedureAddress(_ConvStrSecDescrToSecDescr, advapi32, 'ConvertStringSecurityDescriptorToSecurityDescriptorA');
  527.   asm
  528.     mov esp, ebp
  529.     pop ebp
  530.     jmp [_ConvStrSecDescrToSecDescr]
  531.   end;
  532. end;
  533. {$ELSE}
  534. function ConvertStringSecurityDescriptorToSecurityDescriptor; external advapi32 name 'ConvertStringSecurityDescriptorToSecurityDescriptorA';
  535. {$ENDIF DYNAMIC_LINK}
  536. {$ENDIF}
  537. {$IFDEF DYNAMIC_LINK}
  538. var
  539.   _ConvSecDescrToStrSecDescrA: Pointer;
  540. function ConvertSecurityDescriptorToStringSecurityDescriptorA;
  541. begin
  542.   GetProcedureAddress(_ConvSecDescrToStrSecDescrA, advapi32, 'ConvertSecurityDescriptorToStringSecurityDescriptorA');
  543.   asm
  544.     mov esp, ebp
  545.     pop ebp
  546.     jmp [_ConvSecDescrToStrSecDescrA]
  547.   end;
  548. end;
  549. {$ELSE}
  550. function ConvertSecurityDescriptorToStringSecurityDescriptorA; external advapi32 name 'ConvertSecurityDescriptorToStringSecurityDescriptorA';
  551. {$ENDIF DYNAMIC_LINK}
  552. {$IFDEF DYNAMIC_LINK}
  553. var
  554.   _ConvSecDescrToStrSecDescrW: Pointer;
  555. function ConvertSecurityDescriptorToStringSecurityDescriptorW;
  556. begin
  557.   GetProcedureAddress(_ConvSecDescrToStrSecDescrW, advapi32, 'ConvertSecurityDescriptorToStringSecurityDescriptorW');
  558.   asm
  559.     mov esp, ebp
  560.     pop ebp
  561.     jmp [_ConvSecDescrToStrSecDescrW]
  562.   end;
  563. end;
  564. {$ELSE}
  565. function ConvertSecurityDescriptorToStringSecurityDescriptorW; external advapi32 name 'ConvertSecurityDescriptorToStringSecurityDescriptorW';
  566. {$ENDIF DYNAMIC_LINK}
  567. {$IFDEF UNICODE}
  568. {$IFDEF DYNAMIC_LINK}
  569. var
  570.   _ConvSecDescrToStrSecDescr: Pointer;
  571. function ConvertSecurityDescriptorToStringSecurityDescriptor;
  572. begin
  573.   GetProcedureAddress(_ConvSecDescrToStrSecDescr, advapi32, 'ConvertSecurityDescriptorToStringSecurityDescriptorW');
  574.   asm
  575.     mov esp, ebp
  576.     pop ebp
  577.     jmp [_ConvSecDescrToStrSecDescr]
  578.   end;
  579. end;
  580. {$ELSE}
  581. function ConvertSecurityDescriptorToStringSecurityDescriptor; external advapi32 name 'ConvertSecurityDescriptorToStringSecurityDescriptorW';
  582. {$ENDIF DYNAMIC_LINK}
  583. {$ELSE}
  584. {$IFDEF DYNAMIC_LINK}
  585. var
  586.   _ConvSecDescrToStrSecDescr: Pointer;
  587. function ConvertSecurityDescriptorToStringSecurityDescriptor;
  588. begin
  589.   GetProcedureAddress(_ConvSecDescrToStrSecDescr, advapi32, 'ConvertSecurityDescriptorToStringSecurityDescriptorA');
  590.   asm
  591.     mov esp, ebp
  592.     pop ebp
  593.     jmp [_ConvSecDescrToStrSecDescr]
  594.   end;
  595. end;
  596. {$ELSE}
  597. function ConvertSecurityDescriptorToStringSecurityDescriptor; external advapi32 name 'ConvertSecurityDescriptorToStringSecurityDescriptorA';
  598. {$ENDIF DYNAMIC_LINK}
  599. {$ENDIF}
  600. end.