* PROGRAMMERS: Eric Kohl
*/
+#ifndef _SAMSRV_PCH_
+#define _SAMSRV_PCH_
+
#include <stdio.h>
#include <stdlib.h>
+
#define WIN32_NO_STATUS
#define _INC_WINDOWS
#define COM_NO_WINDOWS_H
+
#include <windef.h>
#include <winbase.h>
#include <winreg.h>
#define NTOS_MODE_USER
-#include <ndk/cmfuncs.h>
#include <ndk/kefuncs.h>
#include <ndk/obfuncs.h>
#include <ndk/rtlfuncs.h>
#include <ddk/ntsam.h>
-#include <ntsecapi.h>
#include <sddl.h>
-
-#include <samsrv/samsrv.h>
-
#include <sam_s.h>
#include <wine/debug.h>
+WINE_DEFAULT_DEBUG_CHANNEL(samsrv);
typedef enum _SAM_DB_OBJECT_TYPE
{
extern PGENERIC_MAPPING pServerMapping;
+extern ENCRYPTED_NT_OWF_PASSWORD EmptyNtHash;
+extern ENCRYPTED_LM_OWF_PASSWORD EmptyLmHash;
+extern RTL_RESOURCE SampResource;
/* alias.c */
IN ACCESS_MASK DesiredAccess,
OUT PSAM_DB_OBJECT *AliasObject);
+NTSTATUS
+SampAddMemberToAlias(IN PSAM_DB_OBJECT AliasObject,
+ IN PRPC_SID MemberId);
+
+NTSTATUS
+NTAPI
+SampRemoveMemberFromAlias(IN PSAM_DB_OBJECT AliasObject,
+ IN PRPC_SID MemberId);
+
+NTSTATUS
+SampGetMembersInAlias(IN PSAM_DB_OBJECT AliasObject,
+ OUT PULONG MemberCount,
+ OUT PSAMPR_SID_INFORMATION *MemberArray);
+
+NTSTATUS
+SampRemoveAllMembersFromAlias(IN PSAM_DB_OBJECT AliasObject);
+
/* database.c */
NTSTATUS
SampGetObjectAttributeString(PSAM_DB_OBJECT DbObject,
LPWSTR AttributeName,
- RPC_UNICODE_STRING *String);
+ PRPC_UNICODE_STRING String);
+NTSTATUS
+SampSetObjectAttributeString(PSAM_DB_OBJECT DbObject,
+ LPWSTR AttributeName,
+ PRPC_UNICODE_STRING String);
/* domain.c */
SampCheckAccountNameInDomain(IN PSAM_DB_OBJECT DomainObject,
IN LPCWSTR lpAccountName);
+NTSTATUS
+SampRemoveMemberFromAllAliases(IN PSAM_DB_OBJECT DomainObject,
+ IN PRPC_SID MemberSid);
+
+NTSTATUS
+SampCreateAccountSid(IN PSAM_DB_OBJECT DomainObject,
+ IN ULONG ulRelativeId,
+ IN OUT PSID *AccountSid);
/* group.h */
/* registry.h */
NTSTATUS
-SampRegCloseKey(IN HANDLE KeyHandle);
+SampRegCloseKey(IN OUT PHANDLE KeyHandle);
NTSTATUS
SampRegCreateKey(IN HANDLE ParentKeyHandle,
IN LPCWSTR KeyName,
IN ACCESS_MASK DesiredAccess,
- OUT HANDLE KeyHandle);
+ OUT PHANDLE KeyHandle);
NTSTATUS
SampRegDeleteKey(IN HANDLE ParentKeyHandle,
SampRegOpenKey(IN HANDLE ParentKeyHandle,
IN LPCWSTR KeyName,
IN ACCESS_MASK DesiredAccess,
- OUT HANDLE KeyHandle);
+ OUT PHANDLE KeyHandle);
NTSTATUS
SampRegQueryKeyInfo(IN HANDLE KeyHandle,
/* samspc.c */
-VOID SampStartRpcServer(VOID);
+VOID
+SampStartRpcServer(VOID);
+
+
+/* security.c */
+
+NTSTATUS
+SampCreateServerSD(OUT PSECURITY_DESCRIPTOR *ServerSd,
+ OUT PULONG Size);
+
+NTSTATUS
+SampCreateBuiltinDomainSD(OUT PSECURITY_DESCRIPTOR *DomainSd,
+ OUT PULONG Size);
+
+NTSTATUS
+SampCreateAccountDomainSD(OUT PSECURITY_DESCRIPTOR *DomainSd,
+ OUT PULONG Size);
+
+NTSTATUS
+SampCreateAliasSD(OUT PSECURITY_DESCRIPTOR *AliasSd,
+ OUT PULONG Size);
+NTSTATUS
+SampCreateGroupSD(OUT PSECURITY_DESCRIPTOR *GroupSd,
+ OUT PULONG Size);
+
+NTSTATUS
+SampCreateUserSD(IN PSID UserSid,
+ OUT PSECURITY_DESCRIPTOR *UserSd,
+ OUT PULONG Size);
/* setup.c */
-BOOL SampIsSetupRunning(VOID);
-BOOL SampInitializeSAM(VOID);
+BOOL
+SampInitializeSAM(VOID);
/* user.c */
NTSTATUS
SampRemoveUserFromAllGroups(IN PSAM_DB_OBJECT UserObject);
+NTSTATUS
+SampRemoveUserFromAllAliases(IN PSAM_DB_OBJECT UserObject);
+
NTSTATUS
SampSetUserPassword(IN PSAM_DB_OBJECT UserObject,
IN PENCRYPTED_NT_OWF_PASSWORD NtPassword,
IN BOOLEAN LmPasswordPresent);
NTSTATUS
-SampGetLogonHoursAttrbute(IN PSAM_DB_OBJECT UserObject,
- IN PSAMPR_LOGON_HOURS LogonHours);
+SampGetLogonHoursAttribute(IN PSAM_DB_OBJECT UserObject,
+ IN OUT PSAMPR_LOGON_HOURS LogonHours);
+
+NTSTATUS
+SampSetLogonHoursAttribute(IN PSAM_DB_OBJECT UserObject,
+ IN PSAMPR_LOGON_HOURS LogonHours);
+
+
+/* utils.c */
+
+INT
+SampLoadString(HINSTANCE hInstance,
+ UINT uId,
+ LPWSTR lpBuffer,
+ INT nBufferMax);
+
+BOOL
+SampIsSetupRunning(VOID);
+
+PSID
+AppendRidToSid(PSID SrcSid,
+ ULONG Rid);
+
+NTSTATUS
+SampGetRidFromSid(IN PSID Sid,
+ OUT PULONG Rid);
+
+NTSTATUS
+SampCheckAccountName(IN PRPC_UNICODE_STRING AccountName,
+ IN USHORT MaxLength);
+
+
+/* Undocumented advapi32 functions */
+
+NTSTATUS
+WINAPI
+SystemFunction006(LPCSTR password,
+ LPSTR hash);
+
+NTSTATUS
+WINAPI
+SystemFunction007(PUNICODE_STRING string,
+ LPBYTE hash);
+
+NTSTATUS
+WINAPI
+SystemFunction013(const BYTE *in,
+ const BYTE *key,
+ LPBYTE out);
-/* EOF */
+#endif /* _SAMSRV_PCH_ */