Synchronize up to trunk's revision r57689.
[reactos.git] / dll / win32 / samsrv / samsrv.h
1 /*
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
6 *
7 * PROGRAMMERS: Eric Kohl
8 */
9
10 #include <stdio.h>
11 #define WIN32_NO_STATUS
12 #include <windows.h>
13 #define NTOS_MODE_USER
14 #include <ndk/cmfuncs.h>
15 #include <ndk/kefuncs.h>
16 #include <ndk/obfuncs.h>
17 #include <ndk/rtlfuncs.h>
18 #include <ndk/umtypes.h>
19 #include <ddk/ntsam.h>
20 #include <ntsecapi.h>
21 #include <sddl.h>
22
23 #include <samsrv/samsrv.h>
24
25 #include "sam_s.h"
26
27 #include <wine/debug.h>
28
29 typedef enum _SAM_DB_OBJECT_TYPE
30 {
31 SamDbIgnoreObject,
32 SamDbContainerObject,
33 SamDbServerObject,
34 SamDbDomainObject,
35 SamDbAliasObject,
36 SamDbGroupObject,
37 SamDbUserObject
38 } SAM_DB_OBJECT_TYPE;
39
40 typedef struct _SAM_DB_OBJECT
41 {
42 ULONG Signature;
43 SAM_DB_OBJECT_TYPE ObjectType;
44 ULONG RefCount;
45 ACCESS_MASK Access;
46 LPWSTR Name;
47 HANDLE KeyHandle;
48 HANDLE MembersKeyHandle; // only used by Aliases and Groups
49 struct _SAM_DB_OBJECT *ParentObject;
50 } SAM_DB_OBJECT, *PSAM_DB_OBJECT;
51
52 #define SAMP_DB_SIGNATURE 0x87654321
53
54 typedef struct _SAM_ALIAS_FIXED_DATA
55 {
56 ULONG Version;
57 ULONG Reserved;
58 ULONG AliasId;
59 } SAM_ALIAS_FIXED_DATA, *PSAM_ALIAS_FIXED_DATA;
60
61 typedef struct _SAM_DOMAIN_FIXED_DATA
62 {
63 ULONG Version;
64 ULONG Reserved;
65 LARGE_INTEGER CreationTime;
66 LARGE_INTEGER DomainModifiedCount;
67 LARGE_INTEGER MaxPasswordAge;
68 LARGE_INTEGER MinPasswordAge;
69 LARGE_INTEGER ForceLogoff;
70 LARGE_INTEGER LockoutDuration;
71 LARGE_INTEGER LockoutObservationWindow;
72 LARGE_INTEGER ModifiedCountAtLastPromotion;
73 ULONG NextRid;
74 ULONG PasswordProperties;
75 USHORT MinPasswordLength;
76 USHORT PasswordHistoryLength;
77 USHORT LockoutThreshold;
78 DOMAIN_SERVER_ENABLE_STATE DomainServerState;
79 DOMAIN_SERVER_ROLE DomainServerRole;
80 BOOLEAN UasCompatibilityRequired;
81 } SAM_DOMAIN_FIXED_DATA, *PSAM_DOMAIN_FIXED_DATA;
82
83 typedef struct _SAM_GROUP_FIXED_DATA
84 {
85 ULONG Version;
86 ULONG Reserved;
87 ULONG GroupId;
88 ULONG Attributes;
89 } SAM_GROUP_FIXED_DATA, *PSAM_GROUP_FIXED_DATA;
90
91 typedef struct _SAM_USER_FIXED_DATA
92 {
93 ULONG Version;
94 ULONG Reserved;
95 LARGE_INTEGER LastLogon;
96 LARGE_INTEGER LastLogoff;
97 LARGE_INTEGER PasswordLastSet;
98 LARGE_INTEGER AccountExpires;
99 LARGE_INTEGER LastBadPasswordTime;
100 ULONG UserId;
101 ULONG PrimaryGroupId;
102 ULONG UserAccountControl;
103 USHORT CountryCode;
104 USHORT CodePage;
105 USHORT BadPasswordCount;
106 USHORT LogonCount;
107 USHORT AdminCount;
108 USHORT OperatorCount;
109 } SAM_USER_FIXED_DATA, *PSAM_USER_FIXED_DATA;
110
111 /* database.c */
112
113 NTSTATUS
114 SampInitDatabase(VOID);
115
116 NTSTATUS
117 SampCreateDbObject(IN PSAM_DB_OBJECT ParentObject,
118 IN LPWSTR ContainerName,
119 IN LPWSTR ObjectName,
120 IN SAM_DB_OBJECT_TYPE ObjectType,
121 IN ACCESS_MASK DesiredAccess,
122 OUT PSAM_DB_OBJECT *DbObject);
123
124 NTSTATUS
125 SampOpenDbObject(IN PSAM_DB_OBJECT ParentObject,
126 IN LPWSTR ContainerName,
127 IN LPWSTR ObjectName,
128 IN SAM_DB_OBJECT_TYPE ObjectType,
129 IN ACCESS_MASK DesiredAccess,
130 OUT PSAM_DB_OBJECT *DbObject);
131
132 NTSTATUS
133 SampValidateDbObject(SAMPR_HANDLE Handle,
134 SAM_DB_OBJECT_TYPE ObjectType,
135 ACCESS_MASK DesiredAccess,
136 PSAM_DB_OBJECT *DbObject);
137
138 NTSTATUS
139 SampCloseDbObject(PSAM_DB_OBJECT DbObject);
140
141 NTSTATUS
142 SampCheckAccountNameInDomain(IN PSAM_DB_OBJECT DomainObject,
143 IN LPWSTR lpAccountName);
144
145 NTSTATUS
146 SampSetAccountNameInDomain(IN PSAM_DB_OBJECT DomainObject,
147 IN LPCWSTR lpContainerName,
148 IN LPCWSTR lpAccountName,
149 IN ULONG ulRelativeId);
150
151 NTSTATUS
152 SampSetObjectAttribute(PSAM_DB_OBJECT DbObject,
153 LPWSTR AttributeName,
154 ULONG AttributeType,
155 LPVOID AttributeData,
156 ULONG AttributeSize);
157
158 NTSTATUS
159 SampGetObjectAttribute(PSAM_DB_OBJECT DbObject,
160 LPWSTR AttributeName,
161 PULONG AttributeType,
162 LPVOID AttributeData,
163 PULONG AttributeSize);
164
165 NTSTATUS
166 SampGetObjectAttributeString(PSAM_DB_OBJECT DbObject,
167 LPWSTR AttributeName,
168 RPC_UNICODE_STRING *String);
169
170 /* registry.h */
171 NTSTATUS
172 SampRegCloseKey(IN HANDLE KeyHandle);
173
174 NTSTATUS
175 SampRegCreateKey(IN HANDLE ParentKeyHandle,
176 IN LPCWSTR KeyName,
177 IN ACCESS_MASK DesiredAccess,
178 OUT HANDLE KeyHandle);
179
180 NTSTATUS
181 SampRegDeleteKey(IN HANDLE ParentKeyHandle,
182 IN LPCWSTR KeyName);
183
184 NTSTATUS
185 SampRegEnumerateSubKey(IN HANDLE KeyHandle,
186 IN ULONG Index,
187 IN ULONG Length,
188 OUT LPWSTR Buffer);
189
190 NTSTATUS
191 SampRegOpenKey(IN HANDLE ParentKeyHandle,
192 IN LPCWSTR KeyName,
193 IN ACCESS_MASK DesiredAccess,
194 OUT HANDLE KeyHandle);
195
196 NTSTATUS
197 SampRegQueryKeyInfo(IN HANDLE KeyHandle,
198 OUT PULONG SubKeyCount,
199 OUT PULONG ValueCount);
200
201 NTSTATUS
202 SampRegDeleteValue(IN HANDLE KeyHandle,
203 IN LPWSTR ValueName);
204
205 NTSTATUS
206 SampRegEnumerateValue(IN HANDLE KeyHandle,
207 IN ULONG Index,
208 OUT LPWSTR Name,
209 IN OUT PULONG NameLength,
210 OUT PULONG Type OPTIONAL,
211 OUT PVOID Data OPTIONAL,
212 IN OUT PULONG DataLength OPTIONAL);
213
214 NTSTATUS
215 SampRegQueryValue(IN HANDLE KeyHandle,
216 IN LPWSTR ValueName,
217 OUT PULONG Type OPTIONAL,
218 OUT LPVOID Data OPTIONAL,
219 IN OUT PULONG DataLength OPTIONAL);
220
221 NTSTATUS
222 SampRegSetValue(IN HANDLE KeyHandle,
223 IN LPWSTR ValueName,
224 IN ULONG Type,
225 IN LPVOID Data,
226 IN ULONG DataLength);
227
228 /* samspc.c */
229 VOID SampStartRpcServer(VOID);
230
231 /* setup.c */
232 BOOL SampIsSetupRunning(VOID);
233 BOOL SampInitializeSAM(VOID);