---
title: inTaskWithOptions
framework: kernel
role: symbol
role_heading: Type Method
path: kernel/iobuffermemorydescriptor/1574847-intaskwithoptions
---

# inTaskWithOptions

Creates a memory buffer with memory descriptor for that buffer.

## Declaration

```occ
static OSPtr<IOBufferMemoryDescriptor> inTaskWithOptions(task_t inTask, IOOptionBits options, vm_size_t capacity, vm_offset_t alignment);
```

## Parameters

- `inTask`: The task the buffer will be allocated in.
- `options`: Options for the allocation: kIODirectionOut, kIODirectionIn - set the direction of the I/O transfer. kIOMemoryPhysicallyContiguous - pass to request memory be physically contiguous. This option is heavily discouraged. The request may fail if memory is fragmented, may cause large amounts of paging activity, and may take a very long time to execute. kIOMemoryPageable - pass to request memory be non-wired - the default for kernel allocated memory is wired. kIOMemoryPurgeable - pass to request memory that may later have its purgeable state set with IOMemoryDescriptor::setPurgeable. Only supported for kIOMemoryPageable allocations. kIOMemoryKernelUserShared - pass to request memory that will be mapped into both the kernel and client applications. kIOMapInhibitCache - allocate memory with inhibited cache setting. kIOMapWriteThruCache - allocate memory with writethru cache setting. kIOMapCopybackCache - allocate memory with copyback cache setting. kIOMapWriteCombineCache - allocate memory with writecombined cache setting.
- `capacity`: The number of bytes to allocate.
- `alignment`: The minimum required alignment of the buffer in bytes - 1 is the default for no required alignment. For example, pass 256 to get memory allocated at an address with bits 0-7 zero.

## Return Value

Return Value Returns an instance of class IOBufferMemoryDescriptor to be released by the caller, which will free the memory desriptor and associated buffer.

## Discussion

Discussion Added in OS X 10.2, this method allocates a memory buffer with a given size and alignment in the task's address space specified, and returns a memory descriptor instance representing the memory. It is recommended that memory allocated for I/O or sharing via mapping be created via IOBufferMemoryDescriptor. Options passed with the request specify the kind of memory to be allocated - pageablity and sharing are specified with option bits. This function may block and so should not be called from interrupt level or while a simple lock is held.

## See Also

### Creating a Memory Buffer Descriptor

- [inTaskWithOptions](kernel/iobuffermemorydescriptor/1813824-intaskwithoptions.md)
- [inTaskWithOptions](kernel/iobuffermemorydescriptor/3516446-intaskwithoptions.md)
- [inTaskWithPhysicalMask](kernel/iobuffermemorydescriptor/1813825-intaskwithphysicalmask.md)
- [inTaskWithPhysicalMask](kernel/iobuffermemorydescriptor/1574843-intaskwithphysicalmask.md)
- [initWithPhysicalMask](kernel/iobuffermemorydescriptor/1574833-initwithphysicalmask.md)
- [withOptions](kernel/iobuffermemorydescriptor/1574835-withoptions.md)
- [withBytes](kernel/iobuffermemorydescriptor/1574834-withbytes.md)
- [withCapacity](kernel/iobuffermemorydescriptor/1574841-withcapacity.md)
- [withCopy](kernel/iobuffermemorydescriptor/3074961-withcopy.md)
- [free](driverkit/iobuffermemorydescriptor/free.md)
