---
title: IOPCIDevice
framework: pcidriverkit
role: symbol
role_heading: Class
path: pcidriverkit/iopcidevice
---

# IOPCIDevice

A DriverKit provider object that manages access to your custom PCI hardware.

## Declaration

```occ
class IOPCIDevice;
```

## Overview

Overview Use an IOPCIDevice object to enable or manage the custom features of your PCI hardware. You don’t create instances of this class directly. Instead, the system creates an IOPCIDevice object and passes it to the IOService subclass of your custom driver. Use the methods of this object to read and write your hardware’s configuration settings. You can also use it to read and write any custom data in your device’s memory-mapped I/O. note: The endpoint driver is responsible for enabling the Memory Space Enable and Bus Master Enable settings each time it configures the PCI device. When a crash occurs, or when the system unloads your driver, the system disables these features.

## Topics

### Running the Service

- [init](pcidriverkit/iopcidevice/init.md)
- [Open](pcidriverkit/iopcidevice/open.md)
- [Close](pcidriverkit/iopcidevice/close.md)
- [free](pcidriverkit/iopcidevice/free.md)

### Reading and Writing Configuration Data

- [ConfigurationRead8](pcidriverkit/iopcidevice/configurationread8.md)
- [ConfigurationRead16](pcidriverkit/iopcidevice/configurationread16.md)
- [ConfigurationRead32](pcidriverkit/iopcidevice/configurationread32.md)
- [ConfigurationWrite8](pcidriverkit/iopcidevice/configurationwrite8.md)
- [ConfigurationWrite16](pcidriverkit/iopcidevice/configurationwrite16.md)
- [ConfigurationWrite32](pcidriverkit/iopcidevice/configurationwrite32.md)
- [Configuration Data Offsets](pcidriverkit/configuration-data-offsets-enum.md)
- [Bridge Header Offsets](pcidriverkit/bridge-header-offsets-enum.md)
- [Command Register Bits](pcidriverkit/command-register-bits-enum.md)
- [Status Register Bits](pcidriverkit/status-register-bits-enum.md)

### Reading and Writing Memory Locations

- [MemoryRead8](pcidriverkit/iopcidevice/memoryread8-1edw0.md)
- [MemoryRead8](pcidriverkit/iopcidevice/memoryread8-7b2zp.md)
- [MemoryRead16](pcidriverkit/iopcidevice/memoryread16-9qkdh.md)
- [MemoryRead16](pcidriverkit/iopcidevice/memoryread16-50bq8.md)
- [MemoryRead32](pcidriverkit/iopcidevice/memoryread32-60hg9.md)
- [MemoryRead32](pcidriverkit/iopcidevice/memoryread32-84jap.md)
- [MemoryRead64](pcidriverkit/iopcidevice/memoryread64-9ntrf.md)
- [MemoryRead64](pcidriverkit/iopcidevice/memoryread64-37uob.md)
- [MemoryWrite8](pcidriverkit/iopcidevice/memorywrite8-1uey6.md)
- [MemoryWrite8](pcidriverkit/iopcidevice/memorywrite8-fzh6.md)
- [MemoryWrite16](pcidriverkit/iopcidevice/memorywrite16-8k6ch.md)
- [MemoryWrite16](pcidriverkit/iopcidevice/memorywrite16-534yk.md)
- [MemoryWrite32](pcidriverkit/iopcidevice/memorywrite32-4pmh.md)
- [MemoryWrite32](pcidriverkit/iopcidevice/memorywrite32-ow7r.md)
- [MemoryWrite64](pcidriverkit/iopcidevice/memorywrite64-8qyob.md)
- [MemoryWrite64](pcidriverkit/iopcidevice/memorywrite64-nvpu.md)

### Getting Device Information

- [FindPCICapability](pcidriverkit/iopcidevice/findpcicapability.md)
- [GetBusDeviceFunction](pcidriverkit/iopcidevice/getbusdevicefunction.md)
- [PCI Capabilities](pcidriverkit/pci-capabilities-enum.md)
- [Slot Capabilities](pcidriverkit/slot-capabilities-enum.md)

### Managing Interrupts

- [Interrupt Types](kernel/1640325-interrupt_types.md)

### Managing Power

- [HasPCIPowerManagement](pcidriverkit/iopcidevice/haspcipowermanagement.md)
- [EnablePCIPowerManagement](pcidriverkit/iopcidevice/enablepcipowermanagement.md)
- [Power Management Capabilities](pcidriverkit/power-management-capabilities-enum.md)
- [Power Management Control/Status Register](pcidriverkit/power-management-control-status-register-enum.md)

### Getting Error Codes

- [Correctable Error Bits](pcidriverkit/correctable-error-bits-enum.md)
- [Uncorrectable Error Bits](pcidriverkit/uncorrectable-error-bits-enum.md)

### Instance Methods

- [ClientCrashed](pcidriverkit/iopcidevice/clientcrashed.md)
- [ConfigureInterrupts](pcidriverkit/iopcidevice/configureinterrupts.md)
- [GetBARInfo](pcidriverkit/iopcidevice/getbarinfo.md)
- [GetLinkSpeed](pcidriverkit/iopcidevice/getlinkspeed.md)
- [Reset](pcidriverkit/iopcidevice/reset.md)
- [RestoreDeviceState](pcidriverkit/iopcidevice/restoredevicestate.md)
- [SaveDeviceState](pcidriverkit/iopcidevice/savedevicestate.md)
- [SetASPMState](pcidriverkit/iopcidevice/setaspmstate.md)
- [SetLinkSpeed](pcidriverkit/iopcidevice/setlinkspeed.md)
- [SetProperties](pcidriverkit/iopcidevice/setproperties.md)

## Relationships

### Inherits From

- [IOService](driverkit/ioservice.md)

## See Also

### Device Interface

- [Creating Custom PCIe Drivers for Thunderbolt Devices](pcidriverkit/creating-custom-pcie-drivers-for-thunderbolt-devices.md)
