Поделиться через


Функция GetTapePosition (winbase.h)

Функция GetTapePosition извлекает текущий адрес ленты в логических или абсолютных блоках.

Синтаксис

DWORD GetTapePosition(
  [in]  HANDLE  hDevice,
  [in]  DWORD   dwPositionType,
  [out] LPDWORD lpdwPartition,
  [out] LPDWORD lpdwOffsetLow,
  [out] LPDWORD lpdwOffsetHigh
);

Параметры

[in] hDevice

Дескриптор на устройство, на котором нужно получить положение ленты. Этот дескриптор создается с помощью CreateFile.

[in] dwPositionType

Тип получаемого адреса. Этот параметр может принимать одно из указанных ниже значений.

Значение Значение
TAPE_ABSOLUTE_POSITION
0L
Параметры lpdwOffsetLow и lpdwOffsetHigh получают адрес блока устройства. Параметр dwPartition получает ноль.
TAPE_LOGICAL_POSITION
1L
Параметры lpdwOffsetLow и lpdwOffsetHigh получают адрес логического блока. Параметр dwPartition получает раздел логической ленты.

[out] lpdwPartition

Указатель на переменную, которая получает номер текущей секции ленты. Секции нумеруются логически от 1 до n, где 1 — это первая секция на ленте, а n — последняя. При получении адреса блока для конкретного устройства или если устройство поддерживает только одну секцию, этот параметр получает ноль.

[out] lpdwOffsetLow

Указатель на переменную, получающую биты нижнего порядка текущей позиции ленты.

[out] lpdwOffsetHigh

Указатель на переменную, которая получает биты высокого порядка текущей позиции ленты. Этот параметр может иметь значение NULL , если биты высокого порядка не требуются.

Возвращаемое значение

Если функция выполнена успешно, возвращаемое значение будет NO_ERROR.

Если функция завершается сбоем, она может вернуть один из следующих кодов ошибок.

Код ошибки Описание
ERROR_BEGINNING_OF_MEDIA
1102L
Попытка получить доступ к данным до начала среднего маркера завершилась сбоем.
ERROR_BUS_RESET
1111L
В шине обнаружено условие сброса.
ERROR_DEVICE_NOT_PARTITIONED
1107L
Не удалось найти сведения о секции при загрузке ленты.
ERROR_END_OF_MEDIA
1100L
Маркер окончания ленты был достигнут во время операции.
ERROR_FILEMARK_DETECTED
1101L
Метка файла была достигнута во время операции.
ERROR_INVALID_BLOCK_LENGTH
1106L
Неправильный размер блока на новой ленте в многотомном разделе.
ERROR_MEDIA_CHANGED
1110L
Лента, которая находилась в диске, была заменена или удалена.
ERROR_NO_DATA_DETECTED
1104L
Маркер конца данных был достигнут во время операции.
ERROR_NO_MEDIA_IN_DRIVE
1112L
В диске нет носителей.
ERROR_NOT_SUPPORTED
50L
Драйвер ленты не поддерживает запрошенную функцию.
ERROR_PARTITION_FAILURE
1105L
Не удалось секционировать ленту.
ERROR_SETMARK_DETECTED
1103L
Метка была достигнута во время операции.
ERROR_UNABLE_TO_LOCK_MEDIA
1108L
Не удалось заблокировать механизм выброса.
ERROR_UNABLE_TO_UNLOAD_MEDIA
1109L
Попытка выгрузить ленту завершилась сбоем.
ERROR_WRITE_PROTECT
19L
Носитель защищен от записи.

Комментарии

Адрес логического блока относительно секции. Первый адрес логического блока в каждой секции равен нулю.

Вызовите функцию GetTapeParameters , чтобы получить сведения о состоянии, возможностях и емкостях ленточных накопителей и носителей.

Требования

Требование Значение
Минимальная версия клиента Windows XP [только классические приложения]
Минимальная версия сервера Windows Server 2003 [только классические приложения]
Целевая платформа Windows
Header winbase.h (включая Windows.h)
Библиотека Kernel32.lib
DLL Kernel32.dll

См. также

CreateFile

GetTapeParameters

SetTapePosition