jwaauthz.pas 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704
  1. {******************************************************************************}
  2. { }
  3. { Authorization Framework API interface Unit for Object Pascal }
  4. { }
  5. { Portions created by Microsoft are Copyright (C) 1995-2001 Microsoft }
  6. { Corporation. All Rights Reserved. }
  7. { }
  8. { The original file is: authz.h, released August 2001. The original Pascal }
  9. { code is: Authz.pas, released October 2001. The initial developer of the }
  10. { Pascal code is Marcel van Brakel (brakelm att chello dott nl). }
  11. { }
  12. { Portions created by Marcel van Brakel are Copyright (C) 1999-2001 }
  13. { Marcel van Brakel. All Rights Reserved. }
  14. { }
  15. { Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI) }
  16. { }
  17. { You may retrieve the latest version of this file at the Project JEDI }
  18. { APILIB home page, located at http://jedi-apilib.sourceforge.net }
  19. { }
  20. { The contents of this file are used with permission, subject to the Mozilla }
  21. { Public License Version 1.1 (the "License"); you may not use this file except }
  22. { in compliance with the License. You may obtain a copy of the License at }
  23. { http://www.mozilla.org/MPL/MPL-1.1.html }
  24. { }
  25. { Software distributed under the License is distributed on an "AS IS" basis, }
  26. { WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
  27. { the specific language governing rights and limitations under the License. }
  28. { }
  29. { Alternatively, the contents of this file may be used under the terms of the }
  30. { GNU Lesser General Public License (the "LGPL License"), in which case the }
  31. { provisions of the LGPL License are applicable instead of those above. }
  32. { If you wish to allow use of your version of this file only under the terms }
  33. { of the LGPL License and not to allow others to use your version of this file }
  34. { under the MPL, indicate your decision by deleting the provisions above and }
  35. { replace them with the notice and other provisions required by the LGPL }
  36. { License. If you do not delete the provisions above, a recipient may use }
  37. { your version of this file under either the MPL or the LGPL License. }
  38. { }
  39. { For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
  40. { }
  41. {******************************************************************************}
  42. unit JwaAuthz;
  43. {$WEAKPACKAGEUNIT}
  44. {$HPPEMIT ''}
  45. {$HPPEMIT '#include "authz.h"'}
  46. {$HPPEMIT ''}
  47. {$I jediapilib.inc}
  48. interface
  49. uses
  50. JwaWinNT, JwaWinType;
  51. //
  52. // Flags which may be used at the time of client context creation using a sid.
  53. //
  54. const
  55. AUTHZ_SKIP_TOKEN_GROUPS = $2;
  56. {$EXTERNALSYM AUTHZ_SKIP_TOKEN_GROUPS}
  57. AUTHZ_REQUIRE_S4U_LOGON = $4;
  58. {$EXTERNALSYM AUTHZ_REQUIRE_S4U_LOGON}
  59. type
  60. AUTHZ_ACCESS_CHECK_RESULTS_HANDLE = HANDLE;
  61. {$EXTERNALSYM AUTHZ_ACCESS_CHECK_RESULTS_HANDLE}
  62. AUTHZ_CLIENT_CONTEXT_HANDLE = HANDLE;
  63. {$EXTERNALSYM AUTHZ_CLIENT_CONTEXT_HANDLE}
  64. AUTHZ_RESOURCE_MANAGER_HANDLE = HANDLE;
  65. {$EXTERNALSYM AUTHZ_RESOURCE_MANAGER_HANDLE}
  66. AUTHZ_AUDIT_EVENT_HANDLE = HANDLE;
  67. {$EXTERNALSYM AUTHZ_AUDIT_EVENT_HANDLE}
  68. AUTHZ_AUDIT_EVENT_TYPE_HANDLE = HANDLE;
  69. {$EXTERNALSYM AUTHZ_AUDIT_EVENT_TYPE_HANDLE}
  70. AUTHZ_SECURITY_EVENT_PROVIDER_HANDLE = HANDLE;
  71. {$EXTERNALSYM AUTHZ_SECURITY_EVENT_PROVIDER_HANDLE}
  72. PAUTHZ_ACCESS_CHECK_RESULTS_HANDLE = ^AUTHZ_ACCESS_CHECK_RESULTS_HANDLE;
  73. {$EXTERNALSYM PAUTHZ_ACCESS_CHECK_RESULTS_HANDLE}
  74. PAUTHZ_CLIENT_CONTEXT_HANDLE = ^AUTHZ_CLIENT_CONTEXT_HANDLE;
  75. {$EXTERNALSYM PAUTHZ_CLIENT_CONTEXT_HANDLE}
  76. PAUTHZ_RESOURCE_MANAGER_HANDLE = ^AUTHZ_RESOURCE_MANAGER_HANDLE;
  77. {$EXTERNALSYM PAUTHZ_RESOURCE_MANAGER_HANDLE}
  78. PAUTHZ_AUDIT_EVENT_HANDLE = ^AUTHZ_AUDIT_EVENT_HANDLE;
  79. {$EXTERNALSYM PAUTHZ_AUDIT_EVENT_HANDLE}
  80. PAUTHZ_AUDIT_EVENT_TYPE_HANDLE = ^AUTHZ_AUDIT_EVENT_TYPE_HANDLE;
  81. {$EXTERNALSYM PAUTHZ_AUDIT_EVENT_TYPE_HANDLE}
  82. PAUTHZ_SECURITY_EVENT_PROVIDER_HANDLE = ^AUTHZ_SECURITY_EVENT_PROVIDER_HANDLE;
  83. {$EXTERNALSYM PAUTHZ_SECURITY_EVENT_PROVIDER_HANDLE}
  84. //
  85. // Structure defining the access check request.
  86. //
  87. PAUTHZ_ACCESS_REQUEST = ^AUTHZ_ACCESS_REQUEST;
  88. {$EXTERNALSYM PAUTHZ_ACCESS_REQUEST}
  89. _AUTHZ_ACCESS_REQUEST = record
  90. DesiredAccess: ACCESS_MASK;
  91. //
  92. // To replace the principal self sid in the acl.
  93. //
  94. PrincipalSelfSid: PSID;
  95. //
  96. // Object type list represented by an array of (level, guid) pair and the
  97. // number of elements in the array. This is a post-fix representation of the
  98. // object tree.
  99. // These fields should be set to NULL and 0 respectively except when per
  100. // property access is desired.
  101. //
  102. ObjectTypeList: POBJECT_TYPE_LIST;
  103. ObjectTypeListLength: DWORD;
  104. //
  105. // To support completely business rules based access. This will be passed as
  106. // input to the callback access check function. Access check algorithm does
  107. // not interpret these.
  108. //
  109. OptionalArguments: PVOID;
  110. end;
  111. {$EXTERNALSYM _AUTHZ_ACCESS_REQUEST}
  112. AUTHZ_ACCESS_REQUEST = _AUTHZ_ACCESS_REQUEST;
  113. {$EXTERNALSYM AUTHZ_ACCESS_REQUEST}
  114. TAuthzAccessRequest = AUTHZ_ACCESS_REQUEST;
  115. PAuthzAccessRequest = PAUTHZ_ACCESS_REQUEST;
  116. //
  117. // Structure to return the results of the access check call.
  118. //
  119. const
  120. AUTHZ_GENERATE_SUCCESS_AUDIT = $1;
  121. {$EXTERNALSYM AUTHZ_GENERATE_SUCCESS_AUDIT}
  122. AUTHZ_GENERATE_FAILURE_AUDIT = $2;
  123. {$EXTERNALSYM AUTHZ_GENERATE_FAILURE_AUDIT}
  124. type
  125. PAUTHZ_ACCESS_REPLY = ^AUTHZ_ACCESS_REPLY;
  126. {$EXTERNALSYM PAUTHZ_ACCESS_REPLY}
  127. _AUTHZ_ACCESS_REPLY = record
  128. //
  129. // The length of the array representing the object type list structure. If
  130. // no object type is used to represent the object, then the length must be
  131. // set to 1.
  132. //
  133. // Note: This parameter must be filled!
  134. //
  135. ResultListLength: DWORD;
  136. //
  137. // Array of granted access masks. This memory is allocated by the RM. Access
  138. // check routines just fill in the values.
  139. //
  140. GrantedAccessMask: PACCESS_MASK;
  141. //
  142. // Array of SACL evaluation results. This memory is allocated by the RM, if SACL
  143. // evaluation results are desired. Access check routines just fill in the values.
  144. // Sacl evaluation will only be performed if auditing is requested.
  145. //
  146. SaclEvaluationResults: PDWORD;
  147. //
  148. // Array of results for each element of the array. This memory is allocated
  149. // by the RM. Access check routines just fill in the values.
  150. //
  151. Error: PDWORD;
  152. end;
  153. {$EXTERNALSYM _AUTHZ_ACCESS_REPLY}
  154. AUTHZ_ACCESS_REPLY = _AUTHZ_ACCESS_REPLY;
  155. {$EXTERNALSYM AUTHZ_ACCESS_REPLY}
  156. TAuthzAccessReply = AUTHZ_ACCESS_REPLY;
  157. PAuthzAccessReply = PAUTHZ_ACCESS_REPLY;
  158. //
  159. // Typedefs for callback functions to be provided by the resource manager.
  160. //
  161. //
  162. // Callback access check function takes in
  163. // AuthzClientContext - a client context
  164. // pAce - pointer to a callback ace
  165. // pArgs - Optional arguments that were passed to AuthzAccessCheck thru
  166. // AuthzAccessRequest->OptionalArguments are passed back here.
  167. // pbAceApplicable - The resource manager must supply whether the ace should
  168. // be used in the computation of access evaluation
  169. //
  170. // Returns
  171. // TRUE if the API succeeded.
  172. // FALSE on any intermediate errors (like failed memory allocation)
  173. // In case of failure, the caller must use SetLastError(ErrorValue).
  174. //
  175. type
  176. PFN_AUTHZ_DYNAMIC_ACCESS_CHECK = function(hAuthzClientContext: AUTHZ_CLIENT_CONTEXT_HANDLE;
  177. pAce: PACE_HEADER; pArgs: PVOID; var pbAceApplicable: BOOL): BOOL; stdcall;
  178. {$EXTERNALSYM PFN_AUTHZ_DYNAMIC_ACCESS_CHECK}
  179. PFnAuthzDynamicAccessCheck = PFN_AUTHZ_DYNAMIC_ACCESS_CHECK;
  180. //
  181. // Callback compute dynamic groups function takes in
  182. // AuthzClientContext - a client context
  183. // pArgs - Optional arguments that supplied to AuthzInitializeClientContext*
  184. // thru DynamicGroupArgs are passed back here..
  185. // pSidAttrArray - To allocate and return an array of (sids, attribute)
  186. // pairs to be added to the normal part of the client context.
  187. // pSidCount - Number of elements in pSidAttrArray
  188. // pRestrictedSidAttrArray - To allocate and return an array of (sids, attribute)
  189. // pairs to be added to the restricted part of the client context.
  190. // pRestrictedSidCount - Number of elements in pRestrictedSidAttrArray
  191. //
  192. // Note:
  193. // Memory returned thru both these array will be freed by the callback
  194. // free function defined by the resource manager.
  195. //
  196. // Returns
  197. // TRUE if the API succeeded.
  198. // FALSE on any intermediate errors (like failed memory allocation)
  199. // In case of failure, the caller must use SetLastError(ErrorValue).
  200. //
  201. type
  202. PFN_AUTHZ_COMPUTE_DYNAMIC_GROUPS = function(hAuthzClientContext: AUTHZ_CLIENT_CONTEXT_HANDLE;
  203. Args: PVOID; var pSidAttrArray: PSID_AND_ATTRIBUTES; var pSidCount: DWORD;
  204. var pRestrictedSidAttrArray: PSID_AND_ATTRIBUTES; var pRestrictedSidCount: DWORD): BOOL; stdcall;
  205. {$EXTERNALSYM PFN_AUTHZ_COMPUTE_DYNAMIC_GROUPS}
  206. PFnAuthzComputeDynamicGroups = PFN_AUTHZ_COMPUTE_DYNAMIC_GROUPS;
  207. //
  208. // Callback free function takes in
  209. // pSidAttrArray - To be freed. This has been allocated by the compute
  210. // dynamic groups function.
  211. //
  212. PFN_AUTHZ_FREE_DYNAMIC_GROUPS = procedure(pSidAttrArray: PSID_AND_ATTRIBUTES); stdcall;
  213. {$EXTERNALSYM PFN_AUTHZ_FREE_DYNAMIC_GROUPS}
  214. PFnAuthzFreeDynamicGroups = PFN_AUTHZ_FREE_DYNAMIC_GROUPS;
  215. //
  216. // Valid flags for AuthzAccessCheck
  217. //
  218. const
  219. AUTHZ_ACCESS_CHECK_NO_DEEP_COPY_SD = $00000001;
  220. {$EXTERNALSYM AUTHZ_ACCESS_CHECK_NO_DEEP_COPY_SD}
  221. function AuthzAccessCheck(Flags: DWORD; hAuthzClientContext: AUTHZ_CLIENT_CONTEXT_HANDLE; pRequest: PAUTHZ_ACCESS_REQUEST;
  222. hAuditEvent: AUTHZ_AUDIT_EVENT_HANDLE; pSecurityDescriptor: PSECURITY_DESCRIPTOR; OptionalSecurityDescriptorArray: PPSECURITY_DESCRIPTOR;
  223. OptionalSecurityDescriptorCount: DWORD; pReply: PAUTHZ_ACCESS_REPLY; phAccessCheckResultsOPTIONAL: PAUTHZ_ACCESS_CHECK_RESULTS_HANDLE): BOOL; stdcall;
  224. {$EXTERNALSYM AuthzAccessCheck}
  225. function AuthzCachedAccessCheck(Flags: DWORD; hAccessCheckResults: AUTHZ_ACCESS_CHECK_RESULTS_HANDLE; pRequest: PAUTHZ_ACCESS_REQUEST; hAuditEvent: AUTHZ_AUDIT_EVENT_HANDLE; pReply: PAUTHZ_ACCESS_REPLY): BOOL; stdcall;
  226. {$EXTERNALSYM AuthzCachedAccessCheck}
  227. function AuthzOpenObjectAudit(Flags: DWORD; hAuthzClientContext: AUTHZ_CLIENT_CONTEXT_HANDLE; pRequest: PAUTHZ_ACCESS_REQUEST; hAuditEvent: AUTHZ_AUDIT_EVENT_HANDLE; pSecurityDescriptor: PSECURITY_DESCRIPTOR; OptionalSecurityDescriptorArray: PPSECURITY_DESCRIPTOR; OptionalSecurityDescriptorCount: DWORD; pReply: PAUTHZ_ACCESS_REPLY): BOOL; stdcall;
  228. {$EXTERNALSYM AuthzOpenObjectAudit}
  229. function AuthzFreeHandle(hAccessCheckResults: AUTHZ_ACCESS_CHECK_RESULTS_HANDLE): BOOL; stdcall;
  230. {$EXTERNALSYM AuthzFreeHandle}
  231. //
  232. // Flags for AuthzInitializeResourceManager
  233. //
  234. const
  235. AUTHZ_RM_FLAG_NO_AUDIT = $1;
  236. {$EXTERNALSYM AUTHZ_RM_FLAG_NO_AUDIT}
  237. AUTHZ_RM_FLAG_INITIALIZE_UNDER_IMPERSONATION = $2;
  238. {$EXTERNALSYM AUTHZ_RM_FLAG_INITIALIZE_UNDER_IMPERSONATION}
  239. AUTHZ_VALID_RM_INIT_FLAGS = AUTHZ_RM_FLAG_NO_AUDIT or AUTHZ_RM_FLAG_INITIALIZE_UNDER_IMPERSONATION;
  240. {$EXTERNALSYM AUTHZ_VALID_RM_INIT_FLAGS}
  241. function AuthzInitializeResourceManager(Flags: DWORD; pfnDynamicAccessCheck: PFN_AUTHZ_DYNAMIC_ACCESS_CHECK; pfnComputeDynamicGroups: PFN_AUTHZ_COMPUTE_DYNAMIC_GROUPS; pfnFreeDynamicGroups: PFN_AUTHZ_FREE_DYNAMIC_GROUPS; szResourceManagerName: LPCWSTR; phAuthzResourceManager: PAUTHZ_RESOURCE_MANAGER_HANDLE): BOOL; stdcall;
  242. {$EXTERNALSYM AuthzInitializeResourceManager}
  243. function AuthzFreeResourceManager(hAuthzResourceManager: AUTHZ_RESOURCE_MANAGER_HANDLE): BOOL; stdcall;
  244. {$EXTERNALSYM AuthzFreeResourceManager}
  245. function AuthzInitializeContextFromToken(Flags: DWORD; TokenHandle: HANDLE; hAuthzResourceManager: AUTHZ_RESOURCE_MANAGER_HANDLE; pExpirationTime: PLARGE_INTEGER; Identifier: LUID; DynamicGroupArgs: PVOID; phAuthzClientContext: PAUTHZ_CLIENT_CONTEXT_HANDLE): BOOL; stdcall;
  246. {$EXTERNALSYM AuthzInitializeContextFromToken}
  247. function AuthzInitializeContextFromSid(Flags: DWORD; UserSid: PSID; hAuthzResourceManager: AUTHZ_RESOURCE_MANAGER_HANDLE; pExpirationTime: PLARGE_INTEGER; Identifier: LUID; DynamicGroupArgs: PVOID; phAuthzClientContext: PAUTHZ_CLIENT_CONTEXT_HANDLE): BOOL; stdcall;
  248. {$EXTERNALSYM AuthzInitializeContextFromSid}
  249. function AuthzInitializeContextFromAuthzContext(Flags: DWORD; hAuthzClientContext: AUTHZ_CLIENT_CONTEXT_HANDLE; pExpirationTime: PLARGE_INTEGER; Identifier: LUID; DynamicGroupArgs: PVOID; phNewAuthzClientContext: PAUTHZ_CLIENT_CONTEXT_HANDLE): BOOL; stdcall;
  250. {$EXTERNALSYM AuthzInitializeContextFromAuthzContext}
  251. function AuthzAddSidsToContext(hAuthzClientContext: AUTHZ_CLIENT_CONTEXT_HANDLE; Sids: PSID_AND_ATTRIBUTES; SidCount: DWORD; RestrictedSids: PSID_AND_ATTRIBUTES; RestrictedSidCount: DWORD; phNewAuthzClientContext: PAUTHZ_CLIENT_CONTEXT_HANDLE): BOOL; stdcall;
  252. {$EXTERNALSYM AuthzAddSidsToContext}
  253. //
  254. // Enumeration type to be used to specify the type of information to be
  255. // retrieved from an existing AuthzClientContext.
  256. //
  257. type
  258. _AUTHZ_CONTEXT_INFORMATION_CLASS = (
  259. AuthzContextInfo__0,
  260. AuthzContextInfoUserSid,
  261. AuthzContextInfoGroupsSids,
  262. AuthzContextInfoRestrictedSids,
  263. AuthzContextInfoPrivileges,
  264. AuthzContextInfoExpirationTime,
  265. AuthzContextInfoServerContext,
  266. AuthzContextInfoIdentifier,
  267. AuthzContextInfoSource,
  268. AuthzContextInfoAll,
  269. AuthzContextInfoAuthenticationId);
  270. {$EXTERNALSYM _AUTHZ_CONTEXT_INFORMATION_CLASS}
  271. AUTHZ_CONTEXT_INFORMATION_CLASS = _AUTHZ_CONTEXT_INFORMATION_CLASS;
  272. {$EXTERNALSYM AUTHZ_CONTEXT_INFORMATION_CLASS}
  273. TAuthzContextInformationClass = AUTHZ_CONTEXT_INFORMATION_CLASS;
  274. function AuthzGetInformationFromContext(hAuthzClientContext: AUTHZ_CLIENT_CONTEXT_HANDLE;
  275. InfoClass: AUTHZ_CONTEXT_INFORMATION_CLASS; BufferSize: DWORD; pSizeRequired: PDWORD;
  276. Buffer: PVOID): BOOL; stdcall;
  277. {$EXTERNALSYM AuthzGetInformationFromContext}
  278. function AuthzFreeContext(hAuthzClientContext: AUTHZ_CLIENT_CONTEXT_HANDLE): BOOL; stdcall;
  279. {$EXTERNALSYM AuthzFreeContext}
  280. //
  281. // Valid flags that may be used in AuthzInitializeObjectAccessAuditEvent().
  282. //
  283. const
  284. AUTHZ_NO_SUCCESS_AUDIT = $00000001;
  285. {$EXTERNALSYM AUTHZ_NO_SUCCESS_AUDIT}
  286. AUTHZ_NO_FAILURE_AUDIT = $00000002;
  287. {$EXTERNALSYM AUTHZ_NO_FAILURE_AUDIT}
  288. AUTHZ_NO_ALLOC_STRINGS = $00000004;
  289. {$EXTERNALSYM AUTHZ_NO_ALLOC_STRINGS}
  290. AUTHZ_VALID_OBJECT_ACCESS_AUDIT_FLAGS = AUTHZ_NO_SUCCESS_AUDIT or AUTHZ_NO_FAILURE_AUDIT or AUTHZ_NO_ALLOC_STRINGS;
  291. {$EXTERNALSYM AUTHZ_VALID_OBJECT_ACCESS_AUDIT_FLAGS}
  292. function AuthzInitializeObjectAccessAuditEvent(Flags: DWORD; hAuditEventType: AUTHZ_AUDIT_EVENT_TYPE_HANDLE;
  293. szOperationType: PWSTR; szObjectType: PWSTR; szObjectName: PWSTR; szAdditionalInfo: PWSTR;
  294. phAuditEvent: PAUTHZ_AUDIT_EVENT_HANDLE; dwAdditionalParameterCount: DWORD {, ...}): BOOL; stdcall;
  295. {$EXTERNALSYM AuthzInitializeObjectAccessAuditEvent}
  296. function AuthzInitializeObjectAccessAuditEvent2(Flags: DWORD; hAuditEventType: AUTHZ_AUDIT_EVENT_TYPE_HANDLE;
  297. szOperationType: PWSTR; szObjectType: PWSTR; szObjectName: PWSTR; szAdditionalInfo, szAdditionalInfo2: PWSTR;
  298. phAuditEvent: PAUTHZ_AUDIT_EVENT_HANDLE; dwAdditionalParameterCount: DWORD {, ...}): BOOL; stdcall;
  299. {$EXTERNALSYM AuthzInitializeObjectAccessAuditEvent2}
  300. //
  301. // Enumeration type to be used to specify the type of information to be
  302. // retrieved from an existing AUTHZ_AUDIT_EVENT_HANDLE.
  303. //
  304. type
  305. _AUTHZ_AUDIT_EVENT_INFORMATION_CLASS = (
  306. AuthzAuditEvent__0,
  307. AuthzAuditEventInfoFlags,
  308. AuthzAuditEventInfoOperationType,
  309. AuthzAuditEventInfoObjectType,
  310. AuthzAuditEventInfoObjectName,
  311. AuthzAuditEventInfoAdditionalInfo);
  312. {$EXTERNALSYM _AUTHZ_AUDIT_EVENT_INFORMATION_CLASS}
  313. AUTHZ_AUDIT_EVENT_INFORMATION_CLASS = _AUTHZ_AUDIT_EVENT_INFORMATION_CLASS;
  314. {$EXTERNALSYM AUTHZ_AUDIT_EVENT_INFORMATION_CLASS}
  315. AuthzAuditEventInformationClass = AUTHZ_AUDIT_EVENT_INFORMATION_CLASS;
  316. // todo this one seems not to be exported from authz.dll
  317. function AuthzGetInformationFromAuditEvent(hAuditEvent: AUTHZ_AUDIT_EVENT_HANDLE; InfoClass: AUTHZ_AUDIT_EVENT_INFORMATION_CLASS; BufferSize: DWORD; pSizeRequired: PDWORD; Buffer: PVOID): BOOL; stdcall;
  318. {$EXTERNALSYM AuthzGetInformationFromAuditEvent}
  319. function AuthzFreeAuditEvent(hAuditEvent: AUTHZ_AUDIT_EVENT_HANDLE): BOOL; stdcall;
  320. {$EXTERNALSYM AuthzFreeAuditEvent}
  321. (* TODO
  322. //
  323. // Support for generic auditing.
  324. //
  325. typedef struct _AUTHZ_REGISTRATION_OBJECT_TYPE_NAME_OFFSET
  326. {
  327. PWSTR szObjectTypeName;
  328. DWORD dwOffset;
  329. } AUTHZ_REGISTRATION_OBJECT_TYPE_NAME_OFFSET, *PAUTHZ_REGISTRATION_OBJECT_TYPE_NAME_OFFSET;
  330. typedef struct _AUTHZ_SOURCE_SCHEMA_REGISTRATION
  331. {
  332. DWORD dwFlags;
  333. PWSTR szEventSourceName;
  334. PWSTR szEventMessageFile;
  335. PWSTR szEventSourceXmlSchemaFile;
  336. PWSTR szEventAccessStringsFile;
  337. PWSTR szExecutableImagePath;
  338. PVOID pReserved;
  339. DWORD dwObjectTypeNameCount;
  340. AUTHZ_REGISTRATION_OBJECT_TYPE_NAME_OFFSET ObjectTypeNames[ANYSIZE_ARRAY];
  341. } AUTHZ_SOURCE_SCHEMA_REGISTRATION, *PAUTHZ_SOURCE_SCHEMA_REGISTRATION;
  342. #define AUTHZ_FLAG_ALLOW_MULTIPLE_SOURCE_INSTANCES 0x1
  343. AUTHZAPI
  344. BOOL
  345. WINAPI
  346. AuthzInstallSecurityEventSource(
  347. IN DWORD dwFlags,
  348. IN PAUTHZ_SOURCE_SCHEMA_REGISTRATION pRegistration
  349. );
  350. AUTHZAPI
  351. BOOL
  352. WINAPI
  353. AuthzUninstallSecurityEventSource(
  354. IN DWORD dwFlags,
  355. IN PCWSTR szEventSourceName
  356. );
  357. AUTHZAPI
  358. BOOL
  359. WINAPI
  360. AuthzEnumerateSecurityEventSources(
  361. IN DWORD dwFlags,
  362. OUT PAUTHZ_SOURCE_SCHEMA_REGISTRATION Buffer,
  363. OUT PDWORD pdwCount,
  364. IN OUT PDWORD pdwLength
  365. );
  366. AUTHZAPI
  367. BOOL
  368. WINAPI
  369. AuthzRegisterSecurityEventSource(
  370. IN DWORD dwFlags,
  371. IN PCWSTR szEventSourceName,
  372. OUT PAUTHZ_SECURITY_EVENT_PROVIDER_HANDLE phEventProvider
  373. );
  374. AUTHZAPI
  375. BOOL
  376. WINAPI
  377. AuthzUnregisterSecurityEventSource(
  378. IN DWORD dwFlags,
  379. IN OUT PAUTHZ_SECURITY_EVENT_PROVIDER_HANDLE phEventProvider
  380. );
  381. AUTHZAPI
  382. BOOL
  383. WINAPI
  384. AuthzReportSecurityEvent(
  385. IN DWORD dwFlags,
  386. IN OUT AUTHZ_SECURITY_EVENT_PROVIDER_HANDLE hEventProvider,
  387. IN DWORD dwAuditId,
  388. IN PSID pUserSid OPTIONAL,
  389. IN DWORD dwCount,
  390. ...
  391. );
  392. AUTHZAPI
  393. BOOL
  394. WINAPI
  395. AuthzReportSecurityEventFromParams(
  396. IN DWORD dwFlags,
  397. IN OUT AUTHZ_SECURITY_EVENT_PROVIDER_HANDLE hEventProvider,
  398. IN DWORD dwAuditId,
  399. IN PSID pUserSid OPTIONAL,
  400. IN PAUDIT_PARAMS pParams
  401. );
  402. *)
  403. implementation
  404. const
  405. authzlib = 'authz.dll';
  406. {$IFDEF DYNAMIC_LINK}
  407. var
  408. _AuthzAccessCheck: Pointer;
  409. function AuthzAccessCheck;
  410. begin
  411. GetProcedureAddress(_AuthzAccessCheck, authzlib, 'AuthzAccessCheck');
  412. asm
  413. MOV ESP, EBP
  414. POP EBP
  415. JMP [_AuthzAccessCheck]
  416. end;
  417. end;
  418. var
  419. _AuthzCachedAccessCheck: Pointer;
  420. function AuthzCachedAccessCheck;
  421. begin
  422. GetProcedureAddress(_AuthzCachedAccessCheck, authzlib, 'AuthzCachedAccessCheck');
  423. asm
  424. MOV ESP, EBP
  425. POP EBP
  426. JMP [_AuthzCachedAccessCheck]
  427. end;
  428. end;
  429. var
  430. _AuthzOpenObjectAudit: Pointer;
  431. function AuthzOpenObjectAudit;
  432. begin
  433. GetProcedureAddress(_AuthzOpenObjectAudit, authzlib, 'AuthzOpenObjectAudit');
  434. asm
  435. MOV ESP, EBP
  436. POP EBP
  437. JMP [_AuthzOpenObjectAudit]
  438. end;
  439. end;
  440. var
  441. _AuthzFreeHandle: Pointer;
  442. function AuthzFreeHandle;
  443. begin
  444. GetProcedureAddress(_AuthzFreeHandle, authzlib, 'AuthzFreeHandle');
  445. asm
  446. MOV ESP, EBP
  447. POP EBP
  448. JMP [_AuthzFreeHandle]
  449. end;
  450. end;
  451. var
  452. _AuthzInitializeResourceManager: Pointer;
  453. function AuthzInitializeResourceManager;
  454. begin
  455. GetProcedureAddress(_AuthzInitializeResourceManager, authzlib, 'AuthzInitializeResourceManager');
  456. asm
  457. MOV ESP, EBP
  458. POP EBP
  459. JMP [_AuthzInitializeResourceManager]
  460. end;
  461. end;
  462. var
  463. _AuthzFreeResourceManager: Pointer;
  464. function AuthzFreeResourceManager;
  465. begin
  466. GetProcedureAddress(_AuthzFreeResourceManager, authzlib, 'AuthzFreeResourceManager');
  467. asm
  468. MOV ESP, EBP
  469. POP EBP
  470. JMP [_AuthzFreeResourceManager]
  471. end;
  472. end;
  473. var
  474. _AuthzInitializeContextFromToken: Pointer;
  475. function AuthzInitializeContextFromToken;
  476. begin
  477. GetProcedureAddress(_AuthzInitializeContextFromToken, authzlib, 'AuthzInitializeContextFromToken');
  478. asm
  479. MOV ESP, EBP
  480. POP EBP
  481. JMP [_AuthzInitializeContextFromToken]
  482. end;
  483. end;
  484. var
  485. _AuthzInitializeContextFromSid: Pointer;
  486. function AuthzInitializeContextFromSid;
  487. begin
  488. GetProcedureAddress(_AuthzInitializeContextFromSid, authzlib, 'AuthzInitializeContextFromSid');
  489. asm
  490. MOV ESP, EBP
  491. POP EBP
  492. JMP [_AuthzInitializeContextFromSid]
  493. end;
  494. end;
  495. var
  496. _AuthzInitCxtFromAuthzCxt: Pointer;
  497. function AuthzInitializeContextFromAuthzContext;
  498. begin
  499. GetProcedureAddress(_AuthzInitCxtFromAuthzCxt, authzlib, 'AuthzInitializeContextFromAuthzContext');
  500. asm
  501. MOV ESP, EBP
  502. POP EBP
  503. JMP [_AuthzInitCxtFromAuthzCxt]
  504. end;
  505. end;
  506. var
  507. _AuthzAddSidsToContext: Pointer;
  508. function AuthzAddSidsToContext;
  509. begin
  510. GetProcedureAddress(_AuthzAddSidsToContext, authzlib, 'AuthzAddSidsToContext');
  511. asm
  512. MOV ESP, EBP
  513. POP EBP
  514. JMP [_AuthzAddSidsToContext]
  515. end;
  516. end;
  517. var
  518. _AuthzGetInformationFromContext: Pointer;
  519. function AuthzGetInformationFromContext;
  520. begin
  521. GetProcedureAddress(_AuthzGetInformationFromContext, authzlib, 'AuthzGetInformationFromContext');
  522. asm
  523. MOV ESP, EBP
  524. POP EBP
  525. JMP [_AuthzGetInformationFromContext]
  526. end;
  527. end;
  528. var
  529. _AuthzFreeContext: Pointer;
  530. function AuthzFreeContext;
  531. begin
  532. GetProcedureAddress(_AuthzFreeContext, authzlib, 'AuthzFreeContext');
  533. asm
  534. MOV ESP, EBP
  535. POP EBP
  536. JMP [_AuthzFreeContext]
  537. end;
  538. end;
  539. var
  540. _AuthzInitObjAccAuditEvent: Pointer;
  541. function AuthzInitializeObjectAccessAuditEvent;
  542. begin
  543. GetProcedureAddress(_AuthzInitObjAccAuditEvent, authzlib, 'AuthzInitializeObjectAccessAuditEvent');
  544. asm
  545. MOV ESP, EBP
  546. POP EBP
  547. JMP [_AuthzInitObjAccAuditEvent]
  548. end;
  549. end;
  550. var
  551. _AuthzInitObjAccAuditEvent2: Pointer;
  552. function AuthzInitializeObjectAccessAuditEvent2;
  553. begin
  554. GetProcedureAddress(_AuthzInitObjAccAuditEvent2, authzlib, 'AuthzInitializeObjectAccessAuditEvent2');
  555. asm
  556. MOV ESP, EBP
  557. POP EBP
  558. JMP [_AuthzInitObjAccAuditEvent2]
  559. end;
  560. end;
  561. var
  562. _AuthzGetInfoFromAuditEvent: Pointer;
  563. function AuthzGetInformationFromAuditEvent;
  564. begin
  565. GetProcedureAddress(_AuthzGetInfoFromAuditEvent, authzlib, 'AuthzGetInformationFromAuditEvent');
  566. asm
  567. MOV ESP, EBP
  568. POP EBP
  569. JMP [_AuthzGetInfoFromAuditEvent]
  570. end;
  571. end;
  572. var
  573. _AuthzFreeAuditEvent: Pointer;
  574. function AuthzFreeAuditEvent;
  575. begin
  576. GetProcedureAddress(_AuthzFreeAuditEvent, authzlib, 'AuthzFreeAuditEvent');
  577. asm
  578. MOV ESP, EBP
  579. POP EBP
  580. JMP [_AuthzFreeAuditEvent]
  581. end;
  582. end;
  583. {$ELSE}
  584. function AuthzAccessCheck; external authzlib name 'AuthzAccessCheck';
  585. function AuthzCachedAccessCheck; external authzlib name 'AuthzCachedAccessCheck';
  586. function AuthzOpenObjectAudit; external authzlib name 'AuthzOpenObjectAudit';
  587. function AuthzFreeHandle; external authzlib name 'AuthzFreeHandle';
  588. function AuthzInitializeResourceManager; external authzlib name 'AuthzInitializeResourceManager';
  589. function AuthzFreeResourceManager; external authzlib name 'AuthzFreeResourceManager';
  590. function AuthzInitializeContextFromToken; external authzlib name 'AuthzInitializeContextFromToken';
  591. function AuthzInitializeContextFromSid; external authzlib name 'AuthzInitializeContextFromSid';
  592. function AuthzInitializeContextFromAuthzContext; external authzlib name 'AuthzInitializeContextFromAuthzContext';
  593. function AuthzAddSidsToContext; external authzlib name 'AuthzAddSidsToContext';
  594. function AuthzGetInformationFromContext; external authzlib name 'AuthzGetInformationFromContext';
  595. function AuthzFreeContext; external authzlib name 'AuthzFreeContext';
  596. function AuthzInitializeObjectAccessAuditEvent; external authzlib name 'AuthzInitializeObjectAccessAuditEvent';
  597. function AuthzInitializeObjectAccessAuditEvent2; external authzlib name 'AuthzInitializeObjectAccessAuditEvent2';
  598. function AuthzGetInformationFromAuditEvent; external authzlib name 'AuthzGetInformationFromAuditEvent';
  599. function AuthzFreeAuditEvent; external authzlib name 'AuthzFreeAuditEvent';
  600. {$ENDIF DYNAMIC_LINK}
  601. end.