<!--
{
  "availability" : [
    "DriverKit: 22.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "SCSIPeripheralsDriverKit",
  "identifier" : "/documentation/SCSIPeripheralsDriverKit/IOUserSCSIPeripheralDeviceType05",
  "metadataVersion" : "0.1.0",
  "role" : "Class",
  "symbol" : {
    "kind" : "Class",
    "modules" : [
      "SCSIPeripheralsDriverKit"
    ],
    "preciseIdentifier" : "c:@S@IOUserSCSIPeripheralDeviceType05"
  },
  "title" : "IOUserSCSIPeripheralDeviceType05"
}
-->

# IOUserSCSIPeripheralDeviceType05

A DriverKit provider object that works with Type05 devices, those that use SCSI Multimedia Commands (SMC).

```
class IOUserSCSIPeripheralDeviceType05;
```

## Overview

Subclass this class to create a driver for multimedia devices, such as CD-ROM and DVD-ROM peripherals. In your subclass, override all pure virtual methods.

Use the functions in [SCSI commands](/documentation/SCSIPeripheralsDriverKit/scsi-commands) to populate Command Descriptor Blocks (CDBs) that you send to the device with [`UserSendCDB`](/documentation/SCSIPeripheralsDriverKit/IOUserSCSIPeripheralDeviceType05/UserSendCDB).

## Topics

### Managing the device

[`virtual kern_return_t UserInitializeDeviceSupport(bool *result);`](/documentation/SCSIPeripheralsDriverKit/IOUserSCSIPeripheralDeviceType05/UserInitializeDeviceSupport)

Performs enumeration-time initializations in response to a call from the framework.

[`virtual kern_return_t UserResetDevice(SCSIServiceResponse *response);`](/documentation/SCSIPeripheralsDriverKit/IOUserSCSIPeripheralDeviceType05/UserResetDevice)

Performs a bus reset of the external drive.

### Sending commands to the device

[`virtual kern_return_t UserSendCDB(SCSIType05OutParameters command, SCSIType05InParameters *response);`](/documentation/SCSIPeripheralsDriverKit/IOUserSCSIPeripheralDeviceType05/UserSendCDB)

Sends a vendor-specific Command Descriptor Block (CDB) to the device.

[`struct SCSIType05OutParameters;`](/documentation/SCSIPeripheralsDriverKit/SCSIType05OutParameters)

Parameters for commands to send to the external SCSI device.

[`typedef enum SCSIType05OutVersion : unsigned int { ... } SCSIType05OutVersion;`](/documentation/SCSIPeripheralsDriverKit/SCSIType05OutVersion)

Constants that represent versions of the Type05 outbound interface.

[`struct SCSIType05InParameters;`](/documentation/SCSIPeripheralsDriverKit/SCSIType05InParameters)

Parameters for responses from the external SCSI device.

[`typedef enum SCSIType05InVersion : unsigned int { ... } SCSIType05InVersion;`](/documentation/SCSIPeripheralsDriverKit/SCSIType05InVersion)

Constants that represent versions of the Type05 inbound interface.

### Suspending and resuming services

[`virtual kern_return_t UserSuspendServices();`](/documentation/SCSIPeripheralsDriverKit/IOUserSCSIPeripheralDeviceType05/UserSuspendServices)

Suspends services and allows the dext to communicate with the external drive.

[`virtual kern_return_t UserResumeServices();`](/documentation/SCSIPeripheralsDriverKit/IOUserSCSIPeripheralDeviceType05/UserResumeServices)

Resumes normal services after a suspension.

### Providing device metadata

[`virtual kern_return_t UserReportMediumBlockSize(UInt64 *blockSize);`](/documentation/SCSIPeripheralsDriverKit/IOUserSCSIPeripheralDeviceType05/UserReportMediumBlockSize)

Provides a report on the external device’s block size.

## Relationships

### Inherits From

[`IOService`](/documentation/DriverKit/IOService)

---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)