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/cmfuncs.h>
22 #include <ndk/kefuncs.h>
23 #include <ndk/obfuncs.h>
24 #include <ndk/rtlfuncs.h>
25 #include <ddk/ntsam.h>
29 #include <samsrv/samsrv.h>
33 #include <wine/debug.h>
35 #include "resources.h"
37 typedef enum _SAM_DB_OBJECT_TYPE
47 typedef struct _SAM_DB_OBJECT
50 SAM_DB_OBJECT_TYPE ObjectType
;
55 HANDLE MembersKeyHandle
; // only used by Aliases
58 struct _SAM_DB_OBJECT
*ParentObject
;
59 } SAM_DB_OBJECT
, *PSAM_DB_OBJECT
;
61 #define SAMP_DB_SIGNATURE 0x87654321
63 typedef struct _SAM_ALIAS_FIXED_DATA
68 } SAM_ALIAS_FIXED_DATA
, *PSAM_ALIAS_FIXED_DATA
;
70 typedef struct _SAM_DOMAIN_FIXED_DATA
74 LARGE_INTEGER CreationTime
;
75 LARGE_INTEGER DomainModifiedCount
;
76 LARGE_INTEGER MaxPasswordAge
; /* relative Time */
77 LARGE_INTEGER MinPasswordAge
; /* relative Time */
78 LARGE_INTEGER ForceLogoff
; /* relative Time */
79 LARGE_INTEGER LockoutDuration
; /* relative Time */
80 LARGE_INTEGER LockoutObservationWindow
; /* relative Time */
81 LARGE_INTEGER ModifiedCountAtLastPromotion
;
83 ULONG PasswordProperties
;
84 USHORT MinPasswordLength
;
85 USHORT PasswordHistoryLength
;
86 USHORT LockoutThreshold
;
87 DOMAIN_SERVER_ENABLE_STATE DomainServerState
;
88 DOMAIN_SERVER_ROLE DomainServerRole
;
89 BOOLEAN UasCompatibilityRequired
;
90 } SAM_DOMAIN_FIXED_DATA
, *PSAM_DOMAIN_FIXED_DATA
;
92 typedef struct _SAM_GROUP_FIXED_DATA
98 } SAM_GROUP_FIXED_DATA
, *PSAM_GROUP_FIXED_DATA
;
100 typedef struct _SAM_USER_FIXED_DATA
104 LARGE_INTEGER LastLogon
;
105 LARGE_INTEGER LastLogoff
;
106 LARGE_INTEGER PasswordLastSet
;
107 LARGE_INTEGER AccountExpires
;
108 LARGE_INTEGER LastBadPasswordTime
;
110 ULONG PrimaryGroupId
;
111 ULONG UserAccountControl
;
114 USHORT BadPasswordCount
;
117 USHORT OperatorCount
;
118 } SAM_USER_FIXED_DATA
, *PSAM_USER_FIXED_DATA
;
121 extern PGENERIC_MAPPING pServerMapping
;
122 extern ENCRYPTED_NT_OWF_PASSWORD EmptyNtHash
;
123 extern ENCRYPTED_LM_OWF_PASSWORD EmptyLmHash
;
124 extern RTL_RESOURCE SampResource
;
130 SampOpenAliasObject(IN PSAM_DB_OBJECT DomainObject
,
132 IN ACCESS_MASK DesiredAccess
,
133 OUT PSAM_DB_OBJECT
*AliasObject
);
136 SampAddMemberToAlias(IN PSAM_DB_OBJECT AliasObject
,
137 IN PRPC_SID MemberId
);
141 SampRemoveMemberFromAlias(IN PSAM_DB_OBJECT AliasObject
,
142 IN PRPC_SID MemberId
);
145 SampGetMembersInAlias(IN PSAM_DB_OBJECT AliasObject
,
146 OUT PULONG MemberCount
,
147 OUT PSAMPR_SID_INFORMATION
*MemberArray
);
150 SampRemoveAllMembersFromAlias(IN PSAM_DB_OBJECT AliasObject
);
156 SampInitDatabase(VOID
);
159 SampCreateDbObject(IN PSAM_DB_OBJECT ParentObject
,
160 IN LPWSTR ContainerName
,
161 IN LPWSTR ObjectName
,
163 IN SAM_DB_OBJECT_TYPE ObjectType
,
164 IN ACCESS_MASK DesiredAccess
,
165 OUT PSAM_DB_OBJECT
*DbObject
);
168 SampOpenDbObject(IN PSAM_DB_OBJECT ParentObject
,
169 IN LPWSTR ContainerName
,
170 IN LPWSTR ObjectName
,
172 IN SAM_DB_OBJECT_TYPE ObjectType
,
173 IN ACCESS_MASK DesiredAccess
,
174 OUT PSAM_DB_OBJECT
*DbObject
);
177 SampValidateDbObject(SAMPR_HANDLE Handle
,
178 SAM_DB_OBJECT_TYPE ObjectType
,
179 ACCESS_MASK DesiredAccess
,
180 PSAM_DB_OBJECT
*DbObject
);
183 SampCloseDbObject(PSAM_DB_OBJECT DbObject
);
186 SampDeleteAccountDbObject(PSAM_DB_OBJECT DbObject
);
189 SampSetObjectAttribute(PSAM_DB_OBJECT DbObject
,
190 LPWSTR AttributeName
,
192 LPVOID AttributeData
,
193 ULONG AttributeSize
);
196 SampGetObjectAttribute(PSAM_DB_OBJECT DbObject
,
197 LPWSTR AttributeName
,
198 PULONG AttributeType
,
199 LPVOID AttributeData
,
200 PULONG AttributeSize
);
203 SampGetObjectAttributeString(PSAM_DB_OBJECT DbObject
,
204 LPWSTR AttributeName
,
205 PRPC_UNICODE_STRING String
);
208 SampSetObjectAttributeString(PSAM_DB_OBJECT DbObject
,
209 LPWSTR AttributeName
,
210 PRPC_UNICODE_STRING String
);
215 SampSetAccountNameInDomain(IN PSAM_DB_OBJECT DomainObject
,
216 IN LPCWSTR lpContainerName
,
217 IN LPCWSTR lpAccountName
,
218 IN ULONG ulRelativeId
);
221 SampRemoveAccountNameFromDomain(IN PSAM_DB_OBJECT DomainObject
,
222 IN LPCWSTR lpContainerName
,
223 IN LPCWSTR lpAccountName
);
226 SampCheckAccountNameInDomain(IN PSAM_DB_OBJECT DomainObject
,
227 IN LPCWSTR lpAccountName
);
230 SampRemoveMemberFromAllAliases(IN PSAM_DB_OBJECT DomainObject
,
231 IN PRPC_SID MemberSid
);
234 SampCreateAccountSid(IN PSAM_DB_OBJECT DomainObject
,
235 IN ULONG ulRelativeId
,
236 IN OUT PSID
*AccountSid
);
241 SampOpenGroupObject(IN PSAM_DB_OBJECT DomainObject
,
243 IN ACCESS_MASK DesiredAccess
,
244 OUT PSAM_DB_OBJECT
*GroupObject
);
247 SampAddMemberToGroup(IN PSAM_DB_OBJECT GroupObject
,
251 SampRemoveMemberFromGroup(IN PSAM_DB_OBJECT GroupObject
,
258 SampRegCloseKey(IN OUT PHANDLE KeyHandle
);
261 SampRegCreateKey(IN HANDLE ParentKeyHandle
,
263 IN ACCESS_MASK DesiredAccess
,
264 OUT PHANDLE KeyHandle
);
267 SampRegDeleteKey(IN HANDLE ParentKeyHandle
,
271 SampRegEnumerateSubKey(IN HANDLE KeyHandle
,
277 SampRegOpenKey(IN HANDLE ParentKeyHandle
,
279 IN ACCESS_MASK DesiredAccess
,
280 OUT PHANDLE KeyHandle
);
283 SampRegQueryKeyInfo(IN HANDLE KeyHandle
,
284 OUT PULONG SubKeyCount
,
285 OUT PULONG ValueCount
);
288 SampRegDeleteValue(IN HANDLE KeyHandle
,
289 IN LPCWSTR ValueName
);
292 SampRegEnumerateValue(IN HANDLE KeyHandle
,
295 IN OUT PULONG NameLength
,
296 OUT PULONG Type OPTIONAL
,
297 OUT PVOID Data OPTIONAL
,
298 IN OUT PULONG DataLength OPTIONAL
);
301 SampRegQueryValue(IN HANDLE KeyHandle
,
302 IN LPCWSTR ValueName
,
303 OUT PULONG Type OPTIONAL
,
304 OUT LPVOID Data OPTIONAL
,
305 IN OUT PULONG DataLength OPTIONAL
);
308 SampRegSetValue(IN HANDLE KeyHandle
,
309 IN LPCWSTR ValueName
,
312 IN ULONG DataLength
);
318 SampStartRpcServer(VOID
);
324 SampCreateServerSD(OUT PSECURITY_DESCRIPTOR
*ServerSd
,
328 SampCreateBuiltinDomainSD(OUT PSECURITY_DESCRIPTOR
*DomainSd
,
332 SampCreateAccountDomainSD(OUT PSECURITY_DESCRIPTOR
*DomainSd
,
336 SampCreateAliasSD(OUT PSECURITY_DESCRIPTOR
*AliasSd
,
340 SampCreateGroupSD(OUT PSECURITY_DESCRIPTOR
*GroupSd
,
344 SampCreateUserSD(IN PSID UserSid
,
345 OUT PSECURITY_DESCRIPTOR
*UserSd
,
351 SampInitializeSAM(VOID
);
357 SampOpenUserObject(IN PSAM_DB_OBJECT DomainObject
,
359 IN ACCESS_MASK DesiredAccess
,
360 OUT PSAM_DB_OBJECT
*UserObject
);
363 SampAddGroupMembershipToUser(IN PSAM_DB_OBJECT UserObject
,
365 IN ULONG Attributes
);
368 SampRemoveGroupMembershipFromUser(IN PSAM_DB_OBJECT UserObject
,
372 SampGetUserGroupAttributes(IN PSAM_DB_OBJECT DomainObject
,
375 OUT PULONG GroupAttributes
);
378 SampSetUserGroupAttributes(IN PSAM_DB_OBJECT DomainObject
,
381 IN ULONG GroupAttributes
);
384 SampRemoveUserFromAllGroups(IN PSAM_DB_OBJECT UserObject
);
387 SampSetUserPassword(IN PSAM_DB_OBJECT UserObject
,
388 IN PENCRYPTED_NT_OWF_PASSWORD NtPassword
,
389 IN BOOLEAN NtPasswordPresent
,
390 IN PENCRYPTED_LM_OWF_PASSWORD LmPassword
,
391 IN BOOLEAN LmPasswordPresent
);
394 SampGetLogonHoursAttrbute(IN PSAM_DB_OBJECT UserObject
,
395 IN OUT PSAMPR_LOGON_HOURS LogonHours
);
398 SampSetLogonHoursAttrbute(IN PSAM_DB_OBJECT UserObject
,
399 IN PSAMPR_LOGON_HOURS LogonHours
);
405 SampLoadString(HINSTANCE hInstance
,
411 SampIsSetupRunning(VOID
);
414 AppendRidToSid(PSID SrcSid
,
418 SampGetRidFromSid(IN PSID Sid
,
422 SampCheckAccountName(IN PRPC_UNICODE_STRING AccountName
,
423 IN USHORT MaxLength
);
426 /* Undocumented advapi32 functions */
430 SystemFunction006(LPCSTR password
,
435 SystemFunction007(PUNICODE_STRING string
,