#include <kern/kern_cdata.h>

kern/kern_cdata.h Kernel.framework

15 macros · 7 functions · 2 typedefs · 1 enum

macroKCDATA_ITEM_HEADER_SIZE

Do not use these macros! Instead, you should use kcdata_iter_* functions defined in kcdata.h. These macros have no idea where the kcdata buffer ends, so they are all unsafe.
#define KCDATA_ITEM_HEADER_SIZE (sizeof(uint32_t) + sizeof(uint32_t) + sizeof(uint64_t))

macroKCDATA_ITEM_ITER

#define KCDATA_ITEM_ITER(item) kcdata_iter_unsafe((void*)(item))

macroKCDATA_ITEM_TYPE

#define KCDATA_ITEM_TYPE(item) kcdata_iter_type(KCDATA_ITEM_ITER(item))

macroKCDATA_ITEM_SIZE

#define KCDATA_ITEM_SIZE(item) kcdata_iter_size(KCDATA_ITEM_ITER(item))

macroKCDATA_ITEM_FLAGS

#define KCDATA_ITEM_FLAGS(item) kcdata_iter_flags(KCDATA_ITEM_ITER(item))

macroKCDATA_ITEM_ARRAY_GET_EL_TYPE

#define KCDATA_ITEM_ARRAY_GET_EL_TYPE(item) kcdata_iter_array_elem_type(KCDATA_ITEM_ITER(item))

macroKCDATA_ITEM_ARRAY_GET_EL_COUNT

#define KCDATA_ITEM_ARRAY_GET_EL_COUNT(item) kcdata_iter_array_elem_count(KCDATA_ITEM_ITER(item))

macroKCDATA_ITEM_ARRAY_GET_EL_SIZE

#define KCDATA_ITEM_ARRAY_GET_EL_SIZE(item) kcdata_iter_array_elem_size(KCDATA_ITEM_ITER(item))

macroKCDATA_CONTAINER_ID

#define KCDATA_CONTAINER_ID(item) kcdata_iter_container_id(KCDATA_ITEM_ITER(item))

macroKCDATA_ITEM_NEXT_HEADER

#define KCDATA_ITEM_NEXT_HEADER(itemx) (kcdata_iter_next(KCDATA_ITEM_ITER(itemx)).item)

macroKCDATA_ITEM_FOREACH

#define KCDATA_ITEM_FOREACH(head) for (; KCDATA_ITEM_TYPE(head) != KCDATA_TYPE_BUFFER_END; (head) = KCDATA_ITEM_NEXT_HEADER(head))

macroKCDATA_ITEM_DATA_PTR

#define KCDATA_ITEM_DATA_PTR(item) kcdata_iter_payload(KCDATA_ITEM_ITER(item))

macroKCDATA_ITEM_FIND_TYPE

#define KCDATA_ITEM_FIND_TYPE(itemx, type) (kcdata_iter_find_type(KCDATA_ITEM_ITER(itemx), type).item)

macrokcdata_get_container_type

#define kcdata_get_container_type(buffer) kcdata_iter_container_type(KCDATA_ITEM_ITER(buffer))

macrokcdata_get_data_with_desc

#define kcdata_get_data_with_desc(buf, desc, data) kcdata_iter_get_data_with_desc(KCDATA_ITEM_ITER(buf),desc,data,NULL)

enumkcd_compression_type_t

underlying type uint64_t
KCDCT_NONE0
KCDCT_ZLIB1

typedefkcd_compression_type_t

typedef enum kcd_compression_type_t kcd_compression_type_t;

typedefkcdata_descriptor_t

typedef void * kcdata_descriptor_t

functionkcdata_estimate_required_buffer_size

uint32_t kcdata_estimate_required_buffer_size(uint32_t num_items, uint32_t payload_size)
claude-fable-5, 2026-08-24 · not from Apple sources · verified against xnu osfmk/kern/kern_cdata.c
Estimates the buffer size needed for a kcdata buffer that will contain num_items items with total payload payload_size, accounting for per-item headers, worst-case alignment padding, and the begin/end markers. Panics on arithmetic overflow of the intermediate terms. The estimate is not accurate for buffers that will contain unknown types (those with string descriptions).

functionkcdata_memory_get_used_bytes

uint64_t kcdata_memory_get_used_bytes(kcdata_descriptor_t kcd)
claude-fable-5, 2026-08-24 · not from Apple sources · verified against xnu osfmk/kern/kern_cdata.c
Returns the number of bytes currently used in the kcdata buffer, from the start of the buffer through the end marker item.

functionkcdata_memory_get_uncompressed_bytes

uint64_t kcdata_memory_get_uncompressed_bytes(kcdata_descriptor_t kcd)
claude-fable-5, 2026-08-24 · not from Apple sources · verified against xnu osfmk/kern/kern_cdata.c
Returns the number of uncompressed bytes represented by the kcdata buffer. When the descriptor uses compression (KCFLAG_USE_COMPRESSION) this is the total input byte count from the compression statistics (0 if the statistics cannot be obtained); otherwise it is the same value as kcdata_memory_get_used_bytes.

functionkcdata_memcpy

kern_return_t kcdata_memcpy(
	kcdata_descriptor_t data,
	mach_vm_address_t dst_addr,
	const void * src_addr,
	uint32_t size
)
claude-fable-5, 2026-08-24 · not from Apple sources · verified against xnu osfmk/kern/kern_cdata.c
Copies size bytes from src_addr into a kcdata buffer at dst_addr, using copyout when the descriptor addresses user memory (KCFLAG_USE_COPYOUT) and memcpy otherwise. dst_addr is normally obtained from kcdata_get_memory_addr. Returns KERN_NO_ACCESS if the copyout fails, else KERN_SUCCESS.

functionkcdata_bzero

kern_return_t kcdata_bzero(
	kcdata_descriptor_t data,
	mach_vm_address_t dst_addr,
	uint32_t size
)
claude-fable-5, 2026-08-24 · not from Apple sources · verified against xnu osfmk/kern/kern_cdata.c
Zeroes size bytes of a kcdata buffer at dst_addr, via repeated copyout of zero blocks when the descriptor addresses user memory and bzero otherwise. Returns KERN_NO_ACCESS if a copyout fails, else KERN_SUCCESS.

functionkcdata_get_memory_addr

kern_return_t kcdata_get_memory_addr(
	kcdata_descriptor_t data,
	uint32_t type,
	uint32_t size,
	mach_vm_address_t * user_addr
)
claude-fable-5, 2026-08-24 · not from Apple sources · verified against xnu osfmk/kern/kern_cdata.c
Appends an item header of the given type and size to the kcdata buffer and returns through user_addr the address at which the caller should populate the item's data (with kcdata_memcpy, or copyout). Padding to 16-byte alignment is recorded in the item flags. The caller is responsible for zeroing or otherwise marking the reserved memory if it fails to populate it mid-operation. Returns KERN_INSUFFICIENT_BUFFER_SIZE (or resource errors) when the item does not fit.

functionkcdata_get_memory_addr_for_array

kern_return_t kcdata_get_memory_addr_for_array(
	kcdata_descriptor_t data,
	uint32_t type_of_element,
	uint32_t size_of_element,
	uint32_t count,
	mach_vm_address_t * user_addr
)
claude-fable-5, 2026-08-24 · not from Apple sources · verified against xnu osfmk/kern/kern_cdata.c
Reserves space in the kcdata buffer for an array of count elements of type_of_element, each size_of_element bytes, and returns through user_addr the address to populate. The element type and count are encoded in the item flags, and the pad byte count in the low bits of the KCDATA_TYPE_ARRAY_PAD type. The caller is responsible for zeroing the memory if population fails mid-operation.