IOCTL_CDROM_EXCLUSIVE_ACCESS IOCTL (ntddcdrm.h)
IOCTL_CDROM_EXCLUSIVE_ACCESS请求指示 CD-ROM 类驱动程序:
- 报告 CD-ROM 设备的访问状态。
- 锁定 CD-ROM 设备进行独占访问。
- 解锁 CD-ROM 设备进行独占访问。
主要代码
输入缓冲区
根据调用方请求的作,调用方必须提供以下结构之一作为输入 Irp->AssociatedIrp.SystemBuffer:
-
CDROM_EXCLUSIVE_ACCESS(报告 CD-ROM 设备的访问状态)
-
CDROM_EXCLUSIVE_LOCK(锁定 CD-ROM 设备进行独占访问)
-
CDROM_EXCLUSIVE_ACCESS(解锁应用程序锁定以独占访问的 CD-ROM 设备)
输入缓冲区长度
IO_STACK_LOCATION 结构中的 Parameters.DeviceIoControl.InputBufferLength 成员指示用户分配的输入缓冲区的大小(以字节为单位)。
输出缓冲区
如果调用方请求 CD-ROM 设备的独占访问状态(RequestType = ExclusiveAccessQueryState),则 CD-ROM 类驱动程序在 Irp->AssociatedIrp.SystemBuffer 的缓冲区中返回 CDROM_EXCLUSIVE_LOCK_STATE类型结构,LockState 成员指示设备的访问状态。
输出缓冲区长度
I/O 堆栈位置 (IO_STACK_LOCATION) 中的 Parameters.DeviceIoControl.OutputBufferLength 成员指示输出缓冲区的大小(以字节为单位)。
状态块
信息 字段设置为返回的字节数。 如果请求成功,则 状态 字段设置为STATUS_SUCCESS。
如果请求失败,状态 字段可能设置为以下错误消息之一:
STATUS_ACCESS_DENIED (Windows 错误代码:ERROR_ACCESS_DENIED)
设备已被锁定,以便进行独占访问。
STATUS_BUFFER_TOO_SMALL(Windows 错误代码:ERROR_INSUFFICIENT_BUFFER)
对于 ExclusiveAccessQueryState 请求,输出缓冲区太小。
STATUS_INFO_LENGTH_MISMATCH(Windows 错误代码:ERROR_BAD_LENGTH)
输入缓冲区太小。
STATUS_INVALID_DEVICE_REQUEST (Windows 错误代码:ERROR_INVALID_FUNCTION)
当发生以下两个错误之一时,CD-ROM 类驱动程序将返回此状态代码:
- 调用方在 IRQL 级别发出请求,而不是PASSIVE_LEVEL。
- 调用方使用 RequestType = ExclusiveAccessUnlockDevice 发送了请求,以解锁非独占模式的设备。
STATUS_INVALID_DEVICE_STATE(Windows 错误代码:ERROR_BAD_COMMAND)
调用方尝试在此设备上装载文件系统驱动程序时锁定设备,但未指定类驱动程序应暂停对装载的文件系统驱动程序的检查。 若要暂停已装载文件系统驱动程序的检查,调用方必须将 标志CDROM_EXCLUSIVE_ACCESS 的成员设置为 1。
STATUS_INVALID_HANDLE (Windows 错误代码:ERROR_INVALID_HANDLE)
当发生以下两个错误之一时,CD-ROM 类驱动程序将返回此状态代码:
- 跟踪请求所需的文件对象不可用。 CD-ROM 类驱动程序未收到从此调用方创建文件对象的请求。
- 调用方发送了请求,RequestType = ExclusiveAccessUnlockDevice 解锁设备,即使调用方对设备没有独占访问权限。
STATUS_INVALID_PARAMETER (Windows 错误代码:ERROR_INVALID_PARAMETER)
当发生以下两个错误之一时,CD-ROM 类驱动程序将返回此状态代码:
- 指定的 RequestType 不是 EXCLUSIVE_ACCESS_REQUEST_TYPE的有效成员。
- CDROM_EXCLUSIVE_LOCK 的 CallerName 成员中的调用方名称字符串违反了命名约定。 CallerName 必须是包含以下字符的 NULL-terminated 字符串:字母数字(A - Z、a - z、0 - 9)、空格、句点、逗号、冒号(:)、分号(;)、连字符(-)和下划线(_)。 字符串的长度必须小于CDROM_EXCLUSIVE_CALLER_LENGTH字节,包括字符串末尾的 NULL。
要求
要求 | 价值 |
---|---|
标头 | ntddcdrm.h (包括 Ntddcdrm.h) |