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
18 #define NTOS_MODE_USER
19 #include <ndk/cmfuncs.h>
20 #include <ndk/kefuncs.h>
21 #include <ndk/obfuncs.h>
22 #include <ndk/rtlfuncs.h>
23 #include <ddk/ntsam.h>
27 #include <samsrv/samsrv.h>
31 #include <wine/debug.h>
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
;
123 SampOpenAliasObject(IN PSAM_DB_OBJECT DomainObject
,
125 IN ACCESS_MASK DesiredAccess
,
126 OUT PSAM_DB_OBJECT
*AliasObject
);
132 SampInitDatabase(VOID
);
135 SampCreateDbObject(IN PSAM_DB_OBJECT ParentObject
,
136 IN LPWSTR ContainerName
,
137 IN LPWSTR ObjectName
,
139 IN SAM_DB_OBJECT_TYPE ObjectType
,
140 IN ACCESS_MASK DesiredAccess
,
141 OUT PSAM_DB_OBJECT
*DbObject
);
144 SampOpenDbObject(IN PSAM_DB_OBJECT ParentObject
,
145 IN LPWSTR ContainerName
,
146 IN LPWSTR ObjectName
,
148 IN SAM_DB_OBJECT_TYPE ObjectType
,
149 IN ACCESS_MASK DesiredAccess
,
150 OUT PSAM_DB_OBJECT
*DbObject
);
153 SampValidateDbObject(SAMPR_HANDLE Handle
,
154 SAM_DB_OBJECT_TYPE ObjectType
,
155 ACCESS_MASK DesiredAccess
,
156 PSAM_DB_OBJECT
*DbObject
);
159 SampCloseDbObject(PSAM_DB_OBJECT DbObject
);
162 SampDeleteAccountDbObject(PSAM_DB_OBJECT DbObject
);
165 SampSetObjectAttribute(PSAM_DB_OBJECT DbObject
,
166 LPWSTR AttributeName
,
168 LPVOID AttributeData
,
169 ULONG AttributeSize
);
172 SampGetObjectAttribute(PSAM_DB_OBJECT DbObject
,
173 LPWSTR AttributeName
,
174 PULONG AttributeType
,
175 LPVOID AttributeData
,
176 PULONG AttributeSize
);
179 SampGetObjectAttributeString(PSAM_DB_OBJECT DbObject
,
180 LPWSTR AttributeName
,
181 RPC_UNICODE_STRING
*String
);
187 SampSetAccountNameInDomain(IN PSAM_DB_OBJECT DomainObject
,
188 IN LPCWSTR lpContainerName
,
189 IN LPCWSTR lpAccountName
,
190 IN ULONG ulRelativeId
);
193 SampRemoveAccountNameFromDomain(IN PSAM_DB_OBJECT DomainObject
,
194 IN LPCWSTR lpContainerName
,
195 IN LPCWSTR lpAccountName
);
198 SampCheckAccountNameInDomain(IN PSAM_DB_OBJECT DomainObject
,
199 IN LPCWSTR lpAccountName
);
205 SampOpenGroupObject(IN PSAM_DB_OBJECT DomainObject
,
207 IN ACCESS_MASK DesiredAccess
,
208 OUT PSAM_DB_OBJECT
*GroupObject
);
211 SampAddMemberToGroup(IN PSAM_DB_OBJECT GroupObject
,
215 SampRemoveMemberFromGroup(IN PSAM_DB_OBJECT GroupObject
,
222 SampRegCloseKey(IN HANDLE KeyHandle
);
225 SampRegCreateKey(IN HANDLE ParentKeyHandle
,
227 IN ACCESS_MASK DesiredAccess
,
228 OUT HANDLE KeyHandle
);
231 SampRegDeleteKey(IN HANDLE ParentKeyHandle
,
235 SampRegEnumerateSubKey(IN HANDLE KeyHandle
,
241 SampRegOpenKey(IN HANDLE ParentKeyHandle
,
243 IN ACCESS_MASK DesiredAccess
,
244 OUT HANDLE KeyHandle
);
247 SampRegQueryKeyInfo(IN HANDLE KeyHandle
,
248 OUT PULONG SubKeyCount
,
249 OUT PULONG ValueCount
);
252 SampRegDeleteValue(IN HANDLE KeyHandle
,
253 IN LPCWSTR ValueName
);
256 SampRegEnumerateValue(IN HANDLE KeyHandle
,
259 IN OUT PULONG NameLength
,
260 OUT PULONG Type OPTIONAL
,
261 OUT PVOID Data OPTIONAL
,
262 IN OUT PULONG DataLength OPTIONAL
);
265 SampRegQueryValue(IN HANDLE KeyHandle
,
266 IN LPCWSTR ValueName
,
267 OUT PULONG Type OPTIONAL
,
268 OUT LPVOID Data OPTIONAL
,
269 IN OUT PULONG DataLength OPTIONAL
);
272 SampRegSetValue(IN HANDLE KeyHandle
,
273 IN LPCWSTR ValueName
,
276 IN ULONG DataLength
);
281 VOID
SampStartRpcServer(VOID
);
286 BOOL
SampIsSetupRunning(VOID
);
287 BOOL
SampInitializeSAM(VOID
);
293 SampOpenUserObject(IN PSAM_DB_OBJECT DomainObject
,
295 IN ACCESS_MASK DesiredAccess
,
296 OUT PSAM_DB_OBJECT
*UserObject
);
299 SampAddGroupMembershipToUser(IN PSAM_DB_OBJECT UserObject
,
301 IN ULONG Attributes
);
304 SampRemoveGroupMembershipFromUser(IN PSAM_DB_OBJECT UserObject
,
308 SampGetUserGroupAttributes(IN PSAM_DB_OBJECT DomainObject
,
311 OUT PULONG GroupAttributes
);
314 SampSetUserGroupAttributes(IN PSAM_DB_OBJECT DomainObject
,
317 IN ULONG GroupAttributes
);
320 SampRemoveUserFromAllGroups(IN PSAM_DB_OBJECT UserObject
);
323 SampSetUserPassword(IN PSAM_DB_OBJECT UserObject
,
324 IN PENCRYPTED_NT_OWF_PASSWORD NtPassword
,
325 IN BOOLEAN NtPasswordPresent
,
326 IN PENCRYPTED_LM_OWF_PASSWORD LmPassword
,
327 IN BOOLEAN LmPasswordPresent
);