处理磁带设备控制请求
所有磁带微型类驱动程序必须使用 TAPE_STATUS 枚举器中列出的值报告状态。 但是,当磁带类驱动程序完成 I/O 控制请求时,它将使用等效的 NT 状态值报告状态。 下表提供了TAPE_STATUS值与其等效 NT 状态值之间的映射:
NT 状态值 | 磁带状态值 |
---|---|
STATUS_INSUFFICIENT_RESOURCES |
TAPE_STATUS_INSUFFICIENT_RESOURCES |
STATUS_NOT_IMPLEMENTED |
TAPE_STATUS_NOT_IMPLEMENTED |
STATUS_INVALID_DEVICE_REQUEST |
TAPE_STATUS_INVALID_DEVICE_REQUEST |
STATUS_INVALID_PARAMETER |
TAPE_STATUS_INVALID_PARAMETER |
STATUS_VERIFY_REQUIRED |
TAPE_STATUS_MEDIA_CHANGED |
STATUS_BUS_RESET |
TAPE_STATUS_BUS_RESET |
STATUS_SETMARK_DETECTED |
TAPE_STATUS_SETMARK_DETECTED |
STATUS_FILEMARK_DETECTED |
TAPE_STATUS_FILEMARK_DETECTED |
STATUS_BEGINNING_OF_MEDIA |
TAPE_STATUS_BEGINNING_OF_MEDIA |
STATUS_END_OF_MEDIA |
TAPE_STATUS_END_OF_MEDIA |
STATUS_BUFFER_OVERFLOW |
TAPE_STATUS_BUFFER_OVERFLOW |
STATUS_NO_DATA_DETECTED |
TAPE_STATUS_NO_DATA_DETECTED |
STATUS_EOM_OVERFLOW |
TAPE_STATUS_EOM_OVERFLOW |
STATUS_NO_MEDIA |
TAPE_STATUS_NO_MEDIA |
STATUS_IO_DEVICE_ERROR |
TAPE_STATUS_IO_DEVICE_ERROR |
STATUS_UNRECOGNIZED_MEDIA |
TAPE_STATUS_UNRECOGNIZED_MEDIA |
STATUS_DEVICE_NOT_READY |
TAPE_STATUS_DEVICE_NOT_READY |
STATUS_MEDIA_WRITE_PROTECTED |
TAPE_STATUS_MEDIA_WRITE_PROTECTED |
STATUS_DEVICE_DATA_ERROR |
TAPE_STATUS_DEVICE_DATA_ERROR |
STATUS_NO_SUCH_DEVICE |
TAPE_STATUS_NO_SUCH_DEVICE |
STATUS_INVALID_BLOCK_LENGTH |
TAPE_STATUS_INVALID_BLOCK_LENGTH |
STATUS_IO_TIMEOUT |
TAPE_STATUS_IO_TIMEOUT |
STATUS_DEVICE_NOT_CONNECTED |
TAPE_STATUS_DEVICE_NOT_CONNECTED |
STATUS_DATA_OVERRUN |
TAPE_STATUS_DATA_OVERRUN |
STATUS_DEVICE_BUSY |
TAPE_STATUS_DEVICE_BUSY |
STATUS_DEVICE_REQUIRES_CLEANING |
TAPE_STATUS_REQUIRES_CLEANING |
STATUS_CLEANER_CARTRIDGE_INSTALLED |
TAPE_STATUS_CLEANER_CARTRIDGE_INSTALLED |
每当类驱动程序必须多次调用微类例程才能完成请求时,微类驱动程序都会使用返回状态来指示请求是否已完成或是否应再次调用该例程。 磁带类驱动程序维护对给定请求调用微类例程的次数的从零开始的计数,并将该计数作为 CallNumber 参数传递给例程。
微类例程返回以下状态值之一,指示类驱动程序应再次调用该例程:
TAPE_STATUS_SEND_SRB_AND_CALLBACK
此返回值指示磁带类驱动程序将 SRB 发送到设备。 磁带小类例程通常在填写磁带类驱动程序传递的 SRB 后返回此状态。 如果操作成功,类驱动程序将递增 CallNumber 并再次调用微类例程。 如果 SRB 失败,类驱动程序会根据 RetryFlags 的值再次调用微类例程。
TAPE_STATUS_CHECK_TEST_UNIT_READY
此返回值指示磁带类驱动程序为测试单元就绪命令创建 SRB,并将 SRB 发送到设备。
TAPE_STATUS_CALLBACK
此返回值指示磁带类驱动程序在不向设备发送 SRB 的情况下递增 CallNumber 。 这简化了支持多个设备的案例陈述。 例如,假设特定微类驱动程序支持的大多数磁带设备都需要三个 SRB 来处理特定请求。 但是,一个设备只需要第一个和第三个 SRB。 对于唯一设备,磁带微型类驱动程序可以返回TAPE_STATUS_CALLBACK跳过第二个 SRB,从而允许驱动程序使用相同的代码来处理它支持的所有设备的请求。
TAPE_STATUS_REQUIRES_CLEANING
如果磁带设备支持清理通知,而不是错误,磁带微型类驱动程序的 TapeMiniGetStatus 例程将返回此状态,以指示磁带类驱动程序需要清理驱动器。
当微类例程处理完请求(成功或重试后出现错误)时,它将返回磁带类驱动程序,其中包含指示请求成功或失败的 TAPE_STATUS_XXX 。
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈