AuthZ.h
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:13k
源码类别:

模拟服务器

开发平台:

C/C++

  1. /*++
  2. Copyright (c) 2000 Microsoft Corporation
  3. Module Name:
  4.     authz.h
  5. Abstract:
  6.     This module contains the authorization framework APIs and any public data
  7.     structures needed to call these APIs.
  8. Author:
  9.     Kedar Dubhashi - March 2000
  10. Revision History:
  11.     Created - March 2000
  12. --*/
  13. #ifndef __AUTHZ_H__
  14. #define __AUTHZ_H__
  15. #ifdef __cplusplus
  16. extern "C" {
  17. #endif
  18. #if !defined(_AUTHZ_)
  19. #define AUTHZAPI DECLSPEC_IMPORT
  20. #else 
  21. #define AUTHZAPI
  22. #endif
  23. #include <windows.h>
  24. #include <adtgen.h>
  25. //
  26. // Flags which may be used at the time of client context creation using a sid.
  27. //
  28. #define AUTHZ_SKIP_TOKEN_GROUPS  0x2
  29.               
  30. DECLARE_HANDLE(AUTHZ_ACCESS_CHECK_RESULTS_HANDLE);
  31. DECLARE_HANDLE(AUTHZ_CLIENT_CONTEXT_HANDLE);
  32. DECLARE_HANDLE(AUTHZ_RESOURCE_MANAGER_HANDLE);
  33. DECLARE_HANDLE(AUTHZ_AUDIT_EVENT_HANDLE);
  34. DECLARE_HANDLE(AUTHZ_AUDIT_EVENT_TYPE_HANDLE);
  35. typedef AUTHZ_ACCESS_CHECK_RESULTS_HANDLE *PAUTHZ_ACCESS_CHECK_RESULTS_HANDLE;
  36. typedef AUTHZ_CLIENT_CONTEXT_HANDLE       *PAUTHZ_CLIENT_CONTEXT_HANDLE;
  37. typedef AUTHZ_RESOURCE_MANAGER_HANDLE     *PAUTHZ_RESOURCE_MANAGER_HANDLE;
  38. typedef AUTHZ_AUDIT_EVENT_HANDLE          *PAUTHZ_AUDIT_EVENT_HANDLE;
  39. typedef AUTHZ_AUDIT_EVENT_TYPE_HANDLE     *PAUTHZ_AUDIT_EVENT_TYPE_HANDLE;
  40. //
  41. // Structure defining the access check request.
  42. //
  43. typedef struct _AUTHZ_ACCESS_REQUEST
  44. {
  45.     ACCESS_MASK DesiredAccess;
  46.     //
  47.     // To replace the principal self sid in the acl.
  48.     //
  49.     PSID PrincipalSelfSid;
  50.     //
  51.     // Object type list represented by an array of (level, guid) pair and the
  52.     // number of elements in the array. This is a post-fix representation of the
  53.     // object tree.
  54.     // These fields should be set to NULL and 0 respectively except when per
  55.     // property access is desired.
  56.     //
  57.     POBJECT_TYPE_LIST ObjectTypeList;
  58.     DWORD ObjectTypeListLength;
  59.     //
  60.     // To support completely business rules based access. This will be passed as
  61.     // input to the callback access check function. Access check algorithm does
  62.     // not interpret these.
  63.     //
  64.     PVOID OptionalArguments;
  65.     
  66. } AUTHZ_ACCESS_REQUEST, *PAUTHZ_ACCESS_REQUEST;
  67. //
  68. // Structure to return the results of the access check call.
  69. //
  70. typedef struct _AUTHZ_ACCESS_REPLY
  71. {
  72.     //
  73.     // The length of the array representing the object type list structure. If
  74.     // no object type is used to represent the object, then the length must be
  75.     // set to 1.
  76.     //
  77.     // Note: This parameter must be filled!
  78.     //
  79.     DWORD ResultListLength;
  80.     //
  81.     // Array of granted access masks. This memory is allocated by the RM. Access
  82.     // check routines just fill in the values.
  83.     //
  84.     PACCESS_MASK GrantedAccessMask;
  85.     
  86.     //
  87.     // Array of SACL evaluation results.  This memory is allocated by the RM, if SACL
  88.     // evaluation results are desired. Access check routines just fill in the values.
  89.     // Sacl evaluation will only be performed if auditing is requested.
  90.     //
  91.     
  92. #define AUTHZ_GENERATE_SUCCESS_AUDIT 0x1
  93. #define AUTHZ_GENERATE_FAILURE_AUDIT 0x2
  94.     PDWORD SaclEvaluationResults OPTIONAL;
  95.     
  96.     //
  97.     // Array of results for each element of the array. This memory is allocated
  98.     // by the RM. Access check routines just fill in the values.
  99.     //
  100.     PDWORD Error;
  101. } AUTHZ_ACCESS_REPLY, *PAUTHZ_ACCESS_REPLY;
  102. //
  103. // Typedefs for callback functions to be provided by the resource manager.
  104. //
  105. //
  106. // Callback access check function takes in
  107. //     AuthzClientContext - a client context
  108. //     pAce - pointer to a callback ace
  109. //     pArgs - Optional arguments that were passed to AuthzAccessCheck thru
  110. //             AuthzAccessRequest->OptionalArguments are passed back here.
  111. //     pbAceApplicable - The resource manager must supply whether the ace should
  112. //         be used in the computation of access evaluation
  113. //
  114. // Returns
  115. //     TRUE if the API succeeded.
  116. //     FALSE on any intermediate errors (like failed memory allocation)
  117. //         In case of failure, the caller must use SetLastError(ErrorValue).
  118. //
  119. typedef BOOL (CALLBACK *PFN_AUTHZ_DYNAMIC_ACCESS_CHECK) (
  120.                   IN AUTHZ_CLIENT_CONTEXT_HANDLE hAuthzClientContext,
  121.                   IN PACE_HEADER                 pAce,
  122.                   IN PVOID                       pArgs                OPTIONAL,
  123.                   IN OUT PBOOL                   pbAceApplicable
  124.                   );
  125. //
  126. // Callback compute dynamic groups function takes in
  127. //     AuthzClientContext - a client context
  128. //     pArgs - Optional arguments that supplied to AuthzInitializeClientContext*
  129. //         thru DynamicGroupArgs are passed back here..
  130. //     pSidAttrArray - To allocate and return an array of (sids, attribute)
  131. //         pairs to be added to the normal part of the client context.
  132. //     pSidCount - Number of elements in pSidAttrArray
  133. //     pRestrictedSidAttrArray - To allocate and return an array of (sids, attribute)
  134. //         pairs to be added to the restricted part of the client context.
  135. //     pRestrictedSidCount - Number of elements in pRestrictedSidAttrArray
  136. //
  137. // Note:
  138. //    Memory returned thru both these array will be freed by the callback
  139. //    free function defined by the resource manager.
  140. //
  141. // Returns
  142. //     TRUE if the API succeeded.
  143. //     FALSE on any intermediate errors (like failed memory allocation)
  144. //         In case of failure, the caller must use SetLastError(ErrorValue).
  145. //
  146. typedef BOOL (CALLBACK *PFN_AUTHZ_COMPUTE_DYNAMIC_GROUPS) (
  147.                   IN  AUTHZ_CLIENT_CONTEXT_HANDLE hAuthzClientContext,
  148.                   IN  PVOID                       Args,
  149.                   OUT PSID_AND_ATTRIBUTES         *pSidAttrArray,
  150.                   OUT PDWORD                      pSidCount,
  151.                   OUT PSID_AND_ATTRIBUTES         *pRestrictedSidAttrArray,
  152.                   OUT PDWORD                      pRestrictedSidCount
  153.                   );
  154. //
  155. // Callback free function takes in
  156. //     pSidAttrArray - To be freed. This has been allocated by the compute
  157. //     dynamic groups function.
  158. //
  159. typedef VOID (CALLBACK *PFN_AUTHZ_FREE_DYNAMIC_GROUPS) (
  160.                   IN PSID_AND_ATTRIBUTES pSidAttrArray
  161.                   );
  162. //
  163. // Valid flags for AuthzAccessCheck
  164. //
  165. #define AUTHZ_ACCESS_CHECK_NO_DEEP_COPY_SD 0x00000001
  166. AUTHZAPI
  167. BOOL
  168. WINAPI
  169. AuthzAccessCheck(
  170.     IN     DWORD                              Flags,
  171.     IN     AUTHZ_CLIENT_CONTEXT_HANDLE        hAuthzClientContext,
  172.     IN     PAUTHZ_ACCESS_REQUEST              pRequest,
  173.     IN     AUTHZ_AUDIT_EVENT_HANDLE           hAuditEvent                      OPTIONAL,
  174.     IN     PSECURITY_DESCRIPTOR               pSecurityDescriptor,
  175.     IN     PSECURITY_DESCRIPTOR               *OptionalSecurityDescriptorArray OPTIONAL,
  176.     IN     DWORD                              OptionalSecurityDescriptorCount,
  177.     IN OUT PAUTHZ_ACCESS_REPLY                pReply,
  178.     OUT    PAUTHZ_ACCESS_CHECK_RESULTS_HANDLE phAccessCheckResults             OPTIONAL
  179.     );
  180. AUTHZAPI
  181. BOOL
  182. WINAPI
  183. AuthzCachedAccessCheck(
  184.     IN     DWORD                             Flags,
  185.     IN     AUTHZ_ACCESS_CHECK_RESULTS_HANDLE hAccessCheckResults,
  186.     IN     PAUTHZ_ACCESS_REQUEST             pRequest,
  187.     IN     AUTHZ_AUDIT_EVENT_HANDLE          hAuditEvent          OPTIONAL,
  188.     IN OUT PAUTHZ_ACCESS_REPLY               pReply
  189.     );
  190. AUTHZAPI
  191. BOOL
  192. WINAPI
  193. AuthzOpenObjectAudit(
  194.     IN DWORD                       Flags,
  195.     IN AUTHZ_CLIENT_CONTEXT_HANDLE hAuthzClientContext,
  196.     IN PAUTHZ_ACCESS_REQUEST       pRequest,
  197.     IN AUTHZ_AUDIT_EVENT_HANDLE    hAuditEvent,
  198.     IN PSECURITY_DESCRIPTOR        pSecurityDescriptor,
  199.     IN PSECURITY_DESCRIPTOR        *OptionalSecurityDescriptorArray OPTIONAL,
  200.     IN DWORD                       OptionalSecurityDescriptorCount,
  201.     IN PAUTHZ_ACCESS_REPLY         pReply
  202.     );
  203. AUTHZAPI
  204. BOOL
  205. WINAPI
  206. AuthzFreeHandle(
  207.     IN OUT AUTHZ_ACCESS_CHECK_RESULTS_HANDLE hAccessCheckResults
  208.     );
  209. //
  210. // Flags for AuthzInitializeResourceManager
  211. //
  212. #define AUTHZ_RM_FLAG_NO_AUDIT 0x1
  213. #define AUTHZ_VALID_RM_INIT_FLAGS (AUTHZ_RM_FLAG_NO_AUDIT)
  214. AUTHZAPI
  215. BOOL
  216. WINAPI
  217. AuthzInitializeResourceManager(
  218.     IN DWORD                            Flags,
  219.     IN PFN_AUTHZ_DYNAMIC_ACCESS_CHECK   pfnDynamicAccessCheck   OPTIONAL,
  220.     IN PFN_AUTHZ_COMPUTE_DYNAMIC_GROUPS pfnComputeDynamicGroups OPTIONAL,
  221.     IN PFN_AUTHZ_FREE_DYNAMIC_GROUPS    pfnFreeDynamicGroups    OPTIONAL,
  222.     IN PCWSTR                           szResourceManagerName,
  223.     OUT PAUTHZ_RESOURCE_MANAGER_HANDLE  phAuthzResourceManager
  224.     );
  225. AUTHZAPI
  226. BOOL
  227. WINAPI
  228. AuthzFreeResourceManager(
  229.     IN AUTHZ_RESOURCE_MANAGER_HANDLE hAuthzResourceManager
  230.     );
  231. AUTHZAPI
  232. BOOL
  233. WINAPI
  234. AuthzInitializeContextFromToken(
  235.     IN  DWORD                         Flags,
  236.     IN  HANDLE                        TokenHandle,
  237.     IN  AUTHZ_RESOURCE_MANAGER_HANDLE hAuthzResourceManager,
  238.     IN  PLARGE_INTEGER                pExpirationTime        OPTIONAL,
  239.     IN  LUID                          Identifier,
  240.     IN  PVOID                         DynamicGroupArgs       OPTIONAL,
  241.     OUT PAUTHZ_CLIENT_CONTEXT_HANDLE  phAuthzClientContext
  242.     );
  243. AUTHZAPI
  244. BOOL
  245. WINAPI
  246. AuthzInitializeContextFromSid(
  247.     IN  DWORD                         Flags,
  248.     IN  PSID                          UserSid,
  249.     IN  AUTHZ_RESOURCE_MANAGER_HANDLE hAuthzResourceManager,
  250.     IN  PLARGE_INTEGER                pExpirationTime        OPTIONAL,
  251.     IN  LUID                          Identifier,
  252.     IN  PVOID                         DynamicGroupArgs       OPTIONAL,
  253.     OUT PAUTHZ_CLIENT_CONTEXT_HANDLE  phAuthzClientContext
  254.     );
  255. AUTHZAPI
  256. BOOL
  257. WINAPI
  258. AuthzInitializeContextFromAuthzContext(
  259.     IN  DWORD                        Flags,
  260.     IN  AUTHZ_CLIENT_CONTEXT_HANDLE  hAuthzClientContext,
  261.     IN  PLARGE_INTEGER               pExpirationTime         OPTIONAL,
  262.     IN  LUID                         Identifier,
  263.     IN  PVOID                        DynamicGroupArgs,
  264.     OUT PAUTHZ_CLIENT_CONTEXT_HANDLE phNewAuthzClientContext
  265.     );
  266. AUTHZAPI
  267. BOOL
  268. WINAPI
  269. AuthzAddSidsToContext(
  270.     IN  AUTHZ_CLIENT_CONTEXT_HANDLE  hAuthzClientContext,
  271.     IN  PSID_AND_ATTRIBUTES          Sids                    OPTIONAL,
  272.     IN  DWORD                        SidCount,
  273.     IN  PSID_AND_ATTRIBUTES          RestrictedSids          OPTIONAL,
  274.     IN  DWORD                        RestrictedSidCount,
  275.     OUT PAUTHZ_CLIENT_CONTEXT_HANDLE phNewAuthzClientContext
  276.     );
  277. //
  278. // Enumeration type to be used to specify the type of information to be
  279. // retrieved from an existing AuthzClientContext.
  280. //
  281. typedef enum _AUTHZ_CONTEXT_INFORMATION_CLASS
  282. {
  283.     AuthzContextInfoUserSid = 1,
  284.     AuthzContextInfoGroupsSids,
  285.     AuthzContextInfoRestrictedSids,
  286.     AuthzContextInfoPrivileges,
  287.     AuthzContextInfoExpirationTime,
  288.     AuthzContextInfoServerContext,
  289.     AuthzContextInfoIdentifier,
  290.     AuthzContextInfoSource,
  291.     AuthzContextInfoAll
  292. } AUTHZ_CONTEXT_INFORMATION_CLASS;
  293. AUTHZAPI
  294. BOOL
  295. WINAPI
  296. AuthzGetInformationFromContext(
  297.     IN  AUTHZ_CLIENT_CONTEXT_HANDLE     hAuthzClientContext,
  298.     IN  AUTHZ_CONTEXT_INFORMATION_CLASS InfoClass,
  299.     IN  DWORD                           BufferSize,
  300.     OUT PDWORD                          pSizeRequired,
  301.     OUT PVOID                           Buffer
  302. );
  303. AUTHZAPI
  304. BOOL
  305. WINAPI
  306. AuthzFreeContext(
  307.     IN AUTHZ_CLIENT_CONTEXT_HANDLE hAuthzClientContext
  308.     );
  309. //
  310. // Valid flags that may be used in AuthzInitializeObjectAccessAuditEvent().
  311. //
  312. #define AUTHZ_NO_SUCCESS_AUDIT                   0x00000001
  313. #define AUTHZ_NO_FAILURE_AUDIT                   0x00000002
  314. #define AUTHZ_NO_ALLOC_STRINGS                   0x00000004
  315. #define AUTHZ_VALID_OBJECT_ACCESS_AUDIT_FLAGS    (AUTHZ_NO_SUCCESS_AUDIT | 
  316.                                                   AUTHZ_NO_FAILURE_AUDIT | 
  317.                                                   AUTHZ_NO_ALLOC_STRINGS)
  318. AUTHZAPI
  319. BOOL
  320. WINAPI
  321. AuthzInitializeObjectAccessAuditEvent(
  322.     IN  DWORD                         Flags,
  323.     IN  AUTHZ_AUDIT_EVENT_TYPE_HANDLE hAuditEventType,
  324.     IN  PWSTR                         szOperationType,
  325.     IN  PWSTR                         szObjectType,
  326.     IN  PWSTR                         szObjectName,
  327.     IN  PWSTR                         szAdditionalInfo,
  328.     OUT PAUTHZ_AUDIT_EVENT_HANDLE     phAuditEvent,
  329.     IN  DWORD                         dwAdditionalParameterCount,
  330.     ...
  331.     );
  332.     
  333. //
  334. // Enumeration type to be used to specify the type of information to be
  335. // retrieved from an existing AUTHZ_AUDIT_EVENT_HANDLE.
  336. //
  337. typedef enum _AUTHZ_AUDIT_EVENT_INFORMATION_CLASS
  338. {
  339.     AuthzAuditEventInfoFlags = 1,
  340.     AuthzAuditEventInfoOperationType,
  341.     AuthzAuditEventInfoObjectType,
  342.     AuthzAuditEventInfoObjectName,
  343.     AuthzAuditEventInfoAdditionalInfo,
  344. } AUTHZ_AUDIT_EVENT_INFORMATION_CLASS;
  345. AUTHZAPI
  346. BOOL
  347. WINAPI
  348. AuthzGetInformationFromAuditEvent(
  349.     IN  AUTHZ_AUDIT_EVENT_HANDLE            hAuditEvent,
  350.     IN  AUTHZ_AUDIT_EVENT_INFORMATION_CLASS InfoClass,
  351.     IN  DWORD                               BufferSize,
  352.     OUT PDWORD                              pSizeRequired,
  353.     OUT PVOID                               Buffer
  354.     );
  355. AUTHZAPI
  356. BOOL
  357. WINAPI
  358. AuthzFreeAuditEvent(
  359.     IN AUTHZ_AUDIT_EVENT_HANDLE hAuditEvent
  360.     );
  361. #ifdef __cplusplus
  362. }
  363. #endif
  364. #endif