Leaked source code of windows server 2003
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.

1274 lines
33 KiB

  1. /*++ BUILD Version: 0001 // Increment this if a change has global effects
  2. Copyright (c) 1991 Microsoft Corporation
  3. Module Name:
  4. db.h
  5. Abstract:
  6. LSA Database Exported Function Definitions, Datatypes and Defines
  7. This module contains the LSA Database Routines that may be called
  8. by parts of the LSA outside the Database sub-component.
  9. Author:
  10. Scott Birrell (ScottBi) August 26, 1991
  11. Environment:
  12. Revision History:
  13. --*/
  14. #ifndef _LSA_DB_
  15. #define _LSA_DB_
  16. //
  17. // Maximum Number of attributes in the various object types
  18. //
  19. #define LSAP_DB_ATTRS_POLICY ((ULONG) 0x00000010L)
  20. #define LSAP_DB_ATTRS_ACCOUNT ((ULONG) 0x00000010L)
  21. #define LSAP_DB_ATTRS_DOMAIN ((ULONG) 0x00000013L)
  22. #define LSAP_DB_ATTRS_SECRET ((ULONG) 0x00000010L)
  23. //
  24. // Constants for matching options on Sid/Name lookup operations
  25. //
  26. #define LSAP_DB_MATCH_ON_SID ((ULONG) 0x00000001L)
  27. #define LSAP_DB_MATCH_ON_NAME ((ULONG) 0x00000002L)
  28. //
  29. // Options for LsapDbLookupSidsInLocalDomains()
  30. //
  31. #define LSAP_DB_SEARCH_BUILT_IN_DOMAIN ((ULONG) 0x00000001L)
  32. #define LSAP_DB_SEARCH_ACCOUNT_DOMAIN ((ULONG) 0x00000002L)
  33. //
  34. // Options for LsapDbMergeDisjointReferencedDomains
  35. //
  36. #define LSAP_DB_USE_FIRST_MERGAND_GRAPH ((ULONG) 0x00000001L)
  37. #define LSAP_DB_USE_SECOND_MERGAND_GRAPH ((ULONG) 0x00000002L)
  38. //
  39. // Option for updating Policy Database
  40. //
  41. #define LSAP_DB_UPDATE_POLICY_DATABASE ((ULONG) 0x00000001L)
  42. //
  43. // Maximum number of attributes corresponding to a Policy Object
  44. // Information Class
  45. //
  46. #define LSAP_DB_ATTRS_INFO_CLASS_POLICY ((ULONG) 0x00000007L)
  47. //
  48. // Maximum number of attributes corresponding to a Trusted Domain Object
  49. // Information Class
  50. //
  51. #define LSAP_DB_ATTRS_INFO_CLASS_DOMAIN ((ULONG) 0x00000010L)
  52. //
  53. // Global variables
  54. //
  55. extern BOOLEAN LsapDbRequiresSidInfo[];
  56. extern BOOLEAN LsapDbRequiresNameInfo[];
  57. extern LSAPR_HANDLE LsapDbHandle;
  58. extern BOOLEAN LsapSetupWasRun;
  59. extern BOOLEAN LsapDatabaseSetupPerformed;
  60. extern NT_PRODUCT_TYPE LsapProductType;
  61. extern WORD LsapProductSuiteMask;
  62. extern BOOLEAN LsapDsIsRunning;
  63. extern BOOLEAN LsapDsWReplEnabled;
  64. //
  65. // Table of accesses required to query Policy Information. This table
  66. // is indexed by Policy Information Class
  67. //
  68. extern ACCESS_MASK LsapDbRequiredAccessQueryPolicy[];
  69. extern ACCESS_MASK LsapDbRequiredAccessQueryDomainPolicy[];
  70. //
  71. // Table of accesses required to set Policy Information. This table
  72. // is indexed by Policy Information Class
  73. //
  74. extern ACCESS_MASK LsapDbRequiredAccessSetPolicy[];
  75. extern ACCESS_MASK LsapDbRequiredAccessSetDomainPolicy[];
  76. //
  77. // Table of accesses required to query TrustedDomain Information. This table
  78. // is indexed by TrustedDomain Information Class
  79. //
  80. extern ACCESS_MASK LsapDbRequiredAccessQueryTrustedDomain[];
  81. //
  82. // Table of accesses required to set TrustedDomain Information. This table
  83. // is indexed by TrustedDomain Information Class
  84. //
  85. extern ACCESS_MASK LsapDbRequiredAccessSetTrustedDomain[];
  86. //
  87. // Maximum Handle Reference Count
  88. //
  89. #define LSAP_DB_MAXIMUM_REFERENCE_COUNT ((ULONG) 0x00001000L)
  90. //
  91. // Maximum handles per user logon id
  92. // This was determined by taking the "interesting" access bits and generating possible
  93. // permutations and using that. The interesting bits were determined to be:
  94. // POLICY_VIEW_LOCAL_INFORMATION
  95. // POLICY_VIEW_AUDIT_INFORMATION
  96. // POLICY_TRUST_ADMIN
  97. // POLICY_CREATE_ACCOUNT
  98. // POLICY_CREATE_SECRET
  99. // POLICY_LOOKUP_NAMES
  100. // The possible combinations add up to 720 entries
  101. #define LSAP_DB_MAXIMUM_HANDLES_PER_USER 0x000002D0
  102. //
  103. // Default Computer Name used for Policy Account Domain Info
  104. //
  105. #define LSAP_DB_DEFAULT_COMPUTER_NAME (L"MACHINENAME")
  106. //
  107. // Options for the LsaDbReferenceObject and LsaDbDereferenceObject
  108. //
  109. #define LSAP_DB_LOCK ((ULONG) 0x00000001L)
  110. #define LSAP_DB_NO_LOCK ((ULONG) 0x00000002L)
  111. #define LSAP_DB_OPENED_BY_ANONYMOUS ((ULONG) 0x00000004L)
  112. #define LSAP_DB_START_TRANSACTION ((ULONG) 0x00000008L)
  113. #define LSAP_DB_FINISH_TRANSACTION ((ULONG) 0x00000010L)
  114. #define LSAP_DB_VALIDATE_HANDLE ((ULONG) 0x00000020L)
  115. #define LSAP_DB_TRUSTED ((ULONG) 0x00000040L)
  116. #define LSAP_DB_STANDALONE_REFERENCE ((ULONG) 0x00000080L)
  117. #define LSAP_DB_DEREFERENCE_CONTR ((ULONG) 0x00000100L)
  118. #define LSAP_DB_LOG_QUEUE_LOCK ((ULONG) 0x00001000L)
  119. #define LSAP_DB_OMIT_REPLICATOR_NOTIFICATION ((ULONG) 0x00004000L)
  120. #define LSAP_DB_USE_LPC_IMPERSONATE ((ULONG) 0x00008000L)
  121. #define LSAP_DB_ADMIT_DELETED_OBJECT_HANDLES ((ULONG) 0x00010000L)
  122. #define LSAP_DB_DS_NO_PARENT_OBJECT ((ULONG) 0x00080000L)
  123. #define LSAP_DB_OBJECT_SCOPE_DS ((ULONG) 0x00100000L)
  124. #define LSAP_DB_DS_TRUSTED_DOMAIN_AS_SECRET ((ULONG) 0x00400000L)
  125. #define LSAP_DB_READ_ONLY_TRANSACTION ((ULONG) 0x01000000L)
  126. #define LSAP_DB_DS_OP_TRANSACTION ((ULONG) 0x02000000L)
  127. #define LSAP_DB_NO_DS_OP_TRANSACTION ((ULONG) 0x04000000L)
  128. #define LSAP_DB_HANDLE_UPGRADE ((ULONG) 0x10000000L)
  129. #define LSAP_DB_HANDLE_CREATED_SECRET ((ULONG) 0x20000000L)
  130. #define LSAP_DB_SCE_POLICY_HANDLE ((ULONG) 0x40000000L)
  131. #define LSAP_DB_STATE_MASK \
  132. (LSAP_DB_LOCK | LSAP_DB_NO_LOCK | \
  133. LSAP_DB_START_TRANSACTION | LSAP_DB_FINISH_TRANSACTION | \
  134. LSAP_DB_LOG_QUEUE_LOCK | \
  135. LSAP_DB_READ_ONLY_TRANSACTION | LSAP_DB_DS_OP_TRANSACTION | \
  136. LSAP_DB_NO_DS_OP_TRANSACTION)
  137. //
  138. // Configuration Registry Root Key for Lsa Database. All Physical Object
  139. // and Attribute Names are relative to this Key.
  140. //
  141. #define LSAP_DB_ROOT_REG_KEY_NAME L"\\Registry\\Machine\\Security"
  142. //
  143. // LSA Database Object Defines
  144. //
  145. #define LSAP_DB_OBJECT_OPEN FILE_OPEN
  146. #define LSAP_DB_OBJECT_OPEN_IF FILE_OPEN_IF
  147. #define LSAP_DB_OBJECT_CREATE FILE_CREATE
  148. #define LSAP_DB_KEY_VALUE_MAX_LENGTH (0x00000040L)
  149. #define LSAP_DB_LOGICAL_NAME_MAX_LENGTH (0x00000100L)
  150. #define LSAP_DB_CREATE_OBJECT_IN_DS (0x00000200L)
  151. #define LSAP_DB_CREATE_VALID_EXTENDED_FLAGS 0x00000600
  152. //
  153. // LSA Database Object SubKey Defines
  154. //
  155. #define LSAP_DB_SUBKEY_OPEN FILE_OPEN
  156. #define LSAP_DB_SUBKEY_OPEN_IF FILE_OPEN_IF
  157. #define LSAP_DB_SUBKEY_CREATE FILE_CREATE
  158. //
  159. // Growth Delta for Referenced Domain Lists
  160. //
  161. #define LSAP_DB_REF_DOMAIN_DELTA ((ULONG) 0x00000020L )
  162. //
  163. // Object options values for the object handles
  164. //
  165. #define LSAP_DB_OBJECT_SECRET_INTERNAL 0x00000001 // M$
  166. #define LSAP_DB_OBJECT_SECRET_LOCAL 0x00000002 // L$
  167. //
  168. // The following data type is used in name and SID lookup services to
  169. // describe the domains referenced in the lookup operation.
  170. //
  171. // WARNING! This is an internal version of LSA_REFERENCED_DOMAIN_LIST
  172. // in ntlsa.h. It has an additional field, MaxEntries.
  173. //
  174. typedef struct _LSAP_DB_REFERENCED_DOMAIN_LIST {
  175. ULONG Entries;
  176. PLSA_TRUST_INFORMATION Domains;
  177. ULONG MaxEntries;
  178. } LSAP_DB_REFERENCED_DOMAIN_LIST, *PLSAP_DB_REFERENCED_DOMAIN_LIST;
  179. // where members have the following usage:
  180. //
  181. // Entries - Is a count of the number of domains described in the
  182. // Domains array.
  183. //
  184. // Domains - Is a pointer to an array of Entries LSA_TRUST_INFORMATION data
  185. // structures.
  186. //
  187. // MaxEntries - Is the maximum number of entries that can be stored
  188. // in the current array
  189. /////////////////////////////////////////////////////////////////////////////
  190. //
  191. // LSA Database Object Types
  192. //
  193. /////////////////////////////////////////////////////////////////////////////
  194. //
  195. // Lsa Database Object Type
  196. //
  197. typedef enum _LSAP_DB_OBJECT_TYPE_ID {
  198. NullObject = 0,
  199. PolicyObject,
  200. TrustedDomainObject,
  201. AccountObject,
  202. SecretObject,
  203. AllObject,
  204. NewTrustedDomainObject,
  205. DummyLastObject
  206. } LSAP_DB_OBJECT_TYPE_ID, *PLSAP_DB_OBJECT_TYPE_ID;
  207. //
  208. // LSA Database Object Handle structure (Internal definition of LSAPR_HANDLE)
  209. //
  210. // Note that the Handle structure is public to clients of the Lsa Database
  211. // exported functions, e.g server API workers) so that they can get at things
  212. // like GrantedAccess.
  213. //
  214. // Access to all fields serialized by LsapDbHandleTableEx.TableLock
  215. //
  216. typedef struct _LSAP_DB_HANDLE {
  217. struct _LSAP_DB_HANDLE *Next;
  218. struct _LSAP_DB_HANDLE *Previous;
  219. LIST_ENTRY UserHandleList;
  220. BOOLEAN Allocated;
  221. BOOLEAN SceHandle; // Sce Open Policy handle (opened with LsaOpenPolicySce)
  222. BOOLEAN SceHandleChild; // Child handle of an Sce Open Policy Handle
  223. ULONG ReferenceCount;
  224. UNICODE_STRING LogicalNameU;
  225. UNICODE_STRING PhysicalNameU;
  226. PSID Sid;
  227. HANDLE KeyHandle;
  228. LSAP_DB_OBJECT_TYPE_ID ObjectTypeId;
  229. struct _LSAP_DB_HANDLE *ContainerHandle;
  230. ACCESS_MASK DesiredAccess;
  231. ACCESS_MASK GrantedAccess;
  232. ACCESS_MASK RequestedAccess;
  233. BOOLEAN GenerateOnClose;
  234. BOOLEAN Trusted;
  235. BOOLEAN DeletedObject;
  236. BOOLEAN NetworkClient;
  237. ULONG Options;
  238. // New for the Ds
  239. UNICODE_STRING PhysicalNameDs;
  240. BOOLEAN fWriteDs;
  241. ULONG ObjectOptions;
  242. PVOID UserEntry;
  243. #if DBG == 1
  244. LARGE_INTEGER HandleCreateTime;
  245. LARGE_INTEGER HandleLastAccessTime;
  246. #endif
  247. } *LSAP_DB_HANDLE, **PLSAP_DB_HANDLE;
  248. //
  249. // LSA Database Object Sid Enumeration Buffer
  250. //
  251. typedef struct _LSAP_DB_SID_ENUMERATION_BUFFER {
  252. ULONG EntriesRead;
  253. PSID *Sids;
  254. } LSAP_DB_SID_ENUMERATION_BUFFER, *PLSAP_DB_SID_ENUMERATION_BUFFER;
  255. //
  256. // LSA Database Object Name Enumeration Buffer
  257. //
  258. typedef struct _LSAP_DB_NAME_ENUMERATION_BUFFER {
  259. ULONG EntriesRead;
  260. PUNICODE_STRING Names;
  261. } LSAP_DB_NAME_ENUMERATION_BUFFER, *PLSAP_DB_NAME_ENUMERATION_BUFFER;
  262. #define LSAP_DB_OBJECT_TYPE_COUNT 0x00000005L
  263. //
  264. // Default System Access assigned to Account objects
  265. //
  266. #define LSAP_DB_ACCOUNT_DEFAULT_SYS_ACCESS ((ULONG) 0L);
  267. //
  268. // LSA Database Account Object Information
  269. //
  270. typedef struct _LSAP_DB_ACCOUNT_INFORMATION {
  271. QUOTA_LIMITS QuotaLimits;
  272. PRIVILEGE_SET Privileges;
  273. } LSAP_DB_ACCOUNT_INFORMATION, *PLSAP_DB_ACCOUNT_INFORMATION;
  274. //
  275. // LSA Database Change Account Privilege Mode
  276. //
  277. typedef enum _LSAP_DB_CHANGE_PRIVILEGE_MODE {
  278. AddPrivileges = 1,
  279. RemovePrivileges,
  280. SetPrivileges
  281. } LSAP_DB_CHANGE_PRIVILEGE_MODE;
  282. //
  283. // Self-Relative Unicode String Structure.
  284. //
  285. //
  286. // UNICODE_STRING_SR is used to store self-relative unicode strings in
  287. // the database. Prior to Sundown, the UNICODE_STRING structure was used,
  288. // overloading the "Buffer" field with a byte offset.
  289. //
  290. typedef struct _UNICODE_STRING_SR {
  291. USHORT Length;
  292. USHORT MaximumLength;
  293. ULONG Offset;
  294. } UNICODE_STRING_SR, *PUNICODE_STRING_SR;
  295. //
  296. // LSA Database Object SubKey names in Unicode Form
  297. //
  298. typedef enum _LSAP_DB_NAMES {
  299. SecDesc = 0,
  300. Privilgs,
  301. Sid,
  302. Name,
  303. AdminMod,
  304. OperMode,
  305. QuotaLim,
  306. DefQuota,
  307. PrDomain,
  308. Policy,
  309. Accounts,
  310. Domains,
  311. Secrets,
  312. CurrVal,
  313. OldVal,
  314. CupdTime,
  315. OupdTime,
  316. PolAdtLg,
  317. PolAdtEv,
  318. PolAcDmN,
  319. PolAcDmS,
  320. PolDnDDN,
  321. PolDnTrN,
  322. PolDnDmG,
  323. PolEfDat,
  324. PolPrDmN,
  325. PolPrDmS,
  326. PolPdAcN,
  327. PolRepSc,
  328. PolRepAc,
  329. PolRevision,
  330. PolMod,
  331. PolState,
  332. ActSysAc,
  333. TrDmName,
  334. TrDmTrPN, // Netbios name of trust partner
  335. TrDmSid,
  336. TrDmAcN,
  337. TrDmCtN,
  338. TrDmPxOf,
  339. TrDmCtEn,
  340. TrDmTrTy, // Type of trust
  341. TrDmTrDi, // Trust direction
  342. TrDmTrLA, // Trust attributes
  343. TrDmTrPr, // Trust partner
  344. TrDmTrRt, // Trust root partner
  345. TrDmSAI, // Auth inbound
  346. TrDmSAO, // Auth outbound
  347. TrDmForT, // Forest trust info
  348. TrDmCrSid, // The SID of the creator
  349. KerOpts, // Kerberos authentication options (e.g. POLICY_KERBEROS_VALIDATE_CLIENT)
  350. KerMinT, // Kerberos: Maximum lifespan of a service (TGS) ticket
  351. KerMaxT, // Kerberos: Maximum lifespan of a ticket-granting (TGT) ticket
  352. KerMaxR, // Kerberos: Maximum length of time a TGT can be renewed
  353. KerProxy, // Kerberos: Maximum allowed clock skew between client and KDC
  354. KerLogoff, // Kerberos: unused
  355. BhvrVers, // Behavior-Version
  356. AuditLog,
  357. AuditLogMaxSize,
  358. AuditRecordRetentionPeriod, // Entries beyond this point don't correspond to real policy
  359. // entries, but are pseudo entries only
  360. PseudoSystemCritical,
  361. PolSecretEncryptionKey,
  362. XRefDnsRoot, // DNS name of cross-ref object
  363. XRefNetbiosName, // NETBIOS name of cross-ref object
  364. DummyLastName
  365. } LSAP_DB_NAMES;
  366. typedef struct _LSAP_DB_ACCOUNT_TYPE_SPECIFIC_INFO {
  367. ULONG SystemAccess;
  368. QUOTA_LIMITS QuotaLimits;
  369. PPRIVILEGE_SET PrivilegeSet;
  370. } LSAP_DB_ACCOUNT_TYPE_SPECIFIC_INFO, *PLSAP_DB_ACCOUNT_TYPE_SPECIFIC_INFO;
  371. #ifdef __cplusplus
  372. extern "C" {
  373. #endif // __cplusplus
  374. extern UNICODE_STRING LsapDbNames[DummyLastName];
  375. extern UNICODE_STRING LsapDbObjectTypeNames[DummyLastObject];
  376. //
  377. // LSA Database Object Type-specific attribute names and values. If
  378. // supplied on a call to LsapDbCreateObject, they will be stored with
  379. // the object.
  380. //
  381. typedef enum _LSAP_DB_ATTRIB_TYPE {
  382. LsapDbAttribUnknown = 0,
  383. LsapDbAttribUnicode,
  384. LsapDbAttribMultiUnicode,
  385. LsapDbAttribSid,
  386. LsapDbAttribGuid,
  387. LsapDbAttribULong,
  388. LsapDbAttribUShortAsULong,
  389. LsapDbAttribSecDesc,
  390. LsapDbAttribDsName,
  391. LsapDbAttribPByte,
  392. LsapDbAttribTime,
  393. LsapDbAttribDsNameAsUnicode,
  394. LsapDbAttribDsNameAsSid,
  395. LsapDbAttribIntervalAsULong
  396. } LSAP_DB_ATTRIB_TYPE, *PLSAP_DB_ATTRIB_TYPE;
  397. typedef struct _LSAP_DB_ATTRIBUTE {
  398. PUNICODE_STRING AttributeName;
  399. PVOID AttributeValue;
  400. ULONG AttributeValueLength;
  401. BOOLEAN MemoryAllocated;
  402. BOOLEAN CanDefaultToZero;
  403. BOOLEAN PseudoAttribute;
  404. ULONG DsAttId;
  405. LSAP_DB_ATTRIB_TYPE AttribType;
  406. LSAP_DB_NAMES DbNameIndex;
  407. } LSAP_DB_ATTRIBUTE, *PLSAP_DB_ATTRIBUTE;
  408. typedef enum _LSAP_DB_DS_LOCATION {
  409. LsapDsLocUnknown = 0,
  410. LsapDsLocRegistry,
  411. LsapDsLocDs,
  412. LsapDsLocDsLocalPolObj,
  413. LsapDsLocDsDomainPolObj,
  414. LsapDsLocLocalAndReg
  415. } LSAP_DB_DS_LOCATION, *PLSAP_DB_DS_LOCATION;
  416. typedef struct _LSAP_DB_DS_INFO {
  417. ULONG AttributeId;
  418. LSAP_DB_ATTRIB_TYPE AttributeType;
  419. LSAP_DB_DS_LOCATION AttributeLocation;
  420. } LSAP_DB_DS_INFO, *PLSAP_DB_DS_INFO;
  421. //
  422. // LSA Database Object General Information.
  423. //
  424. typedef struct _LSAP_DB_OBJECT_INFORMATION {
  425. LSAP_DB_OBJECT_TYPE_ID ObjectTypeId;
  426. LSAP_DB_OBJECT_TYPE_ID ContainerTypeId;
  427. OBJECT_ATTRIBUTES ObjectAttributes;
  428. PLSAP_DB_ATTRIBUTE TypeSpecificAttributes;
  429. PSID Sid;
  430. BOOLEAN ObjectAttributeNameOnly;
  431. ULONG DesiredObjectAccess;
  432. } LSAP_DB_OBJECT_INFORMATION, *PLSAP_DB_OBJECT_INFORMATION;
  433. //
  434. // New for the Ds integration
  435. //
  436. extern PLSAP_DB_DS_INFO LsapDbDsAttInfo;
  437. //
  438. // Installed, absolute minimum and absolute maximum Quota Limits.
  439. //
  440. extern QUOTA_LIMITS LsapDbInstalledQuotaLimits;
  441. extern QUOTA_LIMITS LsapDbAbsMinQuotaLimits;
  442. extern QUOTA_LIMITS LsapDbAbsMaxQuotaLimits;
  443. //
  444. // Required Ds data types
  445. //
  446. //
  447. // This is the state of the machine with respect to the Ds. It will control
  448. // some of the basic functionality of the Lsa APIs by determing who can write
  449. // what where, etc...
  450. //
  451. typedef enum _LSADS_INIT_STATE {
  452. LsapDsUnknown = 0,
  453. LsapDsNoDs,
  454. LsapDsDs,
  455. LsapDsDsMaintenance,
  456. LsapDsDsSetup
  457. } LSADS_INIT_STATE, *PLSADS_INIT_STATE;
  458. //
  459. // LSA Database Exported Function Prototypes
  460. //
  461. // NOTE: These are callable only from the LSA
  462. //
  463. BOOLEAN
  464. LsapDbIsServerInitialized(
  465. );
  466. NTSTATUS
  467. LsapDbOpenPolicy(
  468. IN PLSAPR_SERVER_NAME SystemName OPTIONAL,
  469. IN OPTIONAL PLSAPR_OBJECT_ATTRIBUTES ObjectAttributes,
  470. IN ACCESS_MASK DesiredAccess,
  471. IN ULONG Options,
  472. OUT PLSAPR_HANDLE PolicyHandle,
  473. IN BOOLEAN TrustedClient
  474. );
  475. NTSTATUS
  476. LsapDbOpenTrustedDomain(
  477. IN LSAPR_HANDLE PolicyHandle,
  478. IN PSID TrustedDomainSid,
  479. IN ACCESS_MASK DesiredAccess,
  480. OUT PLSAPR_HANDLE TrustedDomainHandle,
  481. IN ULONG Options
  482. );
  483. NTSTATUS
  484. LsapDbOpenTrustedDomainByName(
  485. IN LSAPR_HANDLE PolicyHandle OPTIONAL,
  486. IN PUNICODE_STRING TrustedDomainName,
  487. OUT PLSAPR_HANDLE TrustedDomainHandle,
  488. IN ULONG AccessMask,
  489. IN ULONG Options,
  490. IN BOOLEAN Trusted
  491. );
  492. NTSTATUS
  493. LsapDbOpenObject(
  494. IN PLSAP_DB_OBJECT_INFORMATION ObjectInformation,
  495. IN ACCESS_MASK DesiredAccess,
  496. IN ULONG Options,
  497. OUT PLSAPR_HANDLE LsaHandle
  498. );
  499. NTSTATUS
  500. LsapDbCreateObject(
  501. IN PLSAP_DB_OBJECT_INFORMATION ObjectInformation,
  502. IN ACCESS_MASK DesiredAccess,
  503. IN ULONG CreateDisposition,
  504. IN ULONG Options,
  505. IN OPTIONAL PLSAP_DB_ATTRIBUTE TypeSpecificAttributes,
  506. IN OUT ULONG *TypeSpecificAttributeCount,
  507. IN ULONG TypeSpecificAttributeAllocated,
  508. OUT PLSAPR_HANDLE LsaHandle
  509. );
  510. NTSTATUS
  511. LsapCloseHandle(
  512. IN OUT LSAPR_HANDLE *ObjectHandle,
  513. IN NTSTATUS PreliminaryStatus
  514. );
  515. NTSTATUS
  516. LsapDbCloseObject(
  517. IN PLSAPR_HANDLE ObjectHandle,
  518. IN ULONG Options,
  519. IN NTSTATUS PreliminaryStatus
  520. );
  521. NTSTATUS
  522. LsapDbDeleteObject(
  523. IN LSAPR_HANDLE ObjectHandle
  524. );
  525. NTSTATUS
  526. LsapDbReferenceObject(
  527. IN LSAPR_HANDLE ObjectHandle,
  528. IN ACCESS_MASK DesiredAccess,
  529. IN LSAP_DB_OBJECT_TYPE_ID HandleTypeId,
  530. IN LSAP_DB_OBJECT_TYPE_ID ObjectTypeId,
  531. IN ULONG Options
  532. );
  533. NTSTATUS
  534. LsapDbDereferenceObject(
  535. IN OUT PLSAPR_HANDLE ObjectHandle,
  536. IN LSAP_DB_OBJECT_TYPE_ID HandleTypeId,
  537. IN LSAP_DB_OBJECT_TYPE_ID ObjectTypeId,
  538. IN ULONG Options,
  539. IN SECURITY_DB_DELTA_TYPE SecurityDbDeltaType,
  540. IN NTSTATUS PreliminaryStatus
  541. );
  542. NTSTATUS
  543. LsapDbReadAttributeObject(
  544. IN LSAPR_HANDLE ObjectHandle,
  545. IN PUNICODE_STRING AttributeNameU,
  546. IN OPTIONAL PVOID AttributeValue,
  547. IN OUT PULONG AttributeValueLength
  548. );
  549. NTSTATUS
  550. LsapDbReadAttributeObjectEx(
  551. IN LSAPR_HANDLE ObjectHandle,
  552. IN LSAP_DB_NAMES AttributeIndex,
  553. IN OPTIONAL PVOID AttributeValue,
  554. IN OUT PULONG AttributeValueLength,
  555. IN BOOLEAN CanDefaultToZero
  556. );
  557. NTSTATUS
  558. LsapDbWriteAttributeObject(
  559. IN LSAPR_HANDLE ObjectHandle,
  560. IN PUNICODE_STRING AttributeNameU,
  561. IN PVOID AttributeValue,
  562. IN ULONG AttributeValueLength
  563. );
  564. NTSTATUS
  565. LsapDbWriteAttributesObject(
  566. IN LSAPR_HANDLE ObjectHandle,
  567. IN PLSAP_DB_ATTRIBUTE Attributes,
  568. IN ULONG AttributeCount
  569. );
  570. NTSTATUS
  571. LsapDbReadAttributesObject(
  572. IN LSAPR_HANDLE ObjectHandle,
  573. IN ULONG Options,
  574. IN OUT PLSAP_DB_ATTRIBUTE Attributes,
  575. IN ULONG AttributeCount
  576. );
  577. NTSTATUS
  578. LsapDbDeleteAttributeObject(
  579. IN LSAPR_HANDLE ObjectHandle,
  580. IN PUNICODE_STRING AttributeNameU,
  581. IN BOOLEAN DeleteSecurely
  582. );
  583. NTSTATUS
  584. LsapDbDeleteAttributesObject(
  585. IN LSAPR_HANDLE ObjectHandle,
  586. IN PLSAP_DB_ATTRIBUTE Attributes,
  587. IN ULONG AttributeCount
  588. );
  589. NTSTATUS
  590. LsapDbOpenTransaction(
  591. IN ULONG Options
  592. );
  593. NTSTATUS
  594. LsapDbApplyTransaction(
  595. IN LSAPR_HANDLE ObjectHandle,
  596. IN ULONG Options,
  597. IN SECURITY_DB_DELTA_TYPE SecurityDbDeltaType
  598. );
  599. NTSTATUS
  600. LsapDbAbortTransaction(
  601. IN ULONG Options
  602. );
  603. NTSTATUS
  604. LsapDbSidToLogicalNameObject(
  605. IN PSID Sid,
  606. OUT PUNICODE_STRING LogicalNameU
  607. );
  608. NTSTATUS
  609. LsapDbChangePrivilegesAccount(
  610. IN LSAPR_HANDLE AccountHandle,
  611. IN LSAP_DB_CHANGE_PRIVILEGE_MODE ChangeMode,
  612. IN BOOLEAN AllPrivileges,
  613. IN OPTIONAL PPRIVILEGE_SET Privileges,
  614. IN BOOL LockSce
  615. );
  616. NTSTATUS
  617. LsapDbEnumerateSids(
  618. IN LSAPR_HANDLE ContainerHandle,
  619. IN LSAP_DB_OBJECT_TYPE_ID ObjectTypeId,
  620. IN OUT PLSA_ENUMERATION_HANDLE EnumerationContext,
  621. OUT PLSAP_DB_SID_ENUMERATION_BUFFER DbEnumerationBuffer,
  622. IN ULONG PreferedMaximumLength
  623. );
  624. NTSTATUS
  625. LsapDbFindNextSid(
  626. IN LSAPR_HANDLE ContainerHandle,
  627. IN OUT PLSA_ENUMERATION_HANDLE EnumerationContext,
  628. IN LSAP_DB_OBJECT_TYPE_ID ObjectTypeId,
  629. OUT PLSAPR_SID *NextSid
  630. );
  631. NTSTATUS
  632. LsapDbEnumeratePrivileges(
  633. IN OUT PLSA_ENUMERATION_HANDLE EnumerationContext,
  634. OUT PLSAPR_PRIVILEGE_ENUM_BUFFER EnumerationBuffer,
  635. IN ULONG PreferedMaximumLength
  636. );
  637. NTSTATUS
  638. LsapDbEnumerateNames(
  639. IN LSAPR_HANDLE ContainerHandle,
  640. IN LSAP_DB_OBJECT_TYPE_ID ObjectTypeId,
  641. IN OUT PLSA_ENUMERATION_HANDLE EnumerationContext,
  642. OUT PLSAP_DB_NAME_ENUMERATION_BUFFER DbEnumerationBuffer,
  643. IN ULONG PreferedMaximumLength
  644. );
  645. NTSTATUS
  646. LsapDbFindNextName(
  647. IN LSAPR_HANDLE ContainerHandle,
  648. IN OUT PLSA_ENUMERATION_HANDLE EnumerationContext,
  649. IN LSAP_DB_OBJECT_TYPE_ID ObjectTypeId,
  650. OUT PLSAPR_UNICODE_STRING Name
  651. );
  652. VOID
  653. LsapDbFreeEnumerationBuffer(
  654. IN PLSAP_DB_NAME_ENUMERATION_BUFFER DbEnumerationBuffer
  655. );
  656. NTSTATUS
  657. LsapDbInitializeServer(
  658. IN ULONG Pass
  659. );
  660. //
  661. // These routines may someday migrate to Rtl runtime library. Their
  662. // names have Lsap Prefixes only temporarily, so that they can be located
  663. // easily.
  664. //
  665. // Options for LsapRtlAddPrivileges
  666. #define RTL_COMBINE_PRIVILEGE_ATTRIBUTES ((ULONG) 0x00000001L)
  667. #define RTL_SUPERSEDE_PRIVILEGE_ATTRIBUTES ((ULONG) 0x00000002L)
  668. NTSTATUS
  669. LsapRtlAddPrivileges(
  670. IN OUT PPRIVILEGE_SET * RunningPrivileges,
  671. IN OUT PULONG MaxRunningPrivileges,
  672. IN PPRIVILEGE_SET PrivilegesToAdd,
  673. IN ULONG Options,
  674. OUT OPTIONAL BOOLEAN * Changed
  675. );
  676. NTSTATUS
  677. LsapRtlRemovePrivileges(
  678. IN OUT PPRIVILEGE_SET ExistingPrivileges,
  679. IN PPRIVILEGE_SET PrivilegesToRemove
  680. );
  681. PLUID_AND_ATTRIBUTES
  682. LsapRtlGetPrivilege(
  683. IN PLUID_AND_ATTRIBUTES Privilege,
  684. IN PPRIVILEGE_SET Privileges
  685. );
  686. BOOLEAN
  687. LsapRtlPrefixSid(
  688. IN PSID PrefixSid,
  689. IN PSID Sid
  690. );
  691. ULONG
  692. LsapDbGetSizeTextSid(
  693. IN PSID Sid
  694. );
  695. NTSTATUS
  696. LsapDbSidToTextSid(
  697. IN PSID Sid,
  698. OUT PSZ TextSid
  699. );
  700. NTSTATUS
  701. LsapDbSidToUnicodeSid(
  702. IN PSID Sid,
  703. OUT PUNICODE_STRING SidU,
  704. IN BOOLEAN AllocateDestinationString
  705. );
  706. NTSTATUS
  707. LsapDbInitializeWellKnownValues();
  708. #if defined(REMOTE_BOOT)
  709. VOID
  710. LsapDbInitializeRemoteBootState();
  711. #endif // defined(REMOTE_BOOT)
  712. NTSTATUS
  713. LsapDbVerifyInformationObject(
  714. IN PLSAP_DB_OBJECT_INFORMATION ObjectInformation
  715. );
  716. /*++
  717. BOOLEAN
  718. LsapDbIsValidTypeObject(
  719. IN LSAP_DB_OBJECT_TYPE_ID ObjectTypeId
  720. )
  721. Routine Description:
  722. This macro function determines if a given Object Type Id is valid.
  723. Arguments:
  724. ObjectTypeId - Object Type Id.
  725. Return Values:
  726. BOOLEAN - TRUE if object type id is valid, else FALSE.
  727. --*/
  728. #define LsapDbIsValidTypeObject(ObjectTypeId) \
  729. (((ObjectTypeId) > NullObject) && \
  730. ((ObjectTypeId) < DummyLastObject))
  731. NTSTATUS
  732. LsapDbVerifyInfoQueryPolicy(
  733. IN LSAPR_HANDLE PolicyHandle,
  734. IN POLICY_INFORMATION_CLASS InformationClass,
  735. OUT PACCESS_MASK RequiredAccess
  736. );
  737. NTSTATUS
  738. LsapDbVerifyInfoSetPolicy(
  739. IN LSAPR_HANDLE PolicyHandle,
  740. IN POLICY_INFORMATION_CLASS InformationClass,
  741. IN PLSAPR_POLICY_INFORMATION PolicyInformation,
  742. OUT PACCESS_MASK RequiredAccess
  743. );
  744. BOOLEAN
  745. LsapDbValidInfoPolicy(
  746. IN POLICY_INFORMATION_CLASS InformationClass,
  747. IN OPTIONAL PLSAPR_POLICY_INFORMATION PolicyInformation
  748. );
  749. NTSTATUS
  750. LsapDbVerifyInfoQueryTrustedDomain(
  751. IN TRUSTED_INFORMATION_CLASS InformationClass,
  752. IN BOOLEAN Trusted,
  753. OUT PACCESS_MASK RequiredAccess
  754. );
  755. NTSTATUS
  756. LsapDbVerifyInfoSetTrustedDomain(
  757. IN TRUSTED_INFORMATION_CLASS InformationClass,
  758. IN PLSAPR_TRUSTED_DOMAIN_INFO TrustedDomainInformation,
  759. IN BOOLEAN Trusted,
  760. OUT PACCESS_MASK RequiredAccess
  761. );
  762. BOOLEAN
  763. LsapDbValidInfoTrustedDomain(
  764. IN TRUSTED_INFORMATION_CLASS InformationClass,
  765. IN OPTIONAL PLSAPR_TRUSTED_DOMAIN_INFO TrustedDomainInformation
  766. );
  767. NTSTATUS
  768. LsapDbMakeUnicodeAttribute(
  769. IN OPTIONAL PUNICODE_STRING UnicodeValue,
  770. IN PUNICODE_STRING AttributeName,
  771. OUT PLSAP_DB_ATTRIBUTE Attribute
  772. );
  773. VOID
  774. LsapDbCopyUnicodeAttributeNoAlloc(
  775. OUT PUNICODE_STRING OutputString,
  776. IN PLSAP_DB_ATTRIBUTE Attribute,
  777. IN BOOLEAN SelfRelative
  778. );
  779. NTSTATUS
  780. LsapDbCopyUnicodeAttribute(
  781. OUT PUNICODE_STRING OutputString,
  782. IN PLSAP_DB_ATTRIBUTE Attribute,
  783. IN BOOLEAN SelfRelative
  784. );
  785. NTSTATUS
  786. LsapDbMakeSidAttribute(
  787. IN PSID Sid,
  788. IN PUNICODE_STRING AttributeName,
  789. OUT PLSAP_DB_ATTRIBUTE Attribute
  790. );
  791. NTSTATUS
  792. LsapDbMakeGuidAttribute(
  793. IN GUID *Guid,
  794. IN PUNICODE_STRING AttributeName,
  795. OUT PLSAP_DB_ATTRIBUTE Attribute
  796. );
  797. NTSTATUS
  798. LsapDbMakeUnicodeAttributeDs(
  799. IN OPTIONAL PUNICODE_STRING UnicodeValue,
  800. IN LSAP_DB_NAMES Name,
  801. OUT PLSAP_DB_ATTRIBUTE Attribute
  802. );
  803. NTSTATUS
  804. LsapDbMakeSidAttributeDs(
  805. IN PSID Sid,
  806. IN IN LSAP_DB_NAMES Name,
  807. OUT PLSAP_DB_ATTRIBUTE Attribute
  808. );
  809. NTSTATUS
  810. LsapDbMakeGuidAttributeDs(
  811. IN GUID *Guid,
  812. IN LSAP_DB_NAMES Name,
  813. OUT PLSAP_DB_ATTRIBUTE Attribute
  814. );
  815. NTSTATUS
  816. LsapDbMakePByteAttributeDs(
  817. IN OPTIONAL PBYTE Buffer,
  818. IN ULONG BufferLength,
  819. IN LSAP_DB_ATTRIB_TYPE AttribType,
  820. IN PUNICODE_STRING AttributeName,
  821. OUT PLSAP_DB_ATTRIBUTE Attribute
  822. );
  823. NTSTATUS
  824. LsapDbReadAttribute(
  825. IN LSAPR_HANDLE ObjectHandle,
  826. IN OUT PLSAP_DB_ATTRIBUTE Attribute
  827. );
  828. NTSTATUS
  829. LsapDbFreeAttributes(
  830. IN ULONG Count,
  831. IN PLSAP_DB_ATTRIBUTE Attributes
  832. );
  833. /*++
  834. VOID
  835. LsapDbInitializeAttribute(
  836. IN PLSAP_DB_ATTRIBUTE AttributeP,
  837. IN PUNICODE_STRING AttributeNameP,
  838. IN OPTIONAL PVOID AttributeValueP,
  839. IN ULONG AttributeValueLengthP,
  840. IN BOOLEAN MemoryAllocatedP
  841. )
  842. Routine Description:
  843. This macro function initialize an Lsa Database Object Attribute
  844. structure. No validation is done.
  845. Arguments:
  846. AttributeP - Pointer to Lsa Database Attribute structure to be
  847. initialized.
  848. AttributeNameP - Pointer to Unicode String containing the attribute's
  849. name.
  850. AttributeValueP - Pointer to the attribute's value. NULL may be
  851. specified.
  852. AttributeValueLengthP - Length of the attribute's value in bytes.
  853. MemoryAllocatedP - TRUE if memory is allocated by MIDL_user_allocate
  854. within the LSA Server code (not by RPC server stubs), else FALSE.
  855. Return Values:
  856. None.
  857. --*/
  858. #define LsapDbInitializeAttribute( \
  859. AttributeP, \
  860. AttributeNameP, \
  861. AttributeValueP, \
  862. AttributeValueLengthP, \
  863. MemoryAllocatedP \
  864. ) \
  865. \
  866. { \
  867. (AttributeP)->AttributeName = AttributeNameP; \
  868. (AttributeP)->AttributeValue = AttributeValueP; \
  869. (AttributeP)->AttributeValueLength = AttributeValueLengthP; \
  870. (AttributeP)->MemoryAllocated = MemoryAllocatedP; \
  871. (AttributeP)->DsAttId = 0; \
  872. (AttributeP)->AttribType = LsapDbAttribUnknown; \
  873. (AttributeP)->CanDefaultToZero = FALSE; \
  874. (AttributeP)->PseudoAttribute = FALSE; \
  875. }
  876. /*++
  877. VOID
  878. LsapDbInitializeAttributeDs(
  879. IN PLSAP_DB_ATTRIBUTE AttributeP,
  880. IN LSAP_DB_NAMES Name,
  881. IN OPTIONAL PVOID AttributeValueP,
  882. IN ULONG AttributeValueLengthP,
  883. IN BOOLEAN MemoryAllocatedP
  884. )
  885. Routine Description:
  886. This macro function initialize an Lsa Database Object Attribute
  887. structure. No validation is done.
  888. Arguments:
  889. AttributeP - Pointer to Lsa Database Attribute structure to be
  890. initialized.
  891. Name - Name index to create
  892. AttributeValueP - Pointer to the attribute's value. NULL may be
  893. specified.
  894. AttributeValueLengthP - Length of the attribute's value in bytes.
  895. MemoryAllocatedP - TRUE if memory is allocated by MIDL_user_allocate
  896. within the LSA Server code (not by RPC server stubs), else FALSE.
  897. Return Values:
  898. None.
  899. --*/
  900. #define LsapDbInitializeAttributeDs( \
  901. AttributeP, \
  902. Name, \
  903. AttributeValueP, \
  904. AttributeValueLengthP, \
  905. MemoryAllocatedP \
  906. ) \
  907. \
  908. { \
  909. LsapDbInitializeAttribute( (AttributeP), &LsapDbNames[Name], \
  910. AttributeValueP, AttributeValueLengthP, \
  911. MemoryAllocatedP ); \
  912. (AttributeP)->DsAttId = LsapDbDsAttInfo[Name].AttributeId; \
  913. (AttributeP)->AttribType = LsapDbDsAttInfo[Name].AttributeType; \
  914. (AttributeP)->CanDefaultToZero = FALSE; \
  915. (AttributeP)->DbNameIndex = Name; \
  916. }
  917. #define LsapDbAttributeCanNotExist( \
  918. AttributeP \
  919. ) \
  920. { \
  921. (AttributeP)->CanDefaultToZero = TRUE; \
  922. }
  923. NTSTATUS
  924. LsapInitializeNotifiyList(
  925. VOID
  926. );
  927. NTSTATUS
  928. LsapCrServerGetSessionKeySafe(
  929. IN LSAPR_HANDLE ObjectHandle,
  930. IN LSAP_DB_OBJECT_TYPE_ID ObjectTypeId,
  931. OUT PLSAP_CR_CIPHER_KEY *SessionKey
  932. );
  933. NTSTATUS
  934. LsapDbVerifyHandle(
  935. IN LSAPR_HANDLE ObjectHandle,
  936. IN ULONG Options,
  937. IN LSAP_DB_OBJECT_TYPE_ID ExpectedObjectTypeId,
  938. IN BOOLEAN ReferenceHandle
  939. );
  940. BOOLEAN
  941. LsapDbDereferenceHandle(
  942. IN LSAPR_HANDLE ObjectHandle,
  943. IN BOOLEAN CalledInSuccessPath
  944. );
  945. NTSTATUS
  946. LsapDbQueryAllInformationAccounts(
  947. IN LSAPR_HANDLE PolicyHandle,
  948. IN ULONG IdCount,
  949. IN PSID_AND_ATTRIBUTES Ids,
  950. OUT PLSAP_DB_ACCOUNT_TYPE_SPECIFIC_INFO AccountInfo
  951. );
  952. NTSTATUS
  953. LsapCreateTrustedDomain2(
  954. IN LSAPR_HANDLE PolicyHandle,
  955. IN PLSAPR_TRUSTED_DOMAIN_INFORMATION_EX TrustedDomainInformation,
  956. IN PLSAPR_TRUSTED_DOMAIN_AUTH_INFORMATION AuthenticationInformation,
  957. IN ACCESS_MASK DesiredAccess,
  958. OUT PLSAPR_HANDLE TrustedDomainHandle
  959. );
  960. NTSTATUS
  961. LsapDsInitializeDsStateInfo(
  962. IN LSADS_INIT_STATE DsInitState
  963. );
  964. NTSTATUS
  965. LsapDsUnitializeDsStateInfo(
  966. );
  967. /*++
  968. BOOLEAN
  969. LsapValidateLsaUnicodeString(
  970. IN PLSAPR_UNICODE_STRING UnicodeString
  971. );
  972. Returns TRUE if the LSAPR_UNICODE_STRING is valid. FALSE otherwise
  973. --*/
  974. #define LsapValidateLsaUnicodeString( _us_ ) \
  975. (( (_us_) == NULL || \
  976. ( \
  977. (_us_)->MaximumLength >= ( _us_ )->Length && \
  978. (_us_)->Length % 2 == 0 && \
  979. (_us_)->MaximumLength % 2 == 0 && \
  980. ((_us_)->Length == 0 || (_us_)->Buffer != NULL ) \
  981. ) \
  982. ) ? TRUE : FALSE )
  983. /*++
  984. BOOLEAN
  985. LsapValidateLsaCipherValue(
  986. IN PLSAPR_UNICODE_STRING UnicodeString
  987. );
  988. Returns TRUE if the LSAPR_CR_CIPHER_KEY is valid. FALSE otherwise
  989. --*/
  990. #define LsapValidateLsaCipherValue( _us_ ) \
  991. ( \
  992. (_us_)->MaximumLength >= ( _us_ )->Length && \
  993. ((_us_)->Length == 0 || (_us_)->Buffer != NULL ) \
  994. ) \
  995. ? TRUE : FALSE
  996. NTSTATUS
  997. LsapDbIsRpcClientNetworkClient(
  998. IN OUT PBOOLEAN IsNetworkClient
  999. );
  1000. BOOLEAN
  1001. LsapSidPresentInGroups(
  1002. IN PTOKEN_GROUPS TokenGroups,
  1003. IN SID * Sid
  1004. );
  1005. NTSTATUS
  1006. LsapDomainRenameHandlerForLogonSessions(
  1007. IN PUNICODE_STRING OldNetbiosName,
  1008. IN PUNICODE_STRING OldDnsName,
  1009. IN PUNICODE_STRING NewNetbiosName,
  1010. IN PUNICODE_STRING NewDnsName
  1011. );
  1012. NTSTATUS
  1013. LsapRetrieveDnsDomainNameFromHive(
  1014. IN HKEY Hkey,
  1015. IN OUT DWORD * Length,
  1016. OUT WCHAR * Buffer
  1017. );
  1018. #ifdef __cplusplus
  1019. }
  1020. #endif // __cplusplus
  1021. #endif // _LSA_DB_