Обработка запросов управления ленточным устройством

Все драйверы мини-класса ленты должны сообщать о состоянии, используя значения, перечисленные в перечислителье TAPE_STATUS . Однако когда драйвер класса ленты завершает запрос элемента управления вводом-выводом, он сообщает о состоянии с использованием эквивалентных значений состояния 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 драйвер класса снова вызывает подпрограмму miniclass в зависимости от значения RetryFlags.

  • TAPE_STATUS_CHECK_TEST_UNIT_READY

    Это возвращаемое значение указывает драйверу класса ленты создать SRB для команды готовности модуля тестирования и отправить SRB на устройство.

  • TAPE_STATUS_CALLBACK

    Это возвращаемое значение направляет драйвер класса ленты на увеличение CallNumber без отправки SRB на устройство. Это упрощает инструкции case, которые поддерживают несколько устройств. Например, предположим, что для большинства ленточных устройств, поддерживаемых определенным драйвером мини-класса, требуется три SRB для обработки определенного запроса. Однако для одного устройства требуется только первый и третий srb. Для уникального устройства драйвер ленточного мини-класса может возвращать TAPE_STATUS_CALLBACK пропускать второй SRB, что позволяет драйверу использовать тот же код для обработки запроса для всех поддерживаемых устройств.

  • TAPE_STATUS_REQUIRES_CLEANING

    Если ленточное устройство поддерживает уведомление о очистке в смысле данных, а не как ошибку, подпрограмма TapeMiniGetStatus драйвера ленточного мини-класса возвращает это состояние, чтобы указать драйверу класса ленты, что диск требует очистки.

Когда подпрограмма мини-класса завершает обработку запроса (успешно или с ошибкой после исчерпания повторных попыток), она возвращается в драйвер класса ленты с TAPE_STATUS_XXX, который указывает на успешность или сбой запроса.