PAGED KPoolPtr MakeExtendedPoolPtr()

in rtl/inc/kptr.h [121:148]


PAGED KPoolPtr<THeader> MakeExtendedPoolPtr(ULONG poolTag, ULONG payloadSize, _Out_opt_ PULONG allocationSize = nullptr)
{
    PAGED_CODE();

    if (allocationSize)
    {
        *allocationSize = 0;
    }

    ULONG totalSize;
    if (!NT_SUCCESS(RtlULongAdd(sizeof(THeader), payloadSize, &totalSize)))
    {
        return nullptr;
    }

    auto allocation = MakeSizedPoolPtr<THeader>(poolTag, totalSize);
    if (!allocation)
    {
        return nullptr;
    }

    if (allocationSize)
    {
        *allocationSize = totalSize;
    }

    return allocation;
}