SetTapePosition

機能
指定したデバイスでテープの位置を設定する
Declare Function SetTapePosition Lib "kernel32.dll"  _
(ByVal hDevice As Long, ByVal dwPositionMethod As Long, _
ByVal dwPartition As Long, ByVal dwOffsetLow As Long, _
ByVal dwOffsetHigh As Long, ByVal bimmediate As Long) As Long
Declare Function SetTapePosition Lib "kernel32.dll"  _
(ByVal hDevice As Integer, ByVal dwPositionMethod As Integer, _
ByVal dwPartition As Integer, ByVal dwOffsetLow As Integer, _
ByVal dwOffsetHigh As Integer, ByVal bimmediate As Integer) As Integer

DWORD SetTapePosition(
HANDLE hDevice,
DWORD dwPositionMethod,
DWORD dwPartition,
DWORD dwOffsetLow,
DWORD dwOffsetHigh,
BOOL bImmediate
);
引数
hDevice

テープデバイスのハンドル(CreateFile()関数の戻り値)
dwPositionMethod
実行する位置設定のタイプを指定する定数の一つ
dwPartition
テープの位置を設定するパーティション
0のとき現在のパーティション
ブロックアドレス、またはdwPositionMethodで指定された位置設定操作カウントの上位32ビット
dwOffsetHigh
同、下位32ビット
下位32ビットが不要な場合0
bimmediate
0のとき   操作が終了するまで関数は帰らない
1のとき   操作が終了する前に帰る
戻り値
正常終了のとき                     NO_ERROR(=0)
エラーのとき                       エラーを示す定数
備考
パーティションには、論理的に1からnまで番号が付けられている。
1はテープの先頭にあるパーティションを、nは最後のパーティションを示す。

dwOffsetHighで指定されたオフセットは、移動するブロック、ファイルマーク
またはセットマークの数を示す。
現在状況や性能を調べるにはGetTapeParameters()関数を使う。
dwPositionMethodの定数
Const TAPE_ABSOLUTE_BLOCK                          'dwOffsetLowとdwOffsetHighのブロックアドレスまで
                                                    'テープを移動させる
                                                    'dwPartitionは無視される
Const TAPE_LOGICAL_BLOCK                           'dwPartitionが示すパーティションで
                                                    'dwOffsetLowとdwOffsetHighのブロックアドレスまで
                                                    'テープを移動させる
Const TAPE_REWIND                                  '現在のパーティションの先頭までテープを移動させる
                                                    'dwPartition,,dwOffsetHighは無視
Const TAPE_SPACE_END_OF_DATA                       'dwPartitionが示すパーティションのデータの終端まで
                                                    'テープを移動させる
Const TAPE_SPACE_FILEMARKS                         '現在のパーティションでとdwOffsetHighが
                                                    '示すファイルマーク数だけテープを移動する
                                                    'dwPartitionは無視される
Const TAPE_SPACE_RELATIVE_BLOCKS                   '同、ブロック数
Const TAPE_SPACE_SEQUENTIAL_FMKS                   '現在のパーティションでn個のファイルマークのうち
                                                    '最初に発見したマークまでテープを移動する。
                                                    'nはとdwOffsetHighによって決まる
                                                    'dwPartitionは無視される
Const TAPE_SPACE_SEQUENTIAL_SMKS                   '同、セットマーク
Const TAPE_SPACE_SETMARKS                          '現在のパーティションでとdwOffsetHighの示す
                                                    'セットマーク数だけテープを移動する
                                                    'dwPartitionは無視される
エラーコードを示す定数

Const ERROR_BEGINNING_OF_MEDIA = 1102&              '「メディアの先頭」マーカーより前にあるデータに
                                                     'アクセスしようとした
Const ERROR_BUS_RESET = 1111&                       'バスがリセット状態になっている
Const ERROR_END_OF_MEDIA = 1100&                    '操作中に「テープの終端」マーカーに到達した
Const ERROR_FILEMARK_DETECTED = 1101&               '操作中にファイルマークに到達した
Const ERROR_SETMARK_DETECTED = 1103&                '操作中にセットマークに到達した
Const ERROR_NO_DATA_DETECTED = 1104&                '操作中に「データの終端」マーカーに到達した
Const ERROR_PARTITION_FAILURE = 1105&               'テープ内にパーティションを作成できなかった
Const ERROR_INVALID_BLOCK_LENGTH = 1106&            'マルチボリュームパーティションの新しいテープの
                                                     'ブロックサイズが間違っている
Const ERROR_DEVICE_NOT_PARTITIONED = 1107&          'テープ内にパーティションが見つからなかった
Const ERROR_MEDIA_CHANGED = 1110&                   'ドライブ内のテープが取り替えられた or 取り出された
Const ERROR_NO_MEDIA_IN_DRIVE = 1112&               'メディアがセットされていない
Const ERROR_NOT_SUPPORTED = 50&                     '関数がサポートされていない
Const ERROR_UNABLE_TO_LOCK_MEDIA = 1108&            'テープをロックできなかった
Const ERROR_UNABLE_TO_UNLOAD_MEDIA = 1109&          'テープのアンロードに失敗した
Const ERROR_WRITE_PROTECT = 19&                     'メディアが書込み禁止状態