From e0021330643bfbe609d8b8814ee9f350941e4af3 Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Sat, 29 Dec 2012 14:44:42 +0000 Subject: [PATCH] [SAMSRV] Store an objects relative id in the database object. This will later be used to protect pre-defined objects from being deleted. svn path=/trunk/; revision=58038 --- reactos/dll/win32/samsrv/database.c | 4 ++++ reactos/dll/win32/samsrv/samrpc.c | 10 ++++++++++ reactos/dll/win32/samsrv/samsrv.h | 3 +++ 3 files changed, 17 insertions(+) diff --git a/reactos/dll/win32/samsrv/database.c b/reactos/dll/win32/samsrv/database.c index 904208e3b66..59b99697dad 100644 --- a/reactos/dll/win32/samsrv/database.c +++ b/reactos/dll/win32/samsrv/database.c @@ -97,6 +97,7 @@ NTSTATUS SampCreateDbObject(IN PSAM_DB_OBJECT ParentObject, IN LPWSTR ContainerName, IN LPWSTR ObjectName, + IN ULONG RelativeId, IN SAM_DB_OBJECT_TYPE ObjectType, IN ACCESS_MASK DesiredAccess, OUT PSAM_DB_OBJECT *DbObject) @@ -240,6 +241,7 @@ SampCreateDbObject(IN PSAM_DB_OBJECT ParentObject, NewObject->Access = DesiredAccess; NewObject->KeyHandle = ObjectKeyHandle; NewObject->MembersKeyHandle = MembersKeyHandle; + NewObject->RelativeId = RelativeId; NewObject->ParentObject = ParentObject; if (ParentObject != NULL) @@ -255,6 +257,7 @@ NTSTATUS SampOpenDbObject(IN PSAM_DB_OBJECT ParentObject, IN LPWSTR ContainerName, IN LPWSTR ObjectName, + IN ULONG RelativeId, IN SAM_DB_OBJECT_TYPE ObjectType, IN ACCESS_MASK DesiredAccess, OUT PSAM_DB_OBJECT *DbObject) @@ -390,6 +393,7 @@ SampOpenDbObject(IN PSAM_DB_OBJECT ParentObject, NewObject->Access = DesiredAccess; NewObject->KeyHandle = ObjectKeyHandle; NewObject->MembersKeyHandle = MembersKeyHandle; + NewObject->RelativeId = RelativeId; NewObject->ParentObject = ParentObject; if (ParentObject != NULL) diff --git a/reactos/dll/win32/samsrv/samrpc.c b/reactos/dll/win32/samsrv/samrpc.c index 7ec81e198ff..edb6dc2ce4f 100644 --- a/reactos/dll/win32/samsrv/samrpc.c +++ b/reactos/dll/win32/samsrv/samrpc.c @@ -88,6 +88,7 @@ SamrConnect(IN PSAMPR_SERVER_NAME ServerName, Status = SampOpenDbObject(NULL, NULL, L"SAM", + 0, SamDbServerObject, DesiredAccess, &ServerObject); @@ -509,6 +510,7 @@ SamrOpenDomain(IN SAMPR_HANDLE ServerHandle, Status = SampOpenDbObject(ServerObject, L"Domains", L"Builtin", + 0, SamDbDomainObject, DesiredAccess, &DomainObject); @@ -524,6 +526,7 @@ SamrOpenDomain(IN SAMPR_HANDLE ServerHandle, Status = SampOpenDbObject(ServerObject, L"Domains", L"Account", + 0, SamDbDomainObject, DesiredAccess, &DomainObject); @@ -1709,6 +1712,7 @@ SamrCreateGroupInDomain(IN SAMPR_HANDLE DomainHandle, Status = SampCreateDbObject(DomainObject, L"Groups", szRid, + ulRid, SamDbGroupObject, DesiredAccess, &GroupObject); @@ -2074,6 +2078,7 @@ SamrCreateUserInDomain(IN SAMPR_HANDLE DomainHandle, Status = SampCreateDbObject(DomainObject, L"Users", szRid, + ulRid, SamDbUserObject, DesiredAccess, &UserObject); @@ -2527,6 +2532,7 @@ SamrCreateAliasInDomain(IN SAMPR_HANDLE DomainHandle, Status = SampCreateDbObject(DomainObject, L"Aliases", szRid, + ulRid, SamDbAliasObject, DesiredAccess, &AliasObject); @@ -3464,6 +3470,7 @@ SamrOpenGroup(IN SAMPR_HANDLE DomainHandle, Status = SampOpenDbObject(DomainObject, L"Groups", szRid, + GroupId, SamDbGroupObject, DesiredAccess, &GroupObject); @@ -3911,6 +3918,7 @@ SamrOpenAlias(IN SAMPR_HANDLE DomainHandle, Status = SampOpenDbObject(DomainObject, L"Aliases", szRid, + AliasId, SamDbAliasObject, DesiredAccess, &AliasObject); @@ -4575,6 +4583,7 @@ SamrOpenUser(IN SAMPR_HANDLE DomainHandle, Status = SampOpenDbObject(DomainObject, L"Users", szRid, + UserId, SamDbUserObject, DesiredAccess, &UserObject); @@ -6335,6 +6344,7 @@ SamrCreateUser2InDomain(IN SAMPR_HANDLE DomainHandle, Status = SampCreateDbObject(DomainObject, L"Users", szRid, + ulRid, SamDbUserObject, DesiredAccess, &UserObject); diff --git a/reactos/dll/win32/samsrv/samsrv.h b/reactos/dll/win32/samsrv/samsrv.h index c7e54add732..609a4029bd7 100644 --- a/reactos/dll/win32/samsrv/samsrv.h +++ b/reactos/dll/win32/samsrv/samsrv.h @@ -46,6 +46,7 @@ typedef struct _SAM_DB_OBJECT LPWSTR Name; HANDLE KeyHandle; HANDLE MembersKeyHandle; // only used by Aliases and Groups + ULONG RelativeId; struct _SAM_DB_OBJECT *ParentObject; } SAM_DB_OBJECT, *PSAM_DB_OBJECT; @@ -117,6 +118,7 @@ NTSTATUS SampCreateDbObject(IN PSAM_DB_OBJECT ParentObject, IN LPWSTR ContainerName, IN LPWSTR ObjectName, + IN ULONG RelativeId, IN SAM_DB_OBJECT_TYPE ObjectType, IN ACCESS_MASK DesiredAccess, OUT PSAM_DB_OBJECT *DbObject); @@ -125,6 +127,7 @@ NTSTATUS SampOpenDbObject(IN PSAM_DB_OBJECT ParentObject, IN LPWSTR ContainerName, IN LPWSTR ObjectName, + IN ULONG RelativeId, IN SAM_DB_OBJECT_TYPE ObjectType, IN ACCESS_MASK DesiredAccess, OUT PSAM_DB_OBJECT *DbObject);