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
12 #define WIN32_NO_STATUS
14 #define COM_NO_WINDOWS_H
19 #define NTOS_MODE_USER
20 #include <ndk/cmfuncs.h>
21 #include <ndk/kefuncs.h>
22 #include <ndk/obfuncs.h>
23 #include <ndk/rtlfuncs.h>
24 #include <ddk/ntsam.h>
28 #include <samsrv/samsrv.h>
32 #include <wine/debug.h>
34 #include "resources.h"
36 typedef enum _SAM_DB_OBJECT_TYPE
46 typedef struct _SAM_DB_OBJECT
49 SAM_DB_OBJECT_TYPE ObjectType
;
54 HANDLE MembersKeyHandle
; // only used by Aliases
57 struct _SAM_DB_OBJECT
*ParentObject
;
58 } SAM_DB_OBJECT
, *PSAM_DB_OBJECT
;
60 #define SAMP_DB_SIGNATURE 0x87654321
62 typedef struct _SAM_ALIAS_FIXED_DATA
67 } SAM_ALIAS_FIXED_DATA
, *PSAM_ALIAS_FIXED_DATA
;
69 typedef struct _SAM_DOMAIN_FIXED_DATA
73 LARGE_INTEGER CreationTime
;
74 LARGE_INTEGER DomainModifiedCount
;
75 LARGE_INTEGER MaxPasswordAge
; /* relative Time */
76 LARGE_INTEGER MinPasswordAge
; /* relative Time */
77 LARGE_INTEGER ForceLogoff
; /* relative Time */
78 LARGE_INTEGER LockoutDuration
; /* relative Time */
79 LARGE_INTEGER LockoutObservationWindow
; /* relative Time */
80 LARGE_INTEGER ModifiedCountAtLastPromotion
;
82 ULONG PasswordProperties
;
83 USHORT MinPasswordLength
;
84 USHORT PasswordHistoryLength
;
85 USHORT LockoutThreshold
;
86 DOMAIN_SERVER_ENABLE_STATE DomainServerState
;
87 DOMAIN_SERVER_ROLE DomainServerRole
;
88 BOOLEAN UasCompatibilityRequired
;
89 } SAM_DOMAIN_FIXED_DATA
, *PSAM_DOMAIN_FIXED_DATA
;
91 typedef struct _SAM_GROUP_FIXED_DATA
97 } SAM_GROUP_FIXED_DATA
, *PSAM_GROUP_FIXED_DATA
;
99 typedef struct _SAM_USER_FIXED_DATA
103 LARGE_INTEGER LastLogon
;
104 LARGE_INTEGER LastLogoff
;
105 LARGE_INTEGER PasswordLastSet
;
106 LARGE_INTEGER AccountExpires
;
107 LARGE_INTEGER LastBadPasswordTime
;
109 ULONG PrimaryGroupId
;
110 ULONG UserAccountControl
;
113 USHORT BadPasswordCount
;
116 USHORT OperatorCount
;
117 } SAM_USER_FIXED_DATA
, *PSAM_USER_FIXED_DATA
;
120 extern PGENERIC_MAPPING pServerMapping
;
121 extern ENCRYPTED_NT_OWF_PASSWORD EmptyNtHash
;
122 extern ENCRYPTED_LM_OWF_PASSWORD EmptyLmHash
;
128 SampOpenAliasObject(IN PSAM_DB_OBJECT DomainObject
,
130 IN ACCESS_MASK DesiredAccess
,
131 OUT PSAM_DB_OBJECT
*AliasObject
);
134 SampAddMemberToAlias(IN PSAM_DB_OBJECT AliasObject
,
135 IN PRPC_SID MemberId
);
139 SampRemoveMemberFromAlias(IN PSAM_DB_OBJECT AliasObject
,
140 IN PRPC_SID MemberId
);
146 SampInitDatabase(VOID
);
149 SampCreateDbObject(IN PSAM_DB_OBJECT ParentObject
,
150 IN LPWSTR ContainerName
,
151 IN LPWSTR ObjectName
,
153 IN SAM_DB_OBJECT_TYPE ObjectType
,
154 IN ACCESS_MASK DesiredAccess
,
155 OUT PSAM_DB_OBJECT
*DbObject
);
158 SampOpenDbObject(IN PSAM_DB_OBJECT ParentObject
,
159 IN LPWSTR ContainerName
,
160 IN LPWSTR ObjectName
,
162 IN SAM_DB_OBJECT_TYPE ObjectType
,
163 IN ACCESS_MASK DesiredAccess
,
164 OUT PSAM_DB_OBJECT
*DbObject
);
167 SampValidateDbObject(SAMPR_HANDLE Handle
,
168 SAM_DB_OBJECT_TYPE ObjectType
,
169 ACCESS_MASK DesiredAccess
,
170 PSAM_DB_OBJECT
*DbObject
);
173 SampCloseDbObject(PSAM_DB_OBJECT DbObject
);
176 SampDeleteAccountDbObject(PSAM_DB_OBJECT DbObject
);
179 SampSetObjectAttribute(PSAM_DB_OBJECT DbObject
,
180 LPWSTR AttributeName
,
182 LPVOID AttributeData
,
183 ULONG AttributeSize
);
186 SampGetObjectAttribute(PSAM_DB_OBJECT DbObject
,
187 LPWSTR AttributeName
,
188 PULONG AttributeType
,
189 LPVOID AttributeData
,
190 PULONG AttributeSize
);
193 SampGetObjectAttributeString(PSAM_DB_OBJECT DbObject
,
194 LPWSTR AttributeName
,
195 RPC_UNICODE_STRING
*String
);
201 SampSetAccountNameInDomain(IN PSAM_DB_OBJECT DomainObject
,
202 IN LPCWSTR lpContainerName
,
203 IN LPCWSTR lpAccountName
,
204 IN ULONG ulRelativeId
);
207 SampRemoveAccountNameFromDomain(IN PSAM_DB_OBJECT DomainObject
,
208 IN LPCWSTR lpContainerName
,
209 IN LPCWSTR lpAccountName
);
212 SampCheckAccountNameInDomain(IN PSAM_DB_OBJECT DomainObject
,
213 IN LPCWSTR lpAccountName
);
216 SampRemoveMemberFromAllAliases(IN PSAM_DB_OBJECT DomainObject
,
217 IN PRPC_SID MemberSid
);
223 SampOpenGroupObject(IN PSAM_DB_OBJECT DomainObject
,
225 IN ACCESS_MASK DesiredAccess
,
226 OUT PSAM_DB_OBJECT
*GroupObject
);
229 SampAddMemberToGroup(IN PSAM_DB_OBJECT GroupObject
,
233 SampRemoveMemberFromGroup(IN PSAM_DB_OBJECT GroupObject
,
240 SampRegCloseKey(IN HANDLE KeyHandle
);
243 SampRegCreateKey(IN HANDLE ParentKeyHandle
,
245 IN ACCESS_MASK DesiredAccess
,
246 OUT HANDLE KeyHandle
);
249 SampRegDeleteKey(IN HANDLE ParentKeyHandle
,
253 SampRegEnumerateSubKey(IN HANDLE KeyHandle
,
259 SampRegOpenKey(IN HANDLE ParentKeyHandle
,
261 IN ACCESS_MASK DesiredAccess
,
262 OUT HANDLE KeyHandle
);
265 SampRegQueryKeyInfo(IN HANDLE KeyHandle
,
266 OUT PULONG SubKeyCount
,
267 OUT PULONG ValueCount
);
270 SampRegDeleteValue(IN HANDLE KeyHandle
,
271 IN LPCWSTR ValueName
);
274 SampRegEnumerateValue(IN HANDLE KeyHandle
,
277 IN OUT PULONG NameLength
,
278 OUT PULONG Type OPTIONAL
,
279 OUT PVOID Data OPTIONAL
,
280 IN OUT PULONG DataLength OPTIONAL
);
283 SampRegQueryValue(IN HANDLE KeyHandle
,
284 IN LPCWSTR ValueName
,
285 OUT PULONG Type OPTIONAL
,
286 OUT LPVOID Data OPTIONAL
,
287 IN OUT PULONG DataLength OPTIONAL
);
290 SampRegSetValue(IN HANDLE KeyHandle
,
291 IN LPCWSTR ValueName
,
294 IN ULONG DataLength
);
300 SampStartRpcServer(VOID
);
306 SampCreateServerSD(OUT PSECURITY_DESCRIPTOR
*ServerSd
,
313 SampInitializeSAM(VOID
);
319 SampOpenUserObject(IN PSAM_DB_OBJECT DomainObject
,
321 IN ACCESS_MASK DesiredAccess
,
322 OUT PSAM_DB_OBJECT
*UserObject
);
325 SampAddGroupMembershipToUser(IN PSAM_DB_OBJECT UserObject
,
327 IN ULONG Attributes
);
330 SampRemoveGroupMembershipFromUser(IN PSAM_DB_OBJECT UserObject
,
334 SampGetUserGroupAttributes(IN PSAM_DB_OBJECT DomainObject
,
337 OUT PULONG GroupAttributes
);
340 SampSetUserGroupAttributes(IN PSAM_DB_OBJECT DomainObject
,
343 IN ULONG GroupAttributes
);
346 SampRemoveUserFromAllGroups(IN PSAM_DB_OBJECT UserObject
);
349 SampSetUserPassword(IN PSAM_DB_OBJECT UserObject
,
350 IN PENCRYPTED_NT_OWF_PASSWORD NtPassword
,
351 IN BOOLEAN NtPasswordPresent
,
352 IN PENCRYPTED_LM_OWF_PASSWORD LmPassword
,
353 IN BOOLEAN LmPasswordPresent
);
356 SampGetLogonHoursAttrbute(IN PSAM_DB_OBJECT UserObject
,
357 IN OUT PSAMPR_LOGON_HOURS LogonHours
);
360 SampSetLogonHoursAttrbute(IN PSAM_DB_OBJECT UserObject
,
361 IN PSAMPR_LOGON_HOURS LogonHours
);
367 SampLoadString(HINSTANCE hInstance
,
373 SampIsSetupRunning(VOID
);
376 AppendRidToSid(PSID SrcSid
,
380 SampGetRidFromSid(IN PSID Sid
,
384 /* Undocumented advapi32 functions */
388 SystemFunction006(LPCSTR password
,
393 SystemFunction007(PUNICODE_STRING string
,