---
title: IOMemoryDescriptor
framework: kernel
role: symbol
role_heading: Class
path: kernel/iomemorydescriptor
---

# IOMemoryDescriptor

An abstract base class that defines common methods for describing physical or virtual memory.

## Declaration

```occ
class IOMemoryDescriptor : OSObject
```

## Overview

Overview An IOMemoryDescriptor object represents a buffer or range of memory, specified as one or more physical or virtual address ranges. It contains methods to return the memory's physically contiguous segments (fragments), for use with the IOMemoryCursor, and methods to map the memory into any address space with caching and placed mapping options.

## Topics

### Creating the Memory Buffer

- [initWithOptions](kernel/iomemorydescriptor/1812826-initwithoptions.md)
- [initWithOptions](kernel/iomemorydescriptor/1441969-initwithoptions.md)
- [withOptions](kernel/iomemorydescriptor/1812897-withoptions.md)
- [withOptions](kernel/iomemorydescriptor/1441825-withoptions.md)
- [withAddress](kernel/iomemorydescriptor/1812881-withaddress.md)
- [withAddress](kernel/iomemorydescriptor/1442032-withaddress.md)
- [withAddressRange](kernel/iomemorydescriptor/1812885-withaddressrange.md)
- [withAddressRange](kernel/iomemorydescriptor/1441897-withaddressrange.md)
- [withAddressRanges](kernel/iomemorydescriptor/1812892-withaddressranges.md)
- [withAddressRanges](kernel/iomemorydescriptor/1441794-withaddressranges.md)
- [withPersistentMemoryDescriptor](kernel/iomemorydescriptor/1812901-withpersistentmemorydescriptor.md)
- [withPersistentMemoryDescriptor](kernel/iomemorydescriptor/1441983-withpersistentmemorydescriptor.md)
- [withPhysicalAddress](kernel/iomemorydescriptor/1812908-withphysicaladdress.md)
- [withPhysicalAddress](kernel/iomemorydescriptor/1441877-withphysicaladdress.md)
- [free](driverkit/iomemorydescriptor/free.md)

### Configuring the Descriptor

- [setOwnership](kernel/iomemorydescriptor/3142952-setownership.md)
- [setPurgeable](kernel/iomemorydescriptor/1812865-setpurgeable.md)
- [setPurgeable](kernel/iomemorydescriptor/1442065-setpurgeable.md)

### Preparing the Buffer

- [prepare](kernel/iomemorydescriptor/1812845-prepare.md)
- [prepare](kernel/iomemorydescriptor/1442024-prepare.md)
- [complete](kernel/iomemorydescriptor/1812740-complete.md)
- [complete](kernel/iomemorydescriptor/1442043-complete.md)
- [getPreparationID](kernel/iomemorydescriptor/1441964-getpreparationid.md)
- [setPreparationID](kernel/iomemorydescriptor/1442011-setpreparationid.md)

### Reading and Writing Buffer Data

- [readBytes](kernel/iomemorydescriptor/1812854-readbytes.md)
- [readBytes](kernel/iomemorydescriptor/1441823-readbytes.md)
- [writeBytes](kernel/iomemorydescriptor/1812910-writebytes.md)
- [writeBytes](kernel/iomemorydescriptor/1442038-writebytes.md)

### Mapping to the Other Address Spaces

- [createMappingInTask](kernel/iomemorydescriptor/1812752-createmappingintask.md)
- [createMappingInTask](kernel/iomemorydescriptor/1441859-createmappingintask.md)
- [map](kernel/iomemorydescriptor/1812830-map.md)
- [map](kernel/iomemorydescriptor/1441908-map.md)
- [setMapping](kernel/iomemorydescriptor/1812859-setmapping.md)
- [setMapping](kernel/iomemorydescriptor/1441948-setmapping.md)

### Getting the Memory Pages

- [getPageCounts](kernel/iomemorydescriptor/1812787-getpagecounts.md)
- [getPageCounts](kernel/iomemorydescriptor/1441992-getpagecounts.md)
- [getPhysicalAddress](kernel/iomemorydescriptor/1812795-getphysicaladdress.md)
- [getPhysicalAddress](kernel/iomemorydescriptor/1441916-getphysicaladdress.md)
- [getPhysicalSegment](kernel/iomemorydescriptor/1812807-getphysicalsegment.md)
- [getPhysicalSegment](kernel/iomemorydescriptor/1442068-getphysicalsegment.md)

### Getting the Descriptor Information

- [getDirection](kernel/iomemorydescriptor/1812765-getdirection.md)
- [getDirection](kernel/iomemorydescriptor/1441925-getdirection.md)
- [getLength](kernel/iomemorydescriptor/1812776-getlength.md)
- [getLength](kernel/iomemorydescriptor/1442036-getlength.md)
- [GetLength](driverkit/iomemorydescriptor/getlength.md)
- [getDMAMapLength](kernel/iomemorydescriptor/3553361-getdmamaplength.md)
- [getFlags](kernel/iomemorydescriptor/2870265-getflags.md)
- [getMetaClass](kernel/iomemorydescriptor/1442096-getmetaclass.md)

### Accessing the Buffer's Tag

- [getTag](kernel/iomemorydescriptor/1812815-gettag.md)
- [getTag](kernel/iomemorydescriptor/1442070-gettag.md)
- [setTag](kernel/iomemorydescriptor/1812873-settag.md)
- [setTag](kernel/iomemorydescriptor/1441787-settag.md)
- [getVMTag](kernel/iomemorydescriptor/3131493-getvmtag.md)
- [setVMTags](kernel/iomemorydescriptor/3131494-setvmtags.md)

### Operating on the Memory

- [performOperation](kernel/iomemorydescriptor/1812840-performoperation.md)
- [performOperation](kernel/iomemorydescriptor/1441761-performoperation.md)
- [dmaCommandOperation](kernel/iomemorydescriptor/1442040-dmacommandoperation.md)

### Managing Internal Structures

- [reserved](kernel/iomemorydescriptor/reserved.md)
- [initialize](kernel/iomemorydescriptor/1441798-initialize.md)
- [Dispatch](kernel/iomemorydescriptor/3180641-dispatch.md)
- [CreateMapping_Invoke](kernel/iomemorydescriptor/3174976-createmapping_invoke.md)
- [populateDevicePager](kernel/iomemorydescriptor/1442017-populatedevicepager.md)
- [CreateMapping](kernel/iomemorydescriptor/3174974-createmapping.md)
- [CreateMapping_Impl](kernel/iomemorydescriptor/3174975-createmapping_impl.md)
- [Map](driverkit/iomemorydescriptor/map.md)
- [addMapping](kernel/iomemorydescriptor/1442013-addmapping.md)
- [removeMapping](kernel/iomemorydescriptor/1441778-removemapping.md)
- [makeMapping](kernel/iomemorydescriptor/1441923-makemapping.md)
- [doMap](kernel/iomemorydescriptor/1441941-domap.md)
- [doUnmap](kernel/iomemorydescriptor/1441883-dounmap.md)
- [handleFault](kernel/iomemorydescriptor/1441782-handlefault.md)
- [redirect](kernel/iomemorydescriptor/1441871-redirect.md)

### Instance Methods

- [getMapperOptions](kernel/iomemorydescriptor/3917633-getmapperoptions.md)
- [setMapperOptions](kernel/iomemorydescriptor/3917634-setmapperoptions.md)

### Type Methods

- [CreateSubMemoryDescriptor](driverkit/iomemorydescriptor/createsubmemorydescriptor.md)
- [CreateSubMemoryDescriptor_Impl](kernel/iomemorydescriptor/3674612-createsubmemorydescriptor_impl.md)
- [CreateSubMemoryDescriptor_Invoke](kernel/iomemorydescriptor/3674613-createsubmemorydescriptor_invoke.md)
- [CreateWithMemoryDescriptors](kernel/iomemorydescriptor/3674614-createwithmemorydescriptors.md)
- [CreateWithMemoryDescriptors_Impl](kernel/iomemorydescriptor/3674615-createwithmemorydescriptors_impl.md)
- [CreateWithMemoryDescriptors_Invoke](kernel/iomemorydescriptor/3674616-createwithmemorydescriptors_invo.md)

## Relationships

### Inherits From

- [OSObject](kernel/osobject.md)

## See Also

### Descriptors

- [IOBufferMemoryDescriptor](kernel/iobuffermemorydescriptor.md)
- [IODeviceMemory](kernel/iodevicememory.md)
- [IOGeneralMemoryDescriptor](kernel/iogeneralmemorydescriptor.md)
- [IOInterleavedMemoryDescriptor](kernel/iointerleavedmemorydescriptor.md)
- [IOMultiMemoryDescriptor](kernel/iomultimemorydescriptor.md)
- [IOSubMemoryDescriptor](kernel/iosubmemorydescriptor.md)
