VOID NTAPI ExInitializeCallBack(IN OUT PEX_CALLBACK Callback) { /* Initialize the fast reference */ ExInitializeFastReference(&Callback->RoutineBlock, NULL); }
NTSTATUS NTAPI ObAssignObjectSecurityDescriptor(IN PVOID Object, IN PSECURITY_DESCRIPTOR SecurityDescriptor OPTIONAL, IN POOL_TYPE PoolType) { POBJECT_HEADER ObjectHeader; NTSTATUS Status; PSECURITY_DESCRIPTOR NewSd; PEX_FAST_REF FastRef; PAGED_CODE(); /* Get the object header */ ObjectHeader = OBJECT_TO_OBJECT_HEADER(Object); FastRef = (PEX_FAST_REF)&ObjectHeader->SecurityDescriptor; if (!SecurityDescriptor) { /* Nothing to assign */ ExInitializeFastReference(FastRef, NULL); return STATUS_SUCCESS; } /* Add it to our internal cache */ Status = ObLogSecurityDescriptor(SecurityDescriptor, &NewSd, MAX_FAST_REFS + 1); if (NT_SUCCESS(Status)) { /* Free the old copy */ ExFreePoolWithTag(SecurityDescriptor, TAG_SD); /* Set the new pointer */ ASSERT(NewSd); ExInitializeFastReference(FastRef, NewSd); } /* Return status */ return Status; }