[SAMLIB][SAMSRV]
[reactos.git] / reactos / 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/obfuncs.h>
16 #include <ndk/rtlfuncs.h>
17 #include <ndk/umtypes.h>
18 #include <ddk/ntsam.h>
19 #include <ntsecapi.h>
20 #include <sddl.h>
21
22 #include <samsrv/samsrv.h>
23
24 #include "sam_s.h"
25
26 #include <wine/debug.h>
27
28 typedef enum _SAM_DB_OBJECT_TYPE
29 {
30 SamDbIgnoreObject,
31 SamDbContainerObject,
32 SamDbServerObject,
33 SamDbDomainObject,
34 SamDbAliasObject,
35 SamDbGroupObject,
36 SamDbUserObject
37 } SAM_DB_OBJECT_TYPE;
38
39 typedef struct _SAM_DB_OBJECT
40 {
41 ULONG Signature;
42 SAM_DB_OBJECT_TYPE ObjectType;
43 ULONG RefCount;
44 ACCESS_MASK Access;
45 LPWSTR Name;
46 HANDLE KeyHandle;
47 HANDLE MembersKeyHandle; // only used by Aliases and Groups
48 struct _SAM_DB_OBJECT *ParentObject;
49 } SAM_DB_OBJECT, *PSAM_DB_OBJECT;
50
51 #define SAMP_DB_SIGNATURE 0x87654321
52
53 /* database.c */
54
55 NTSTATUS
56 SampInitDatabase(VOID);
57
58 NTSTATUS
59 SampCreateDbObject(IN PSAM_DB_OBJECT ParentObject,
60 IN LPWSTR ContainerName,
61 IN LPWSTR ObjectName,
62 IN SAM_DB_OBJECT_TYPE ObjectType,
63 IN ACCESS_MASK DesiredAccess,
64 OUT PSAM_DB_OBJECT *DbObject);
65
66 NTSTATUS
67 SampOpenDbObject(IN PSAM_DB_OBJECT ParentObject,
68 IN LPWSTR ContainerName,
69 IN LPWSTR ObjectName,
70 IN SAM_DB_OBJECT_TYPE ObjectType,
71 IN ACCESS_MASK DesiredAccess,
72 OUT PSAM_DB_OBJECT *DbObject);
73
74 NTSTATUS
75 SampValidateDbObject(SAMPR_HANDLE Handle,
76 SAM_DB_OBJECT_TYPE ObjectType,
77 ACCESS_MASK DesiredAccess,
78 PSAM_DB_OBJECT *DbObject);
79
80 NTSTATUS
81 SampCloseDbObject(PSAM_DB_OBJECT DbObject);
82
83 NTSTATUS
84 SampSetDbObjectNameAlias(IN PSAM_DB_OBJECT DomainObject,
85 IN LPCWSTR lpContainerName,
86 IN LPCWSTR lpAliasName,
87 IN DWORD dwAliasValue);
88
89 NTSTATUS
90 SampCheckDbObjectNameAlias(IN PSAM_DB_OBJECT DomainObject,
91 IN LPCWSTR lpContainerName,
92 IN LPCWSTR lpAliasName,
93 OUT PBOOL bAliasExists);
94
95 NTSTATUS
96 SampSetObjectAttribute(PSAM_DB_OBJECT DbObject,
97 LPWSTR AttributeName,
98 ULONG AttributeType,
99 LPVOID AttributeData,
100 ULONG AttributeSize);
101
102 NTSTATUS
103 SampGetObjectAttribute(PSAM_DB_OBJECT DbObject,
104 LPWSTR AttributeName,
105 PULONG AttributeType,
106 LPVOID AttributeData,
107 PULONG AttributeSize);
108
109 /* registry.h */
110 NTSTATUS
111 SampRegCloseKey(IN HANDLE KeyHandle);
112
113 NTSTATUS
114 SampRegCreateKey(IN HANDLE ParentKeyHandle,
115 IN LPCWSTR KeyName,
116 IN ACCESS_MASK DesiredAccess,
117 OUT HANDLE KeyHandle);
118
119 NTSTATUS
120 SampRegEnumerateSubKey(IN HANDLE KeyHandle,
121 IN ULONG Index,
122 IN ULONG Length,
123 OUT LPWSTR Buffer);
124
125 NTSTATUS
126 SampRegOpenKey(IN HANDLE ParentKeyHandle,
127 IN LPCWSTR KeyName,
128 IN ACCESS_MASK DesiredAccess,
129 OUT HANDLE KeyHandle);
130
131 NTSTATUS
132 SampRegQueryKeyInfo(IN HANDLE KeyHandle,
133 OUT PULONG SubKeyCount,
134 OUT PULONG ValueCount);
135
136 NTSTATUS
137 SampRegEnumerateValue(IN HANDLE KeyHandle,
138 IN ULONG Index,
139 OUT LPWSTR Name,
140 IN OUT PULONG NameLength,
141 OUT PULONG Type OPTIONAL,
142 OUT PVOID Data OPTIONAL,
143 IN OUT PULONG DataLength OPTIONAL);
144
145 NTSTATUS
146 SampRegQueryValue(IN HANDLE KeyHandle,
147 IN LPWSTR ValueName,
148 OUT PULONG Type OPTIONAL,
149 OUT LPVOID Data OPTIONAL,
150 IN OUT PULONG DataLength OPTIONAL);
151
152 NTSTATUS
153 SampRegSetValue(IN HANDLE KeyHandle,
154 IN LPWSTR ValueName,
155 IN ULONG Type,
156 IN LPVOID Data,
157 IN ULONG DataLength);
158
159 /* samspc.c */
160 VOID SampStartRpcServer(VOID);
161
162 /* setup.c */
163 BOOL SampIsSetupRunning(VOID);
164 BOOL SampInitializeSAM(VOID);