jwaauthz.pas 25 KB

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