2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: Security Account Manager (LSA) Server
4 * FILE: reactos/dll/win32/samsrv/samsrv.h
5 * PURPOSE: Common header file
7 * PROGRAMMERS: Eric Kohl
13 #define WIN32_NO_STATUS
15 #define COM_NO_WINDOWS_H
20 #define NTOS_MODE_USER
21 #include <ndk/kefuncs.h>
22 #include <ndk/rtlfuncs.h>
23 #include <ddk/ntsam.h>
27 #include <wine/debug.h>
28 WINE_DEFAULT_DEBUG_CHANNEL(samsrv
);
30 typedef enum _SAM_DB_OBJECT_TYPE
40 typedef struct _SAM_DB_OBJECT
43 SAM_DB_OBJECT_TYPE ObjectType
;
48 HANDLE MembersKeyHandle
; // only used by Aliases
51 struct _SAM_DB_OBJECT
*ParentObject
;
52 } SAM_DB_OBJECT
, *PSAM_DB_OBJECT
;
54 #define SAMP_DB_SIGNATURE 0x87654321
56 typedef struct _SAM_ALIAS_FIXED_DATA
61 } SAM_ALIAS_FIXED_DATA
, *PSAM_ALIAS_FIXED_DATA
;
63 typedef struct _SAM_DOMAIN_FIXED_DATA
67 LARGE_INTEGER CreationTime
;
68 LARGE_INTEGER DomainModifiedCount
;
69 LARGE_INTEGER MaxPasswordAge
; /* relative Time */
70 LARGE_INTEGER MinPasswordAge
; /* relative Time */
71 LARGE_INTEGER ForceLogoff
; /* relative Time */
72 LARGE_INTEGER LockoutDuration
; /* relative Time */
73 LARGE_INTEGER LockoutObservationWindow
; /* relative Time */
74 LARGE_INTEGER ModifiedCountAtLastPromotion
;
76 ULONG PasswordProperties
;
77 USHORT MinPasswordLength
;
78 USHORT PasswordHistoryLength
;
79 USHORT LockoutThreshold
;
80 DOMAIN_SERVER_ENABLE_STATE DomainServerState
;
81 DOMAIN_SERVER_ROLE DomainServerRole
;
82 BOOLEAN UasCompatibilityRequired
;
83 } SAM_DOMAIN_FIXED_DATA
, *PSAM_DOMAIN_FIXED_DATA
;
85 typedef struct _SAM_GROUP_FIXED_DATA
91 } SAM_GROUP_FIXED_DATA
, *PSAM_GROUP_FIXED_DATA
;
93 typedef struct _SAM_USER_FIXED_DATA
97 LARGE_INTEGER LastLogon
;
98 LARGE_INTEGER LastLogoff
;
99 LARGE_INTEGER PasswordLastSet
;
100 LARGE_INTEGER AccountExpires
;
101 LARGE_INTEGER LastBadPasswordTime
;
103 ULONG PrimaryGroupId
;
104 ULONG UserAccountControl
;
107 USHORT BadPasswordCount
;
110 USHORT OperatorCount
;
111 } SAM_USER_FIXED_DATA
, *PSAM_USER_FIXED_DATA
;
114 extern PGENERIC_MAPPING pServerMapping
;
115 extern ENCRYPTED_NT_OWF_PASSWORD EmptyNtHash
;
116 extern ENCRYPTED_LM_OWF_PASSWORD EmptyLmHash
;
117 extern RTL_RESOURCE SampResource
;
123 SampOpenAliasObject(IN PSAM_DB_OBJECT DomainObject
,
125 IN ACCESS_MASK DesiredAccess
,
126 OUT PSAM_DB_OBJECT
*AliasObject
);
129 SampAddMemberToAlias(IN PSAM_DB_OBJECT AliasObject
,
130 IN PRPC_SID MemberId
);
134 SampRemoveMemberFromAlias(IN PSAM_DB_OBJECT AliasObject
,
135 IN PRPC_SID MemberId
);
138 SampGetMembersInAlias(IN PSAM_DB_OBJECT AliasObject
,
139 OUT PULONG MemberCount
,
140 OUT PSAMPR_SID_INFORMATION
*MemberArray
);
143 SampRemoveAllMembersFromAlias(IN PSAM_DB_OBJECT AliasObject
);
149 SampInitDatabase(VOID
);
152 SampCreateDbObject(IN PSAM_DB_OBJECT ParentObject
,
153 IN LPWSTR ContainerName
,
154 IN LPWSTR ObjectName
,
156 IN SAM_DB_OBJECT_TYPE ObjectType
,
157 IN ACCESS_MASK DesiredAccess
,
158 OUT PSAM_DB_OBJECT
*DbObject
);
161 SampOpenDbObject(IN PSAM_DB_OBJECT ParentObject
,
162 IN LPWSTR ContainerName
,
163 IN LPWSTR ObjectName
,
165 IN SAM_DB_OBJECT_TYPE ObjectType
,
166 IN ACCESS_MASK DesiredAccess
,
167 OUT PSAM_DB_OBJECT
*DbObject
);
170 SampValidateDbObject(SAMPR_HANDLE Handle
,
171 SAM_DB_OBJECT_TYPE ObjectType
,
172 ACCESS_MASK DesiredAccess
,
173 PSAM_DB_OBJECT
*DbObject
);
176 SampCloseDbObject(PSAM_DB_OBJECT DbObject
);
179 SampDeleteAccountDbObject(PSAM_DB_OBJECT DbObject
);
182 SampSetObjectAttribute(PSAM_DB_OBJECT DbObject
,
183 LPWSTR AttributeName
,
185 LPVOID AttributeData
,
186 ULONG AttributeSize
);
189 SampGetObjectAttribute(PSAM_DB_OBJECT DbObject
,
190 LPWSTR AttributeName
,
191 PULONG AttributeType
,
192 LPVOID AttributeData
,
193 PULONG AttributeSize
);
196 SampGetObjectAttributeString(PSAM_DB_OBJECT DbObject
,
197 LPWSTR AttributeName
,
198 PRPC_UNICODE_STRING String
);
201 SampSetObjectAttributeString(PSAM_DB_OBJECT DbObject
,
202 LPWSTR AttributeName
,
203 PRPC_UNICODE_STRING String
);
208 SampSetAccountNameInDomain(IN PSAM_DB_OBJECT DomainObject
,
209 IN LPCWSTR lpContainerName
,
210 IN LPCWSTR lpAccountName
,
211 IN ULONG ulRelativeId
);
214 SampRemoveAccountNameFromDomain(IN PSAM_DB_OBJECT DomainObject
,
215 IN LPCWSTR lpContainerName
,
216 IN LPCWSTR lpAccountName
);
219 SampCheckAccountNameInDomain(IN PSAM_DB_OBJECT DomainObject
,
220 IN LPCWSTR lpAccountName
);
223 SampRemoveMemberFromAllAliases(IN PSAM_DB_OBJECT DomainObject
,
224 IN PRPC_SID MemberSid
);
227 SampCreateAccountSid(IN PSAM_DB_OBJECT DomainObject
,
228 IN ULONG ulRelativeId
,
229 IN OUT PSID
*AccountSid
);
234 SampOpenGroupObject(IN PSAM_DB_OBJECT DomainObject
,
236 IN ACCESS_MASK DesiredAccess
,
237 OUT PSAM_DB_OBJECT
*GroupObject
);
240 SampAddMemberToGroup(IN PSAM_DB_OBJECT GroupObject
,
244 SampRemoveMemberFromGroup(IN PSAM_DB_OBJECT GroupObject
,
251 SampRegCloseKey(IN OUT PHANDLE KeyHandle
);
254 SampRegCreateKey(IN HANDLE ParentKeyHandle
,
256 IN ACCESS_MASK DesiredAccess
,
257 OUT PHANDLE KeyHandle
);
260 SampRegDeleteKey(IN HANDLE ParentKeyHandle
,
264 SampRegEnumerateSubKey(IN HANDLE KeyHandle
,
270 SampRegOpenKey(IN HANDLE ParentKeyHandle
,
272 IN ACCESS_MASK DesiredAccess
,
273 OUT PHANDLE KeyHandle
);
276 SampRegQueryKeyInfo(IN HANDLE KeyHandle
,
277 OUT PULONG SubKeyCount
,
278 OUT PULONG ValueCount
);
281 SampRegDeleteValue(IN HANDLE KeyHandle
,
282 IN LPCWSTR ValueName
);
285 SampRegEnumerateValue(IN HANDLE KeyHandle
,
288 IN OUT PULONG NameLength
,
289 OUT PULONG Type OPTIONAL
,
290 OUT PVOID Data OPTIONAL
,
291 IN OUT PULONG DataLength OPTIONAL
);
294 SampRegQueryValue(IN HANDLE KeyHandle
,
295 IN LPCWSTR ValueName
,
296 OUT PULONG Type OPTIONAL
,
297 OUT LPVOID Data OPTIONAL
,
298 IN OUT PULONG DataLength OPTIONAL
);
301 SampRegSetValue(IN HANDLE KeyHandle
,
302 IN LPCWSTR ValueName
,
305 IN ULONG DataLength
);
311 SampStartRpcServer(VOID
);
317 SampCreateServerSD(OUT PSECURITY_DESCRIPTOR
*ServerSd
,
321 SampCreateBuiltinDomainSD(OUT PSECURITY_DESCRIPTOR
*DomainSd
,
325 SampCreateAccountDomainSD(OUT PSECURITY_DESCRIPTOR
*DomainSd
,
329 SampCreateAliasSD(OUT PSECURITY_DESCRIPTOR
*AliasSd
,
333 SampCreateGroupSD(OUT PSECURITY_DESCRIPTOR
*GroupSd
,
337 SampCreateUserSD(IN PSID UserSid
,
338 OUT PSECURITY_DESCRIPTOR
*UserSd
,
344 SampInitializeSAM(VOID
);
350 SampOpenUserObject(IN PSAM_DB_OBJECT DomainObject
,
352 IN ACCESS_MASK DesiredAccess
,
353 OUT PSAM_DB_OBJECT
*UserObject
);
356 SampAddGroupMembershipToUser(IN PSAM_DB_OBJECT UserObject
,
358 IN ULONG Attributes
);
361 SampRemoveGroupMembershipFromUser(IN PSAM_DB_OBJECT UserObject
,
365 SampGetUserGroupAttributes(IN PSAM_DB_OBJECT DomainObject
,
368 OUT PULONG GroupAttributes
);
371 SampSetUserGroupAttributes(IN PSAM_DB_OBJECT DomainObject
,
374 IN ULONG GroupAttributes
);
377 SampRemoveUserFromAllGroups(IN PSAM_DB_OBJECT UserObject
);
380 SampRemoveUserFromAllAliases(IN PSAM_DB_OBJECT UserObject
);
383 SampSetUserPassword(IN PSAM_DB_OBJECT UserObject
,
384 IN PENCRYPTED_NT_OWF_PASSWORD NtPassword
,
385 IN BOOLEAN NtPasswordPresent
,
386 IN PENCRYPTED_LM_OWF_PASSWORD LmPassword
,
387 IN BOOLEAN LmPasswordPresent
);
390 SampGetLogonHoursAttrbute(IN PSAM_DB_OBJECT UserObject
,
391 IN OUT PSAMPR_LOGON_HOURS LogonHours
);
394 SampSetLogonHoursAttrbute(IN PSAM_DB_OBJECT UserObject
,
395 IN PSAMPR_LOGON_HOURS LogonHours
);
401 SampLoadString(HINSTANCE hInstance
,
407 SampIsSetupRunning(VOID
);
410 AppendRidToSid(PSID SrcSid
,
414 SampGetRidFromSid(IN PSID Sid
,
418 SampCheckAccountName(IN PRPC_UNICODE_STRING AccountName
,
419 IN USHORT MaxLength
);
422 /* Undocumented advapi32 functions */
426 SystemFunction006(LPCSTR password
,
431 SystemFunction007(PUNICODE_STRING string
,