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 堆栈位置中的 Parameters.DeviceIoControl.OutputBufferLength 成员 (IO_STACK_LOCATION) 指示输出缓冲区的大小(以字节为单位)。
状态块
“ 信息” 字段设置为返回的字节数。 如果请求成功,“ 状态” 字段设置为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 类驱动程序将返回此状态代码:
- 调用方在除 PASSIVE_LEVEL 之外的 IRQL 级别发出请求。
- 调用方发送了 RequestType = ExclusiveAccessUnlockDevice 的请求,以解锁不处于独占模式的设备。
STATUS_INVALID_DEVICE_STATE (Windows 错误代码:ERROR_BAD_COMMAND)
当文件系统驱动程序装载到此设备上时,调用方尝试锁定设备,但未指定类驱动程序应挂起已装载的文件系统驱动程序的检查。 若要挂起已装载文件系统驱动程序的检查,调用方必须将 CDROM_EXCLUSIVE_ACCESS 的 Flags 成员设置为 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 结尾的字符串:字母数字 (A - Z、a - z、0 - 9) 、空格、句点、逗号、冒号 (:) 、分号 (;) 、连字符 (-) 和下划线 (_) 。 字符串的长度必须小于 CDROM_EXCLUSIVE_CALLER_LENGTH 个字节,包括字符串末尾的 NULL 。
要求
要求 | 值 |
---|---|
Header | ntddcdrm.h (包括 Ntddcdrm.h) |