jwaaccctrl.pas 40 KB

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