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
16 #define WIN32_NO_STATUS
18 #define COM_NO_WINDOWS_H
23 #define NTOS_MODE_USER
24 #include <ndk/kefuncs.h>
25 #include <ndk/rtlfuncs.h>
26 #include <ddk/ntsam.h>
30 #include <wine/debug.h>
31 WINE_DEFAULT_DEBUG_CHANNEL(samsrv
);
33 typedef enum _SAM_DB_OBJECT_TYPE
43 typedef struct _SAM_DB_OBJECT
46 SAM_DB_OBJECT_TYPE ObjectType
;
51 HANDLE MembersKeyHandle
; // only used by Aliases
54 struct _SAM_DB_OBJECT
*ParentObject
;
55 } SAM_DB_OBJECT
, *PSAM_DB_OBJECT
;
57 #define SAMP_DB_SIGNATURE 0x87654321
59 typedef struct _SAM_ALIAS_FIXED_DATA
64 } SAM_ALIAS_FIXED_DATA
, *PSAM_ALIAS_FIXED_DATA
;
66 typedef struct _SAM_DOMAIN_FIXED_DATA
70 LARGE_INTEGER CreationTime
;
71 LARGE_INTEGER DomainModifiedCount
;
72 LARGE_INTEGER MaxPasswordAge
; /* relative Time */
73 LARGE_INTEGER MinPasswordAge
; /* relative Time */
74 LARGE_INTEGER ForceLogoff
; /* relative Time */
75 LARGE_INTEGER LockoutDuration
; /* relative Time */
76 LARGE_INTEGER LockoutObservationWindow
; /* relative Time */
77 LARGE_INTEGER ModifiedCountAtLastPromotion
;
79 ULONG PasswordProperties
;
80 USHORT MinPasswordLength
;
81 USHORT PasswordHistoryLength
;
82 USHORT LockoutThreshold
;
83 DOMAIN_SERVER_ENABLE_STATE DomainServerState
;
84 DOMAIN_SERVER_ROLE DomainServerRole
;
85 BOOLEAN UasCompatibilityRequired
;
86 } SAM_DOMAIN_FIXED_DATA
, *PSAM_DOMAIN_FIXED_DATA
;
88 typedef struct _SAM_GROUP_FIXED_DATA
94 } SAM_GROUP_FIXED_DATA
, *PSAM_GROUP_FIXED_DATA
;
96 typedef struct _SAM_USER_FIXED_DATA
100 LARGE_INTEGER LastLogon
;
101 LARGE_INTEGER LastLogoff
;
102 LARGE_INTEGER PasswordLastSet
;
103 LARGE_INTEGER AccountExpires
;
104 LARGE_INTEGER LastBadPasswordTime
;
106 ULONG PrimaryGroupId
;
107 ULONG UserAccountControl
;
110 USHORT BadPasswordCount
;
113 USHORT OperatorCount
;
114 } SAM_USER_FIXED_DATA
, *PSAM_USER_FIXED_DATA
;
117 extern PGENERIC_MAPPING pServerMapping
;
118 extern ENCRYPTED_NT_OWF_PASSWORD EmptyNtHash
;
119 extern ENCRYPTED_LM_OWF_PASSWORD EmptyLmHash
;
120 extern RTL_RESOURCE SampResource
;
126 SampOpenAliasObject(IN PSAM_DB_OBJECT DomainObject
,
128 IN ACCESS_MASK DesiredAccess
,
129 OUT PSAM_DB_OBJECT
*AliasObject
);
132 SampAddMemberToAlias(IN PSAM_DB_OBJECT AliasObject
,
133 IN PRPC_SID MemberId
);
137 SampRemoveMemberFromAlias(IN PSAM_DB_OBJECT AliasObject
,
138 IN PRPC_SID MemberId
);
141 SampGetMembersInAlias(IN PSAM_DB_OBJECT AliasObject
,
142 OUT PULONG MemberCount
,
143 OUT PSAMPR_SID_INFORMATION
*MemberArray
);
146 SampRemoveAllMembersFromAlias(IN PSAM_DB_OBJECT AliasObject
);
152 SampInitDatabase(VOID
);
155 SampCreateDbObject(IN PSAM_DB_OBJECT ParentObject
,
156 IN LPWSTR ContainerName
,
157 IN LPWSTR ObjectName
,
159 IN SAM_DB_OBJECT_TYPE ObjectType
,
160 IN ACCESS_MASK DesiredAccess
,
161 OUT PSAM_DB_OBJECT
*DbObject
);
164 SampOpenDbObject(IN PSAM_DB_OBJECT ParentObject
,
165 IN LPWSTR ContainerName
,
166 IN LPWSTR ObjectName
,
168 IN SAM_DB_OBJECT_TYPE ObjectType
,
169 IN ACCESS_MASK DesiredAccess
,
170 OUT PSAM_DB_OBJECT
*DbObject
);
173 SampValidateDbObject(SAMPR_HANDLE Handle
,
174 SAM_DB_OBJECT_TYPE ObjectType
,
175 ACCESS_MASK DesiredAccess
,
176 PSAM_DB_OBJECT
*DbObject
);
179 SampCloseDbObject(PSAM_DB_OBJECT DbObject
);
182 SampDeleteAccountDbObject(PSAM_DB_OBJECT DbObject
);
185 SampSetObjectAttribute(PSAM_DB_OBJECT DbObject
,
186 LPWSTR AttributeName
,
188 LPVOID AttributeData
,
189 ULONG AttributeSize
);
192 SampGetObjectAttribute(PSAM_DB_OBJECT DbObject
,
193 LPWSTR AttributeName
,
194 PULONG AttributeType
,
195 LPVOID AttributeData
,
196 PULONG AttributeSize
);
199 SampGetObjectAttributeString(PSAM_DB_OBJECT DbObject
,
200 LPWSTR AttributeName
,
201 PRPC_UNICODE_STRING String
);
204 SampSetObjectAttributeString(PSAM_DB_OBJECT DbObject
,
205 LPWSTR AttributeName
,
206 PRPC_UNICODE_STRING String
);
211 SampSetAccountNameInDomain(IN PSAM_DB_OBJECT DomainObject
,
212 IN LPCWSTR lpContainerName
,
213 IN LPCWSTR lpAccountName
,
214 IN ULONG ulRelativeId
);
217 SampRemoveAccountNameFromDomain(IN PSAM_DB_OBJECT DomainObject
,
218 IN LPCWSTR lpContainerName
,
219 IN LPCWSTR lpAccountName
);
222 SampCheckAccountNameInDomain(IN PSAM_DB_OBJECT DomainObject
,
223 IN LPCWSTR lpAccountName
);
226 SampRemoveMemberFromAllAliases(IN PSAM_DB_OBJECT DomainObject
,
227 IN PRPC_SID MemberSid
);
230 SampCreateAccountSid(IN PSAM_DB_OBJECT DomainObject
,
231 IN ULONG ulRelativeId
,
232 IN OUT PSID
*AccountSid
);
237 SampOpenGroupObject(IN PSAM_DB_OBJECT DomainObject
,
239 IN ACCESS_MASK DesiredAccess
,
240 OUT PSAM_DB_OBJECT
*GroupObject
);
243 SampAddMemberToGroup(IN PSAM_DB_OBJECT GroupObject
,
247 SampRemoveMemberFromGroup(IN PSAM_DB_OBJECT GroupObject
,
254 SampRegCloseKey(IN OUT PHANDLE KeyHandle
);
257 SampRegCreateKey(IN HANDLE ParentKeyHandle
,
259 IN ACCESS_MASK DesiredAccess
,
260 OUT PHANDLE KeyHandle
);
263 SampRegDeleteKey(IN HANDLE ParentKeyHandle
,
267 SampRegEnumerateSubKey(IN HANDLE KeyHandle
,
273 SampRegOpenKey(IN HANDLE ParentKeyHandle
,
275 IN ACCESS_MASK DesiredAccess
,
276 OUT PHANDLE KeyHandle
);
279 SampRegQueryKeyInfo(IN HANDLE KeyHandle
,
280 OUT PULONG SubKeyCount
,
281 OUT PULONG ValueCount
);
284 SampRegDeleteValue(IN HANDLE KeyHandle
,
285 IN LPCWSTR ValueName
);
288 SampRegEnumerateValue(IN HANDLE KeyHandle
,
291 IN OUT PULONG NameLength
,
292 OUT PULONG Type OPTIONAL
,
293 OUT PVOID Data OPTIONAL
,
294 IN OUT PULONG DataLength OPTIONAL
);
297 SampRegQueryValue(IN HANDLE KeyHandle
,
298 IN LPCWSTR ValueName
,
299 OUT PULONG Type OPTIONAL
,
300 OUT LPVOID Data OPTIONAL
,
301 IN OUT PULONG DataLength OPTIONAL
);
304 SampRegSetValue(IN HANDLE KeyHandle
,
305 IN LPCWSTR ValueName
,
308 IN ULONG DataLength
);
314 SampStartRpcServer(VOID
);
320 SampCreateServerSD(OUT PSECURITY_DESCRIPTOR
*ServerSd
,
324 SampCreateBuiltinDomainSD(OUT PSECURITY_DESCRIPTOR
*DomainSd
,
328 SampCreateAccountDomainSD(OUT PSECURITY_DESCRIPTOR
*DomainSd
,
332 SampCreateAliasSD(OUT PSECURITY_DESCRIPTOR
*AliasSd
,
336 SampCreateGroupSD(OUT PSECURITY_DESCRIPTOR
*GroupSd
,
340 SampCreateUserSD(IN PSID UserSid
,
341 OUT PSECURITY_DESCRIPTOR
*UserSd
,
347 SampInitializeSAM(VOID
);
353 SampOpenUserObject(IN PSAM_DB_OBJECT DomainObject
,
355 IN ACCESS_MASK DesiredAccess
,
356 OUT PSAM_DB_OBJECT
*UserObject
);
359 SampAddGroupMembershipToUser(IN PSAM_DB_OBJECT UserObject
,
361 IN ULONG Attributes
);
364 SampRemoveGroupMembershipFromUser(IN PSAM_DB_OBJECT UserObject
,
368 SampGetUserGroupAttributes(IN PSAM_DB_OBJECT DomainObject
,
371 OUT PULONG GroupAttributes
);
374 SampSetUserGroupAttributes(IN PSAM_DB_OBJECT DomainObject
,
377 IN ULONG GroupAttributes
);
380 SampRemoveUserFromAllGroups(IN PSAM_DB_OBJECT UserObject
);
383 SampRemoveUserFromAllAliases(IN PSAM_DB_OBJECT UserObject
);
386 SampSetUserPassword(IN PSAM_DB_OBJECT UserObject
,
387 IN PENCRYPTED_NT_OWF_PASSWORD NtPassword
,
388 IN BOOLEAN NtPasswordPresent
,
389 IN PENCRYPTED_LM_OWF_PASSWORD LmPassword
,
390 IN BOOLEAN LmPasswordPresent
);
393 SampGetLogonHoursAttrbute(IN PSAM_DB_OBJECT UserObject
,
394 IN OUT PSAMPR_LOGON_HOURS LogonHours
);
397 SampSetLogonHoursAttrbute(IN PSAM_DB_OBJECT UserObject
,
398 IN PSAMPR_LOGON_HOURS LogonHours
);
404 SampLoadString(HINSTANCE hInstance
,
410 SampIsSetupRunning(VOID
);
413 AppendRidToSid(PSID SrcSid
,
417 SampGetRidFromSid(IN PSID Sid
,
421 SampCheckAccountName(IN PRPC_UNICODE_STRING AccountName
,
422 IN USHORT MaxLength
);
425 /* Undocumented advapi32 functions */
429 SystemFunction006(LPCSTR password
,
434 SystemFunction007(PUNICODE_STRING string
,
437 #endif /* _SAMSRV_PCH_ */