jwaauthz.pas 26 KB

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