Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

596 lines
20 KiB

  1. //+-------------------------------------------------------------------
  2. //
  3. // Microsoft Windows
  4. // Copyright (C) Microsoft Corporation, 1993-1998.
  5. //
  6. // File: accctrl.h
  7. //
  8. // Contents: common includes for new style Win32 Access Control
  9. // APIs
  10. //
  11. //
  12. //--------------------------------------------------------------------
  13. #ifndef __ACCESS_CONTROL__
  14. #define __ACCESS_CONTROL__
  15. #ifndef __midl
  16. #include <wtypes.h>
  17. #endif
  18. ;begin_both
  19. #ifdef __cplusplus
  20. extern "C" {
  21. #endif
  22. ;end_both
  23. #define AccFree LocalFree
  24. //
  25. // Definition:
  26. // This enumerated type defines the objects supported by the get/set API within
  27. // this document. See section 3.1, Object Types for a detailed definition of the
  28. // supported object types, and their name formats.
  29. //
  30. typedef enum _SE_OBJECT_TYPE
  31. {
  32. SE_UNKNOWN_OBJECT_TYPE = 0,
  33. SE_FILE_OBJECT,
  34. SE_SERVICE,
  35. SE_PRINTER,
  36. SE_REGISTRY_KEY,
  37. SE_LMSHARE,
  38. SE_KERNEL_OBJECT,
  39. SE_WINDOW_OBJECT,
  40. SE_DS_OBJECT,
  41. SE_DS_OBJECT_ALL,
  42. SE_PROVIDER_DEFINED_OBJECT,
  43. SE_WMIGUID_OBJECT,
  44. SE_REGISTRY_WOW64_32KEY
  45. } SE_OBJECT_TYPE;
  46. //
  47. // Definition: TRUSTEE_TYPE
  48. // This enumerated type specifies the type of trustee account for the trustee
  49. // returned by the API described in this document.
  50. // TRUSTEE_IS_UNKNOWN - The trustee is an unknown, but not necessarily invalid
  51. // type. This field is not validated on input to the APIs
  52. // that take Trustees.
  53. // TRUSTEE_IS_USER The trustee account is a user account.
  54. // TRUSTEE_IS_GROUP The trustee account is a group account.
  55. //
  56. typedef enum _TRUSTEE_TYPE
  57. {
  58. TRUSTEE_IS_UNKNOWN,
  59. TRUSTEE_IS_USER,
  60. TRUSTEE_IS_GROUP,
  61. TRUSTEE_IS_DOMAIN,
  62. TRUSTEE_IS_ALIAS,
  63. TRUSTEE_IS_WELL_KNOWN_GROUP,
  64. TRUSTEE_IS_DELETED,
  65. TRUSTEE_IS_INVALID,
  66. TRUSTEE_IS_COMPUTER
  67. } TRUSTEE_TYPE;
  68. //
  69. // Definition: TRUSTEE_FORM
  70. // This enumerated type specifies the form the trustee identifier is in for a
  71. // particular trustee.
  72. // TRUSTEE_IS_SID The trustee is identified with a SID rather than with a name.
  73. // TRUSTEE_IS_NAME The trustee is identified with a name.
  74. //
  75. typedef enum _TRUSTEE_FORM
  76. {
  77. TRUSTEE_IS_SID,
  78. TRUSTEE_IS_NAME,
  79. TRUSTEE_BAD_FORM,
  80. TRUSTEE_IS_OBJECTS_AND_SID,
  81. TRUSTEE_IS_OBJECTS_AND_NAME
  82. } TRUSTEE_FORM;
  83. //
  84. // Definition: MULTIPLE_TRUSTEE_OPERATION
  85. // If the trustee is a multiple trustee, this enumerated type specifies the type.
  86. // TRUSTEE_IS_IMPERSONATE The trustee is an impersonate trustee and the multiple
  87. // trustee field in the trustee points to another trustee
  88. // that is a trustee for the server that will be doing the
  89. // impersonation.
  90. //
  91. typedef enum _MULTIPLE_TRUSTEE_OPERATION
  92. {
  93. NO_MULTIPLE_TRUSTEE,
  94. TRUSTEE_IS_IMPERSONATE,
  95. } MULTIPLE_TRUSTEE_OPERATION;
  96. typedef struct _OBJECTS_AND_SID
  97. {
  98. DWORD ObjectsPresent;
  99. GUID ObjectTypeGuid;
  100. GUID InheritedObjectTypeGuid;
  101. SID * pSid;
  102. } OBJECTS_AND_SID, *POBJECTS_AND_SID;
  103. typedef struct _OBJECTS_AND_NAME_%
  104. {
  105. DWORD ObjectsPresent;
  106. SE_OBJECT_TYPE ObjectType;
  107. LPTSTR% ObjectTypeName;
  108. LPTSTR% InheritedObjectTypeName;
  109. LPTSTR% ptstrName;
  110. } OBJECTS_AND_NAME_%, *POBJECTS_AND_NAME_%;
  111. //
  112. // Definition: TRUSTEE
  113. // This structure is used to pass account information into and out of the system
  114. // using the API defined in this document.
  115. // PMultipleTrustee - if NON-NULL, points to another trustee structure, as
  116. // defined by the multiple trustee operation field.
  117. // MultipleTrusteeOperation - Defines the multiple trustee operation/type.
  118. // TrusteeForm - defines if the trustee is defined by name or SID.
  119. // TrusteeType - defines if the trustee type is unknown, a user or a group.
  120. // PwcsName - points to the trustee name or the trustee SID.
  121. //
  122. typedef struct _TRUSTEE_%
  123. {
  124. struct _TRUSTEE_% *pMultipleTrustee;
  125. MULTIPLE_TRUSTEE_OPERATION MultipleTrusteeOperation;
  126. TRUSTEE_FORM TrusteeForm;
  127. TRUSTEE_TYPE TrusteeType;
  128. #ifdef __midl
  129. [switch_is(TrusteeForm)]
  130. union
  131. {
  132. [case(TRUSTEE_IS_NAME)]
  133. LPTSTR% ptstrName;
  134. [case(TRUSTEE_IS_SID)]
  135. SID *pSid;
  136. [case(TRUSTEE_IS_OBJECTS_AND_SID)]
  137. OBJECTS_AND_SID *pObjectsAndSid;
  138. [case(TRUSTEE_IS_OBJECTS_AND_NAME)]
  139. OBJECTS_AND_NAME_% *pObjectsAndName;
  140. };
  141. #else
  142. LPTSTR% ptstrName;
  143. #endif
  144. } TRUSTEE_%, *PTRUSTEE_%, TRUSTEE%, *PTRUSTEE%;
  145. //
  146. // Definition: ACCESS_MODE
  147. // This enumerated type specifies how permissions are (requested)/to be applied
  148. // for the trustee by the access control entry. On input this field can by any
  149. // of the values, although it is not meaningful to mix access control and audit
  150. // control entries. On output this field will be either SET_ACCESS, DENY_ACCESS,
  151. // SET_AUDIT_SUCCESS, SET_AUDIT_FAILURE.
  152. // The following descriptions define how this type effects an explicit access
  153. // request to apply access permissions to an object.
  154. // GRANT_ACCESS - The trustee will have at least the requested permissions upon
  155. // successful completion of the command. (If the trustee has
  156. // additional permissions they will not be removed).
  157. // SET_ACCESS - The trustee will have exactly the requested permissions upon
  158. // successful completion of the command.
  159. // DENY_ACCESS - The trustee will be denied the specified permissions.
  160. // REVOKE_ACCESS - Any explicit access rights the trustee has will be revoked.
  161. // SET_AUDIT_SUCCESS - The trustee will be audited for successful opens of the
  162. // object using the requested permissions.
  163. // SET_AUDIT_FAILURE - The trustee will be audited for failed opens of the object
  164. // using the requested permissions.
  165. //
  166. typedef enum _ACCESS_MODE
  167. {
  168. NOT_USED_ACCESS = 0,
  169. GRANT_ACCESS,
  170. SET_ACCESS,
  171. DENY_ACCESS,
  172. REVOKE_ACCESS,
  173. SET_AUDIT_SUCCESS,
  174. SET_AUDIT_FAILURE
  175. } ACCESS_MODE;
  176. //
  177. // Definition: Inheritance flags
  178. // These bit masks are provided to allow simple application of inheritance in
  179. // explicit access requests on containers.
  180. // NO_INHERITANCE The specific access permissions will only be applied to
  181. // the container, and will not be inherited by objects created
  182. // within the container.
  183. // SUB_CONTAINERS_ONLY_INHERIT The specific access permissions will be inherited
  184. // and applied to sub containers created within the
  185. // container, and will be applied to the container
  186. // itself.
  187. // SUB_OBJECTS_ONLY_INHERIT The specific access permissions will only be inherited
  188. // by objects created within the specific container.
  189. // The access permissions will not be applied to the
  190. // container itself.
  191. // SUB_CONTAINERS_AND_OBJECTS_INHERIT The specific access permissions will be
  192. // inherited by containers created within the
  193. // specific container, will be applied to
  194. // objects created within the container, but
  195. // will not be applied to the container itself.
  196. //
  197. #define NO_INHERITANCE 0x0
  198. #define SUB_OBJECTS_ONLY_INHERIT 0x1
  199. #define SUB_CONTAINERS_ONLY_INHERIT 0x2
  200. #define SUB_CONTAINERS_AND_OBJECTS_INHERIT 0x3
  201. #define INHERIT_NO_PROPAGATE 0x4
  202. #define INHERIT_ONLY 0x8
  203. //
  204. // Informational bit that is returned
  205. //
  206. #define INHERITED_ACCESS_ENTRY 0x10
  207. //
  208. // Informational bit that tells where a node was inherited from. Valid only
  209. // for NT 5 APIs
  210. //
  211. #define INHERITED_PARENT 0x10000000
  212. #define INHERITED_GRANDPARENT 0x20000000
  213. //
  214. // Definition: EXPLICIT_ACCESS
  215. // This structure is used to pass access control entry information into and out
  216. // of the system using the API defined in this document.
  217. // grfAccessPermissions - This contains the access permissions to assign for the
  218. // trustee. It is in the form of an NT access mask.
  219. // grfAccessMode - This field defines how the permissions are to be applied for
  220. // the trustee.
  221. // grfInheritance - For containers, this field defines how the access control
  222. // entry is/(is requested) to be inherited on
  223. // objects/sub-containers created within the container.
  224. // Trustee - This field contains the definition of the trustee account the
  225. // explicit access applies to.
  226. //
  227. typedef struct _EXPLICIT_ACCESS_%
  228. {
  229. DWORD grfAccessPermissions;
  230. ACCESS_MODE grfAccessMode;
  231. DWORD grfInheritance;
  232. TRUSTEE_% Trustee;
  233. } EXPLICIT_ACCESS_%, *PEXPLICIT_ACCESS_%, EXPLICIT_ACCESS%, *PEXPLICIT_ACCESS%;
  234. //----------------------------------------------------------------------------
  235. //
  236. // NT5 APIs
  237. //
  238. //----------------------------------------------------------------------------
  239. //
  240. // Default provider
  241. //
  242. #define ACCCTRL_DEFAULT_PROVIDERA "Windows NT Access Provider"
  243. #define ACCCTRL_DEFAULT_PROVIDERW L"Windows NT Access Provider"
  244. #ifdef UNICODE
  245. #define ACCCTRL_DEFAULT_PROVIDER ACCCTRL_DEFAULT_PROVIDERW
  246. #else
  247. #define ACCCTRL_DEFAULT_PROVIDER ACCCTRL_DEFAULT_PROVIDERA
  248. #endif
  249. //
  250. /// Access rights
  251. //
  252. typedef ULONG ACCESS_RIGHTS, *PACCESS_RIGHTS;
  253. //
  254. // Inheritance flags
  255. //
  256. typedef ULONG INHERIT_FLAGS, *PINHERIT_FLAGS;
  257. //
  258. // Access / Audit structures
  259. //
  260. typedef struct _ACTRL_ACCESS_ENTRY%
  261. {
  262. TRUSTEE_% Trustee;
  263. ULONG fAccessFlags;
  264. ACCESS_RIGHTS Access;
  265. ACCESS_RIGHTS ProvSpecificAccess;
  266. INHERIT_FLAGS Inheritance;
  267. LPTSTR% lpInheritProperty;
  268. } ACTRL_ACCESS_ENTRY%, *PACTRL_ACCESS_ENTRY%;
  269. typedef struct _ACTRL_ACCESS_ENTRY_LIST%
  270. {
  271. ULONG cEntries;
  272. #ifdef __midl
  273. [size_is(cEntries)]
  274. #endif
  275. ACTRL_ACCESS_ENTRY% *pAccessList;
  276. } ACTRL_ACCESS_ENTRY_LIST%, *PACTRL_ACCESS_ENTRY_LIST%;
  277. typedef struct _ACTRL_PROPERTY_ENTRY%
  278. {
  279. LPTSTR% lpProperty;
  280. PACTRL_ACCESS_ENTRY_LIST% pAccessEntryList;
  281. ULONG fListFlags;
  282. } ACTRL_PROPERTY_ENTRY%, *PACTRL_PROPERTY_ENTRY%;
  283. typedef struct _ACTRL_ALIST%
  284. {
  285. ULONG cEntries;
  286. #ifdef __midl
  287. [size_is(cEntries)]
  288. #endif
  289. PACTRL_PROPERTY_ENTRY% pPropertyAccessList;
  290. } ACTRL_ACCESS%, *PACTRL_ACCESS%, ACTRL_AUDIT%, *PACTRL_AUDIT%;
  291. //
  292. // TRUSTEE_ACCESS flags
  293. //
  294. #define TRUSTEE_ACCESS_ALLOWED 0x00000001L
  295. #define TRUSTEE_ACCESS_READ 0x00000002L
  296. #define TRUSTEE_ACCESS_WRITE 0x00000004L
  297. #define TRUSTEE_ACCESS_EXPLICIT 0x00000001L
  298. #define TRUSTEE_ACCESS_READ_WRITE (TRUSTEE_ACCESS_READ | \
  299. TRUSTEE_ACCESS_WRITE)
  300. #define TRUSTEE_ACCESS_ALL 0xFFFFFFFFL
  301. typedef struct _TRUSTEE_ACCESS%
  302. {
  303. LPTSTR% lpProperty;
  304. ACCESS_RIGHTS Access;
  305. ULONG fAccessFlags;
  306. ULONG fReturnedAccess;
  307. } TRUSTEE_ACCESS%, *PTRUSTEE_ACCESS%;
  308. //
  309. // Generic permission values
  310. //
  311. #define ACTRL_RESERVED 0x00000000
  312. #define ACTRL_PERM_1 0x00000001
  313. #define ACTRL_PERM_2 0x00000002
  314. #define ACTRL_PERM_3 0x00000004
  315. #define ACTRL_PERM_4 0x00000008
  316. #define ACTRL_PERM_5 0x00000010
  317. #define ACTRL_PERM_6 0x00000020
  318. #define ACTRL_PERM_7 0x00000040
  319. #define ACTRL_PERM_8 0x00000080
  320. #define ACTRL_PERM_9 0x00000100
  321. #define ACTRL_PERM_10 0x00000200
  322. #define ACTRL_PERM_11 0x00000400
  323. #define ACTRL_PERM_12 0x00000800
  324. #define ACTRL_PERM_13 0x00001000
  325. #define ACTRL_PERM_14 0x00002000
  326. #define ACTRL_PERM_15 0x00004000
  327. #define ACTRL_PERM_16 0x00008000
  328. #define ACTRL_PERM_17 0x00010000
  329. #define ACTRL_PERM_18 0x00020000
  330. #define ACTRL_PERM_19 0x00040000
  331. #define ACTRL_PERM_20 0x00080000
  332. //
  333. // Access permissions
  334. //
  335. #define ACTRL_ACCESS_ALLOWED 0x00000001
  336. #define ACTRL_ACCESS_DENIED 0x00000002
  337. #define ACTRL_AUDIT_SUCCESS 0x00000004
  338. #define ACTRL_AUDIT_FAILURE 0x00000008
  339. //
  340. // Property list flags
  341. //
  342. #define ACTRL_ACCESS_PROTECTED 0x00000001
  343. //
  344. // Standard and object rights
  345. //
  346. #define ACTRL_SYSTEM_ACCESS 0x04000000
  347. #define ACTRL_DELETE 0x08000000
  348. #define ACTRL_READ_CONTROL 0x10000000
  349. #define ACTRL_CHANGE_ACCESS 0x20000000
  350. #define ACTRL_CHANGE_OWNER 0x40000000
  351. #define ACTRL_SYNCHRONIZE 0x80000000
  352. #define ACTRL_STD_RIGHTS_ALL 0xf8000000
  353. #define ACTRL_STD_RIGHT_REQUIRED ( ACTRL_STD_RIGHTS_ALL & ~ACTRL_SYNCHRONIZE )
  354. #ifndef _DS_CONTROL_BITS_DEFINED_
  355. #define _DS_CONTROL_BITS_DEFINED_
  356. #define ACTRL_DS_OPEN ACTRL_RESERVED
  357. #define ACTRL_DS_CREATE_CHILD ACTRL_PERM_1
  358. #define ACTRL_DS_DELETE_CHILD ACTRL_PERM_2
  359. #define ACTRL_DS_LIST ACTRL_PERM_3
  360. #define ACTRL_DS_SELF ACTRL_PERM_4
  361. #define ACTRL_DS_READ_PROP ACTRL_PERM_5
  362. #define ACTRL_DS_WRITE_PROP ACTRL_PERM_6
  363. #define ACTRL_DS_DELETE_TREE ACTRL_PERM_7
  364. #define ACTRL_DS_LIST_OBJECT ACTRL_PERM_8
  365. #define ACTRL_DS_CONTROL_ACCESS ACTRL_PERM_9
  366. #endif
  367. #define ACTRL_FILE_READ ACTRL_PERM_1
  368. #define ACTRL_FILE_WRITE ACTRL_PERM_2
  369. #define ACTRL_FILE_APPEND ACTRL_PERM_3
  370. #define ACTRL_FILE_READ_PROP ACTRL_PERM_4
  371. #define ACTRL_FILE_WRITE_PROP ACTRL_PERM_5
  372. #define ACTRL_FILE_EXECUTE ACTRL_PERM_6
  373. #define ACTRL_FILE_READ_ATTRIB ACTRL_PERM_8
  374. #define ACTRL_FILE_WRITE_ATTRIB ACTRL_PERM_9
  375. #define ACTRL_FILE_CREATE_PIPE ACTRL_PERM_10
  376. #define ACTRL_DIR_LIST ACTRL_PERM_1
  377. #define ACTRL_DIR_CREATE_OBJECT ACTRL_PERM_2
  378. #define ACTRL_DIR_CREATE_CHILD ACTRL_PERM_3
  379. #define ACTRL_DIR_DELETE_CHILD ACTRL_PERM_7
  380. #define ACTRL_DIR_TRAVERSE ACTRL_PERM_6
  381. #define ACTRL_KERNEL_TERMINATE ACTRL_PERM_1
  382. #define ACTRL_KERNEL_THREAD ACTRL_PERM_2
  383. #define ACTRL_KERNEL_VM ACTRL_PERM_3
  384. #define ACTRL_KERNEL_VM_READ ACTRL_PERM_4
  385. #define ACTRL_KERNEL_VM_WRITE ACTRL_PERM_5
  386. #define ACTRL_KERNEL_DUP_HANDLE ACTRL_PERM_6
  387. #define ACTRL_KERNEL_PROCESS ACTRL_PERM_7
  388. #define ACTRL_KERNEL_SET_INFO ACTRL_PERM_8
  389. #define ACTRL_KERNEL_GET_INFO ACTRL_PERM_9
  390. #define ACTRL_KERNEL_CONTROL ACTRL_PERM_10
  391. #define ACTRL_KERNEL_ALERT ACTRL_PERM_11
  392. #define ACTRL_KERNEL_GET_CONTEXT ACTRL_PERM_12
  393. #define ACTRL_KERNEL_SET_CONTEXT ACTRL_PERM_13
  394. #define ACTRL_KERNEL_TOKEN ACTRL_PERM_14
  395. #define ACTRL_KERNEL_IMPERSONATE ACTRL_PERM_15
  396. #define ACTRL_KERNEL_DIMPERSONATE ACTRL_PERM_16
  397. #define ACTRL_PRINT_SADMIN ACTRL_PERM_1
  398. #define ACTRL_PRINT_SLIST ACTRL_PERM_2
  399. #define ACTRL_PRINT_PADMIN ACTRL_PERM_3
  400. #define ACTRL_PRINT_PUSE ACTRL_PERM_4
  401. #define ACTRL_PRINT_JADMIN ACTRL_PERM_5
  402. #define ACTRL_SVC_GET_INFO ACTRL_PERM_1
  403. #define ACTRL_SVC_SET_INFO ACTRL_PERM_2
  404. #define ACTRL_SVC_STATUS ACTRL_PERM_3
  405. #define ACTRL_SVC_LIST ACTRL_PERM_4
  406. #define ACTRL_SVC_START ACTRL_PERM_5
  407. #define ACTRL_SVC_STOP ACTRL_PERM_6
  408. #define ACTRL_SVC_PAUSE ACTRL_PERM_7
  409. #define ACTRL_SVC_INTERROGATE ACTRL_PERM_8
  410. #define ACTRL_SVC_UCONTROL ACTRL_PERM_9
  411. #define ACTRL_REG_QUERY ACTRL_PERM_1
  412. #define ACTRL_REG_SET ACTRL_PERM_2
  413. #define ACTRL_REG_CREATE_CHILD ACTRL_PERM_3
  414. #define ACTRL_REG_LIST ACTRL_PERM_4
  415. #define ACTRL_REG_NOTIFY ACTRL_PERM_5
  416. #define ACTRL_REG_LINK ACTRL_PERM_6
  417. #define ACTRL_WIN_CLIPBRD ACTRL_PERM_1
  418. #define ACTRL_WIN_GLOBAL_ATOMS ACTRL_PERM_2
  419. #define ACTRL_WIN_CREATE ACTRL_PERM_3
  420. #define ACTRL_WIN_LIST_DESK ACTRL_PERM_4
  421. #define ACTRL_WIN_LIST ACTRL_PERM_5
  422. #define ACTRL_WIN_READ_ATTRIBS ACTRL_PERM_6
  423. #define ACTRL_WIN_WRITE_ATTRIBS ACTRL_PERM_7
  424. #define ACTRL_WIN_SCREEN ACTRL_PERM_8
  425. #define ACTRL_WIN_EXIT ACTRL_PERM_9
  426. #pragma warning (push)
  427. #pragma warning (disable: 4201)
  428. typedef struct _ACTRL_OVERLAPPED
  429. {
  430. union {
  431. PVOID Provider;
  432. ULONG Reserved1;
  433. };
  434. ULONG Reserved2;
  435. HANDLE hEvent;
  436. } ACTRL_OVERLAPPED, *PACTRL_OVERLAPPED;
  437. #pragma warning(pop)
  438. typedef struct _ACTRL_ACCESS_INFO%
  439. {
  440. ULONG fAccessPermission;
  441. LPTSTR% lpAccessPermissionName;
  442. } ACTRL_ACCESS_INFO%, *PACTRL_ACCESS_INFO%;
  443. typedef struct _ACTRL_CONTROL_INFO%
  444. {
  445. LPTSTR% lpControlId;
  446. LPTSTR% lpControlName;
  447. } ACTRL_CONTROL_INFO%, *PACTRL_CONTROL_INFO%;
  448. #define ACTRL_ACCESS_NO_OPTIONS 0x00000000
  449. #define ACTRL_ACCESS_SUPPORTS_OBJECT_ENTRIES 0x00000001
  450. typedef enum _PROGRESS_INVOKE_SETTING {
  451. ProgressInvokeNever = 1, // Never invoke the progress function
  452. ProgressInvokeEveryObject, // Invoke for each object
  453. ProgressInvokeOnError, // Invoke only for each error case
  454. ProgressCancelOperation, // Stop propagation and return
  455. ProgressRetryOperation // Retry operation on subtree
  456. } PROG_INVOKE_SETTING, *PPROG_INVOKE_SETTING;
  457. //
  458. // Progress Function:
  459. // Caller of tree operation implements this Progress function, then
  460. // passes its function pointer to tree operation.
  461. // Tree operation invokes Progress function to provide progress and error
  462. // information to the caller during the potentially long execution
  463. // of the tree operation. Tree operation provides the name of the object
  464. // last processed and the error status of the operation on that object.
  465. // Tree operation also passes the current InvokeSetting value.
  466. // Caller may change the InvokeSetting value, for example, from "Always"
  467. // to "Only On Error."
  468. //
  469. /*
  470. typedef VOID (*FN_PROGRESS) (
  471. IN LPWSTR pObjectName, // name of object just processed
  472. IN DWORD Status, // status of operation on object
  473. IN OUT PPROG_INVOKE_SETTING pInvokeSetting, // Never, always,
  474. IN PVOID Args, // Caller specific data
  475. IN BOOL SecuritySet // Whether security was set
  476. );
  477. */
  478. //
  479. // New Object Type function pointers. TBD.
  480. // To support additional object resource managers generically, the
  481. // resource manager must provide it's own functions for operations
  482. // like:
  483. // GetAncestorAcl(IN ObjName, IN GenerationGap, IN DaclOrSacl?, ...)
  484. // GetAncestorName(...)
  485. // FreeNameStructure(...)
  486. //
  487. typedef struct _FN_OBJECT_MGR_FUNCTIONS
  488. {
  489. ULONG Placeholder;
  490. } FN_OBJECT_MGR_FUNCTS, *PFN_OBJECT_MGR_FUNCTS;
  491. //
  492. // Name of ancestor and number of generations between
  493. // ancestor and inheriting object.
  494. //
  495. // GenerationGap:
  496. // Name of ancestor from which ACE was inherited.
  497. // NULL for explicit ACE.
  498. //
  499. // AncestorName:
  500. // Number of levels (or generations) between the object and the ancestor.
  501. // Parent, gap=1.
  502. // Grandparent, gap=2.
  503. // Set to 0 for explicit ACE on object.
  504. //
  505. typedef struct _INHERITED_FROM%
  506. {
  507. LONG GenerationGap;
  508. LPTSTR% AncestorName;
  509. } INHERITED_FROM%, *PINHERITED_FROM%;
  510. #ifdef __cplusplus ;both
  511. } ;both
  512. #endif ;both
  513. #endif // __ACCESS_CONTROL__