IDiscRecorder2Ex::SendCommandSendDataToDevice 方法 (imapi2.h)

将 MMC 命令及其关联的数据缓冲区发送到记录设备。

语法

HRESULT SendCommandSendDataToDevice(
  [in]  BYTE                 *Cdb,
  [in]  ULONG                CdbSize,
  [out] BYTE [18]            SenseBuffer,
  [in]  ULONG                Timeout,
  [in]  BYTE                 *Buffer,
  [in]  ULONG_IMAPI2_NONZERO BufferSize
);

参数

[in] Cdb

要发送到设备的命令数据包。

[in] CdbSize

要发送的命令数据包的大小(以字节为单位)。 必须介于 6 到 16 个字节之间。

[out] SenseBuffer

检测记录设备返回的数据。

[in] Timeout

允许发送命令接收结果的时间限制(以秒为单位)。

[in] Buffer

包含与 send 命令关联的数据的缓冲区。 不得为 NULL

[in] BufferSize

要发送的数据缓冲区的大小(以字节为单位)。 不得为零。

返回值

S_OK或以下值之一可以在成功时返回,但其他成功代码可能会作为实现的结果返回:

返回代码 说明
S_IMAPI_COMMAND_HAS_SENSE_DATA
设备使命令失败,但返回感知数据。

值:0x00AA0200

 

以下错误代码通常在操作失败时返回,但不表示唯一可能的错误值:

返回代码 说明
E_POINTER
指针无效。

值:0x80004003

E_FAIL
未知故障。

值:0x80004005

E_IMAPI_RECORDER_GET_CONFIGURATION_NOT_SUPPORTED
驱动器不支持 GET CONFIGURATION 命令。

值:0xC0AA020C

E_IMAPI_RECORDER_NO_SUCH_FEATURE
设备不支持请求的功能页。

值:0xC0AA020A

E_OUTOFMEMORY
未能分配所需的内存。

值:0x8007000E

E_IMAPI_RECORDER_FEATURE_IS_NOT_CURRENT
支持请求的功能页,但未标记为当前。

值:0xC0AA020B

E_IMAPI_RECORDER_COMMAND_TIMEOUT
设备未能在超时期限内接受该命令。 这可能是由于设备进入了不一致状态,或者可能需要增加命令的超时值。

值:0xC0AA020D

E_IMAPI_RECORDER_INVALID_RESPONSE_FROM_DEVICE
设备报告了命令的意外或无效数据。

值:0xC0AA02FF

E_IMAPI_RECORDER_MEDIA_UPSIDE_DOWN
媒体是倒置插入的。

值:0xC0AA0204

E_IMAPI_RECORDER_MEDIA_BECOMING_READY
驱动器报告它正在准备就绪。 请稍后重试请求。

值:0xC0AA0205

E_IMAPI_RECORDER_MEDIA_NO_MEDIA
设备中没有媒体。

值:0xC0AA0202

E_IMAPI_RECORDER_MEDIA_FORMAT_IN_PROGRESS
媒体当前正在格式化。 请在尝试使用媒体之前等待格式完成。

值:0xC0AA0206

E_IMAPI_RECORDER_MEDIA_BUSY
驱动器报告它正在执行长时间运行的操作,例如完成写入。 驱动器可能长时间不可用。

值:0xC0AA0207

E_IMAPI_LOSS_OF_STREAMING
写入失败,因为驱动器接收数据的速度不够快,无法继续写入。 将源数据移动到本地计算机、降低写入速度或启用“缓冲区不足可用”设置可以解决此问题。

值:0xC0AA0300

E_IMAPI_RECORDER_MEDIA_INCOMPATIBLE
媒体不兼容或物理格式未知。

值:0xC0AA0203

E_IMAPI_RECORDER_DVD_STRUCTURE_NOT_PRESENT
DVD 结构不存在。 这可能是由于使用的驱动器/介质不兼容导致的。

值:0xC0AA020E

E_IMAPI_RECORDER_NO_SUCH_MODE_PAGE
设备报告请求的模式页 (,并且不存在类型) 。

值:0xC0AA0201

E_IMAPI_RECORDER_INVALID_MODE_PARAMETERS
驱动器报告不支持 MODE SELECT 命令的模式页中提供的参数组合。

值:0xC0AA0208

E_IMAPI_RECORDER_MEDIA_WRITE_PROTECTED
驱动器报告介质受到写入保护。

值:0xC0AA0209

E_IMAPI_RECORDER_MEDIA_SPEED_MISMATCH
媒体的速度与设备不兼容。 这可能是由于使用高于或低于设备支持的速度范围的媒体造成的。

值:0xC0AA020F

HRESULT_FROM_WIN32 (ERROR_INVALID_HANDLE)
指定的句柄无效。

值:6

HRESULT_FROM_WIN32 (ERROR_DEV_NOT_EXIST)
指定的网络资源或设备不再可用。

值:55

E_IMAPI_RECORDER_LOCKED
上次操作期间与此记录器关联的设备已被独占锁定,导致此操作失败。

值:0xC0AA0210

注解

有关命令数据包、感知数据和输入数据缓冲区的内容的详细信息,请参阅 ftp://ftp.t10.org/t10/drafts/mmc5 中最新修订的 MMC 规范。

客户端定义的命令 (用于此方法的 CDB) 长度必须介于 6 到 16 个字节之间。 此外,每个命令的大小必须与下表中定义的操作代码定义的大小匹配。

CDB 操作代码范围 CDB 组 所需的 CDB 大小
0x00 — 0x1F 0 6 字节
0x20 — 0x3F 1 10 字节
0x40 — 0x5F 2 10 字节
0x60 — 0x7F 3 将来将对此操作代码范围强制实施标准指定的大小要求。
0x80 — 0x9F 4 16 个字节
0xA0 — 0xBF 5 12 字节
0xC0 — 0xDF 6 供应商唯一 - 允许的任何大小
0xE0 — 0xFF 7 供应商唯一 - 允许的任何大小
 

一些非常早期的设备使用供应商唯一的操作码,因此某些操作码无法以这种方式进行验证。 以下操作码仍然有效,仅验证大小是否介于 6 到 16 个字节之间:

0x02、0x05、0x06、0x09、0x0C、0x0D、0x0E、0x0F、0x10、0x13、0x14、0x19、0x20、0x21、0x22、0x23、0x24、0x26、0x27、0x29、0x2C、0x2D

要求

要求
最低受支持的客户端 Windows Vista、Windows XP 和 SP2 [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
目标平台 Windows
标头 imapi2.h

另请参阅

IDiscRecorder2Ex

IDiscRecorder2Ex::SendCommandGetDataFromDevice

IDiscRecorder2Ex::SendCommandNoData