+/*! @function inTaskWithOptions
+ @abstract Creates a memory buffer with memory descriptor for that buffer.
+ @discussion Added in Mac 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.
+ @param inTask The task the buffer will be allocated in.
+ @param options Options for the allocation:<br>
+ kIODirectionOut, kIODirectionIn - set the direction of the I/O transfer.<br>
+ 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.<br>
+ kIOMemoryPageable - pass to request memory be non-wired - the default for kernel allocated memory is wired.<br>
+ kIOMemoryPurgeable - pass to request memory that may later have its purgeable state set with IOMemoryDescriptor::setPurgeable. Only supported for kIOMemoryPageable allocations.<br>
+ kIOMemoryKernelUserShared - pass to request memory that will be mapped into both the kernel and client applications.<br>
+ kIOMapInhibitCache - allocate memory with inhibited cache setting. <br>
+ kIOMapWriteThruCache - allocate memory with writethru cache setting. <br>
+ kIOMapCopybackCache - allocate memory with copyback cache setting. <br>
+ kIOMapWriteCombineCache - allocate memory with writecombined cache setting.
+ @param capacity The number of bytes to allocate.
+ @param 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.
+ @result Returns an instance of class IOBufferMemoryDescriptor to be released by the caller, which will free the memory desriptor and associated buffer. */
+
+ static IOBufferMemoryDescriptor * inTaskWithOptions(
+ task_t inTask,
+ IOOptionBits options,
+ vm_size_t capacity,
+ vm_offset_t alignment = 1);
+
+/*! @function inTaskWithPhysicalMask
+ @abstract Creates a memory buffer with memory descriptor for that buffer.
+ @discussion Added in Mac OS X 10.5, 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.
+ @param inTask The task the buffer will be mapped in. Pass NULL to create memory unmapped in any task (eg. for use as a DMA buffer).
+ @param options Options for the allocation:<br>
+ kIODirectionOut, kIODirectionIn - set the direction of the I/O transfer.<br>
+ 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.<br>
+ kIOMemoryKernelUserShared - pass to request memory that will be mapped into both the kernel and client applications.<br>
+ kIOMapInhibitCache - allocate memory with inhibited cache setting. <br>
+ kIOMapWriteThruCache - allocate memory with writethru cache setting. <br>
+ kIOMapCopybackCache - allocate memory with copyback cache setting. <br>
+ kIOMapWriteCombineCache - allocate memory with writecombined cache setting.
+ @param capacity The number of bytes to allocate.
+ @param mask The buffer will be allocated with pages such that physical addresses will only have bits set present in physicalMask. For example, pass 0x00000000FFFFFFFFULL for a buffer to be accessed by hardware that has 32 address bits.
+ @result Returns an instance of class IOBufferMemoryDescriptor to be released by the caller, which will free the memory desriptor and associated buffer. */
+
+ static IOBufferMemoryDescriptor * inTaskWithPhysicalMask(
+ task_t inTask,
+ IOOptionBits options,
+ mach_vm_size_t capacity,
+ mach_vm_address_t physicalMask);
+