/* * Copyright (c) 2026, Chloe M. * Provided under the BSD-3 clause. * * Description: Object manager * Author: Chloe M. */ #include #include #include ST_STATUS ObCreateObject(const CHAR *Name, OBJECT_TYPE Type, VOID *Data, ST_OBJECT **Result) { ST_OBJECT *Object; USIZE NameLen; if (Name == NULL || Result == NULL) { return STATUS_INVALID_PARAM; } NameLen = RtlStrLen(Name); if (NameLen >= OBJECT_NAMESZ - 1) { return STATUS_NAME_TOO_LONG; } Object = ExAllocatePoolWithTag( POOL_NON_PAGED, sizeof(*Object), OBJECT_POOL_TAG ); if (Object == NULL) { return STATUS_NO_MEMORY; } RtlMemSet(Object, 0, sizeof(*Object)); RtlMemCpy(Object->Name, Name, NameLen); Object->Name[NameLen] = '\0'; Object->RefCount = 1; Object->Type = Type; Object->Data = Data; *Result = Object; return STATUS_SUCCESS; }