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
This commit is contained in:
Eric Kohl 2012-12-29 14:44:42 +00:00
parent dfa3ce1995
commit e002133064
3 changed files with 17 additions and 0 deletions

View file

@ -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)

View file

@ -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);

View file

@ -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);