Implement object security descriptor management stubs
Some checks failed
Builds / ExectOS (i686, debug) (push) Failing after 29s
Builds / ExectOS (amd64, debug) (push) Failing after 30s
Builds / ExectOS (i686, release) (push) Failing after 36s
Builds / ExectOS (amd64, release) (push) Failing after 39s

This commit is contained in:
2026-08-18 11:05:18 +02:00
parent b6ab1b959b
commit ca76ed314b
2 changed files with 185 additions and 0 deletions

View File

@@ -9,6 +9,75 @@
#include <xtos.hh>
/**
* Assigns a newly allocated security descriptor to an object.
*
* @param Object
* Supplies a pointer to the object being assigned a security descriptor.
*
* @param SecurityDescriptor
* Supplies a pointer to the security descriptor to be assigned.
*
* @param PoolType
* Supplies the type of pool memory used to allocate the security descriptor.
*
* @return This routine returns a status code indicating the success or failure of the operation.
*
* @since XT 1.0
*/
XTAPI
XTSTATUS
OB::Security::AssignObjectSecurityDescriptor(IN PVOID Object,
IN PSECURITY_DESCRIPTOR SecurityDescriptor,
IN MMPOOL_TYPE PoolType)
{
UNIMPLEMENTED;
/* Return success */
return STATUS_SUCCESS;
}
/**
* Audits object handles inherited by a new process.
*
* @param ObjectTableEntry
* Supplies a pointer to the specific handle table entry being enumerated.
*
* @param HandleId
* Supplies the runtime handle identifier associated with the entry.
*
* @param Context
* Supplies a pointer to the parent and child process contexts.
*
* @return This routine returns FALSE to ensure the enumeration continues across the entire handle table.
*
* @since XT 1.0
*/
XTAPI
BOOLEAN
OB::Security::AuditInheritedHandle(IN PHANDLE_TABLE_ENTRY ObjectTableEntry,
IN HANDLE HandleId,
IN PVOID Context)
{
PSECURITY_PROCESS_AUDIT_INFO AuditInfo;
/* Cast the enumeration parameter */
AuditInfo = (PSECURITY_PROCESS_AUDIT_INFO)Context;
/* Evaluate if the handle object is flagged for auditing */
if(ObjectTableEntry->ObAttributes & OBJECT_AUDIT_OBJECT_CLOSE)
{
/* Handle duplication event */
SE::Audit::AuditHandleDuplication(HandleId,
HandleId,
AuditInfo->ParentProcess,
AuditInfo->Process);
}
/* Return FALSE to proceed to the next handle entry */
return FALSE;
}
/**
* Consumes the audit mask for a handle table entry and triggers a security audit alarm if the requested access
* rights match the audit requirements.
@@ -78,6 +147,26 @@ OB::Security::AuditObjectAccess(IN HANDLE Handle,
}
}
/**
* Deassigns and frees a security descriptor previously assigned to an object.
*
* @param SecurityDescriptor
* Supplies a pointer to a variable containing the security descriptor to be removed.
*
* @return This routine returns a status code indicating the success or failure of the operation.
*
* @since XT 1.0
*/
XTAPI
XTSTATUS
OB::Security::DeassignSecurity(IN OUT PSECURITY_DESCRIPTOR *SecurityDescriptor)
{
UNIMPLEMENTED;
/* Return success */
return STATUS_SUCCESS;
}
/**
* Provides the default security procedure for handling object security descriptors.
*
@@ -126,18 +215,96 @@ OB::Security::ProcessObjectSecurityDescriptor(IN PVOID Object,
switch(OperationCode)
{
case AssignSecurityDescriptor:
AssignObjectSecurityDescriptor(Object, SecurityDescriptor, PoolType);
break;
case DeleteSecurityDescriptor:
return DeassignSecurity(OldSecurityDescriptor);
break;
case QuerySecurityDescriptor:
return QuerySecurityDescriptorInfo(Object, SecurityInformation, SecurityDescriptor, Length, OldSecurityDescriptor);
break;
case SetSecurityDescriptor:
return SetSecurityDescriptorInfo(Object, SecurityInformation, SecurityDescriptor, OldSecurityDescriptor, PoolType, GenericMapping);
break;
default:
KE::Crash::Panic(0x29, 0, STATUS_INVALID_PARAMETER, 0, 0);
break;
}
/* Return success */
return STATUS_SUCCESS;
}
/**
* Queries information from the security descriptor of an object.
*
* @param Object
* Supplies a pointer to the object whose security descriptor is being queried.
*
* @param SecurityInformation
* Supplies the type of security information being queried.
*
* @param SecurityDescriptor
* Supplies a pointer to the output buffer that receives the security descriptor.
*
* @param Length
* Supplies a pointer to a variable that specifies the length of the descriptor buffer.
*
* @param OldSecurityDescriptor
* Supplies a pointer to the original security descriptor of the object.
*
* @return This routine returns a status code indicating the success or failure of the operation.
*
* @since XT 1.0
*/
XTAPI
XTSTATUS
OB::Security::QuerySecurityDescriptorInfo(IN PVOID Object,
IN PSECURITY_INFORMATION SecurityInformation,
OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
IN OUT PULONG Length,
IN PSECURITY_DESCRIPTOR *OldSecurityDescriptor)
{
UNIMPLEMENTED;
/* Return success */
return STATUS_SUCCESS;
}
/**
* Modifies the security descriptor information of an object.
*
* @param Object
* Supplies a pointer to the object whose security descriptor is being modified.
*
* @param SecurityInformation
* Supplies the type of security information to set.
*
* @param SecurityDescriptor
* Supplies a pointer to the new security descriptor information to apply.
*
* @param OldSecurityDescriptor
* Supplies a pointer to a variable that holds the current security descriptor of the object.
*
* @param PoolType
* Supplies the type of pool memory used for allocating the new security descriptor.
*
* @param GenericMapping
* Supplies a pointer to the generic mapping structure for the object type.
*
* @return This routine returns a status code indicating the success or failure of the operation.
*
* @since XT 1.0
*/
XTAPI
XTSTATUS
OB::Security::SetSecurityDescriptorInfo(IN PVOID Object,
IN PSECURITY_INFORMATION SecurityInformation,
IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
IN OUT PSECURITY_DESCRIPTOR *OldSecurityDescriptor,
IN MMPOOL_TYPE PoolType,
IN PGENERIC_MAPPING GenericMapping)
{
UNIMPLEMENTED;
/* Return success */