jwaaccctrl.pas 40 KB

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