Win32 API 日本語リファレンス
ホームSystem.SystemServices › TAPE_GET_DRIVE_PARAMETERS

TAPE_GET_DRIVE_PARAMETERS

構造体
サイズx64: 32 バイト / x86: 32 バイト

サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。

フィールド

フィールドサイズx64x86説明
ECCBOOLEAN1+0+0このメンバーが TRUE の場合、デバイスはハードウェアによるエラー訂正をサポートします。それ以外の場合はサポートしません。
CompressionBOOLEAN1+1+1このメンバーが TRUE の場合、ハードウェアによるデータ圧縮が有効です。それ以外の場合は無効です。
DataPaddingBOOLEAN1+2+2このメンバーが TRUE の場合、データパディングが有効です。それ以外の場合は無効です。データパディングは、テープを一定の速度で走行させ続けます。
ReportSetmarksBOOLEAN1+3+3このメンバーが TRUE の場合、セットマークの報告が有効です。それ以外の場合は無効です。
DefaultBlockSizeDWORD4+4+4デバイスの既定の固定ブロックサイズ (バイト単位)。
MaximumBlockSizeDWORD4+8+8デバイスの最大ブロックサイズ (バイト単位)。
MinimumBlockSizeDWORD4+12+12デバイスの最小ブロックサイズ (バイト単位)。
MaximumPartitionCountDWORD4+16+16デバイス上に作成できるパーティションの最大数。
FeaturesLowDWORD4+20+20

デバイスの機能フラグの下位ビットです。このメンバーには、次の値の 1 つ以上を指定できます。

意味
TAPE_DRIVE_COMPRESSION
0x00020000
このデバイスはハードウェアによるデータ圧縮をサポートします。
TAPE_DRIVE_CLEAN_REQUESTS
0x02000000
このデバイスはクリーニングが必要かどうかを報告できます。
TAPE_DRIVE_ECC
0x00010000
このデバイスはハードウェアによるエラー訂正をサポートします。
TAPE_DRIVE_EJECT_MEDIA
0x01000000
ソフトウェアによる取り出し要求に対して、このデバイスは物理的にテープを排出します。
TAPE_DRIVE_ERASE_BOP_ONLY
0x00000040
このデバイスは、パーティション先頭マーカーからのみ消去操作を実行します。
TAPE_DRIVE_ERASE_LONG
0x00000020
このデバイスはロング消去操作を実行します。
TAPE_DRIVE_ERASE_IMMEDIATE
0x00000080
このデバイスは即時消去操作を実行します。つまり、消去操作が開始された時点で制御を返します。
TAPE_DRIVE_ERASE_SHORT
0x00000010
このデバイスはショート消去操作を実行します。
TAPE_DRIVE_FIXED
0x00000001
このデバイスは固定データパーティションを作成します。
TAPE_DRIVE_FIXED_BLOCK
0x00000400
このデバイスは固定長ブロックモードをサポートします。
TAPE_DRIVE_GET_ABSOLUTE_BLK
0x00100000
このデバイスは現在のデバイス固有ブロックアドレスを提供します。
TAPE_DRIVE_GET_LOGICAL_BLK
0x00200000
このデバイスは現在の論理ブロックアドレス (および論理テープパーティション) を提供します。
TAPE_DRIVE_INITIATOR
0x00000004
このデバイスはイニシエーターが定義したパーティションを作成します。
TAPE_DRIVE_PADDING
0x00040000
このデバイスはデータパディングをサポートします。
TAPE_DRIVE_REPORT_SMKS
0x00080000
このデバイスはセットマークの報告をサポートします。
TAPE_DRIVE_SELECT
0x00000002
このデバイスは選択データパーティションを作成します。
TAPE_DRIVE_SET_CMP_BOP_ONLY
0x04000000
このデバイスは、圧縮を有効にする前にパーティションの先頭に位置している必要があります。
TAPE_DRIVE_SET_EOT_WZ_SIZE
0x00400000
このデバイスはメディア終端警告サイズの設定をサポートします。
TAPE_DRIVE_TAPE_CAPACITY
0x00000100
このデバイスはテープの最大容量を返します。
TAPE_DRIVE_TAPE_REMAINING
0x00000200
このデバイスはテープの残り容量を返します。
TAPE_DRIVE_VARIABLE_BLOCK
0x00000800
このデバイスは可変長ブロックモードをサポートします。
TAPE_DRIVE_WRITE_PROTECT
0x00001000
テープが書き込み可能または書き込み禁止の場合、このデバイスはエラーを返します。
FeaturesHighTAPE_GET_DRIVE_PARAMETERS_FEATURES_HIGH4+24+24

デバイスの機能フラグの上位ビットです。このメンバーには、次の値の 1 つ以上を指定できます。

意味
TAPE_DRIVE_ABS_BLK_IMMED
0x80002000
このデバイスはテープをデバイス固有のブロックアドレスへ移動し、移動が開始されるとすぐに制御を返します。
TAPE_DRIVE_ABSOLUTE_BLK
0x80001000
このデバイスはテープをデバイス固有のブロックアドレスへ移動します。
TAPE_DRIVE_END_OF_DATA
0x80010000
このデバイスはテープをパーティション内のデータ終端マーカーへ移動します。
TAPE_DRIVE_FILEMARKS
0x80040000
このデバイスはテープを、指定された数のファイルマーク分だけ前方 (または後方) へ移動します。
TAPE_DRIVE_LOAD_UNLOAD
0x80000001
このデバイスは、以降の操作に対するデバイスの有効化と無効化を行えます。
TAPE_DRIVE_LOAD_UNLD_IMMED
0x80000020
このデバイスは即時のロードおよびアンロード操作をサポートします。
TAPE_DRIVE_LOCK_UNLOCK
0x80000004
このデバイスはテープ排出機構の有効化と無効化を行えます。
TAPE_DRIVE_LOCK_UNLK_IMMED
0x80000080
このデバイスは即時のロックおよびロック解除操作をサポートします。
TAPE_DRIVE_LOG_BLK_IMMED
0x80008000
このデバイスはテープをパーティション内の論理ブロックアドレスへ移動し、移動が開始されるとすぐに制御を返します。
TAPE_DRIVE_LOGICAL_BLK
0x80004000
このデバイスはテープをパーティション内の論理ブロックアドレスへ移動します。
TAPE_DRIVE_RELATIVE_BLKS
0x80020000
このデバイスはテープを、指定された数のブロック分だけ前方 (または後方) へ移動します。
TAPE_DRIVE_REVERSE_POSITION
0x80400000
このデバイスはテープを、ブロック、ファイルマーク、またはセットマークをまたいで後方へ移動します。
TAPE_DRIVE_REWIND_IMMEDIATE
0x80000008
このデバイスは即時の巻き戻し操作をサポートします。
TAPE_DRIVE_SEQUENTIAL_FMKS
0x80080000
このデバイスはテープを、指定された数の連続したファイルマークが最初に現れる位置まで前方 (または後方) へ移動します。
TAPE_DRIVE_SEQUENTIAL_SMKS
0x80200000
このデバイスはテープを、指定された数の連続したセットマークが最初に現れる位置まで前方 (または後方) へ移動します。
TAPE_DRIVE_SET_BLOCK_SIZE
0x80000010
このデバイスは、固定長論理ブロックのサイズ設定、または可変長ブロックモードの設定をサポートします。
TAPE_DRIVE_SET_COMPRESSION
0x80000200
このデバイスはハードウェアによるデータ圧縮の有効化と無効化を行えます。
TAPE_DRIVE_SET_ECC
0x80000100
このデバイスはハードウェアによるエラー訂正の有効化と無効化を行えます。
TAPE_DRIVE_SET_PADDING
0x80000400
このデバイスはデータパディングの有効化と無効化を行えます。
TAPE_DRIVE_SET_REPORT_SMKS
0x80000800
このデバイスはセットマークの報告の有効化と無効化を行えます。
TAPE_DRIVE_SETMARKS
0x80100000
このデバイスはテープを、指定された数のセットマーク分だけ前方 (または後方) へ移動します。
TAPE_DRIVE_SPACE_IMMEDIATE
0x80800000
このデバイスは即時のスペーシング操作をサポートします。
TAPE_DRIVE_TENSION
0x80000002
このデバイスはテープのテンション調整をサポートします。
TAPE_DRIVE_TENSION_IMMED
0x80000040
このデバイスは即時のテープテンション調整をサポートします。
TAPE_DRIVE_WRITE_FILEMARKS
0x82000000
このデバイスはファイルマークを書き込みます。
TAPE_DRIVE_WRITE_LONG_FMKS
0x88000000
このデバイスはロングファイルマークを書き込みます。
TAPE_DRIVE_WRITE_MARK_IMMED
0x90000000
このデバイスはショートファイルマークおよびロングファイルマークの即時書き込みをサポートします。
TAPE_DRIVE_WRITE_SETMARKS
0x81000000
このデバイスはセットマークを書き込みます。
TAPE_DRIVE_WRITE_SHORT_FMKS
0x84000000
このデバイスはショートファイルマークを書き込みます。
EOTWarningZoneSizeDWORD4+28+28テープ終端警告位置からテープの物理的な終端までのバイト数を示します。

公式ドキュメント

TAPE_GET_DRIVE_PARAMETERS 構造体は、テープドライブについて記述します。この構造体は GetTapeParameters 関数で使用されます。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での定義

#include <windows.h>

// TAPE_GET_DRIVE_PARAMETERS  (x64 32 / x86 32 バイト)
typedef struct TAPE_GET_DRIVE_PARAMETERS {
    BOOLEAN ECC;
    BOOLEAN Compression;
    BOOLEAN DataPadding;
    BOOLEAN ReportSetmarks;
    DWORD DefaultBlockSize;
    DWORD MaximumBlockSize;
    DWORD MinimumBlockSize;
    DWORD MaximumPartitionCount;
    DWORD FeaturesLow;
    TAPE_GET_DRIVE_PARAMETERS_FEATURES_HIGH FeaturesHigh;
    DWORD EOTWarningZoneSize;
} TAPE_GET_DRIVE_PARAMETERS;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct TAPE_GET_DRIVE_PARAMETERS
{
    [MarshalAs(UnmanagedType.U1)] public bool ECC;
    [MarshalAs(UnmanagedType.U1)] public bool Compression;
    [MarshalAs(UnmanagedType.U1)] public bool DataPadding;
    [MarshalAs(UnmanagedType.U1)] public bool ReportSetmarks;
    public uint DefaultBlockSize;
    public uint MaximumBlockSize;
    public uint MinimumBlockSize;
    public uint MaximumPartitionCount;
    public uint FeaturesLow;
    public uint FeaturesHigh;
    public uint EOTWarningZoneSize;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure TAPE_GET_DRIVE_PARAMETERS
    <MarshalAs(UnmanagedType.U1)> Public ECC As Boolean
    <MarshalAs(UnmanagedType.U1)> Public Compression As Boolean
    <MarshalAs(UnmanagedType.U1)> Public DataPadding As Boolean
    <MarshalAs(UnmanagedType.U1)> Public ReportSetmarks As Boolean
    Public DefaultBlockSize As UInteger
    Public MaximumBlockSize As UInteger
    Public MinimumBlockSize As UInteger
    Public MaximumPartitionCount As UInteger
    Public FeaturesLow As UInteger
    Public FeaturesHigh As UInteger
    Public EOTWarningZoneSize As UInteger
End Structure
import ctypes
from ctypes import wintypes

class TAPE_GET_DRIVE_PARAMETERS(ctypes.Structure):
    _fields_ = [
        ("ECC", ctypes.c_byte),
        ("Compression", ctypes.c_byte),
        ("DataPadding", ctypes.c_byte),
        ("ReportSetmarks", ctypes.c_byte),
        ("DefaultBlockSize", wintypes.DWORD),
        ("MaximumBlockSize", wintypes.DWORD),
        ("MinimumBlockSize", wintypes.DWORD),
        ("MaximumPartitionCount", wintypes.DWORD),
        ("FeaturesLow", wintypes.DWORD),
        ("FeaturesHigh", wintypes.DWORD),
        ("EOTWarningZoneSize", wintypes.DWORD),
    ]
#[repr(C)]
pub struct TAPE_GET_DRIVE_PARAMETERS {
    pub ECC: u8,
    pub Compression: u8,
    pub DataPadding: u8,
    pub ReportSetmarks: u8,
    pub DefaultBlockSize: u32,
    pub MaximumBlockSize: u32,
    pub MinimumBlockSize: u32,
    pub MaximumPartitionCount: u32,
    pub FeaturesLow: u32,
    pub FeaturesHigh: u32,
    pub EOTWarningZoneSize: u32,
}
import "golang.org/x/sys/windows"

type TAPE_GET_DRIVE_PARAMETERS struct {
	ECC byte
	Compression byte
	DataPadding byte
	ReportSetmarks byte
	DefaultBlockSize uint32
	MaximumBlockSize uint32
	MinimumBlockSize uint32
	MaximumPartitionCount uint32
	FeaturesLow uint32
	FeaturesHigh uint32
	EOTWarningZoneSize uint32
}
type
  TAPE_GET_DRIVE_PARAMETERS = record
    ECC: ByteBool;
    Compression: ByteBool;
    DataPadding: ByteBool;
    ReportSetmarks: ByteBool;
    DefaultBlockSize: DWORD;
    MaximumBlockSize: DWORD;
    MinimumBlockSize: DWORD;
    MaximumPartitionCount: DWORD;
    FeaturesLow: DWORD;
    FeaturesHigh: DWORD;
    EOTWarningZoneSize: DWORD;
  end;
const TAPE_GET_DRIVE_PARAMETERS = extern struct {
    ECC: u8,
    Compression: u8,
    DataPadding: u8,
    ReportSetmarks: u8,
    DefaultBlockSize: u32,
    MaximumBlockSize: u32,
    MinimumBlockSize: u32,
    MaximumPartitionCount: u32,
    FeaturesLow: u32,
    FeaturesHigh: u32,
    EOTWarningZoneSize: u32,
};
type
  TAPE_GET_DRIVE_PARAMETERS {.bycopy.} = object
    ECC: uint8
    Compression: uint8
    DataPadding: uint8
    ReportSetmarks: uint8
    DefaultBlockSize: uint32
    MaximumBlockSize: uint32
    MinimumBlockSize: uint32
    MaximumPartitionCount: uint32
    FeaturesLow: uint32
    FeaturesHigh: uint32
    EOTWarningZoneSize: uint32
struct TAPE_GET_DRIVE_PARAMETERS
{
    ubyte ECC;
    ubyte Compression;
    ubyte DataPadding;
    ubyte ReportSetmarks;
    uint DefaultBlockSize;
    uint MaximumBlockSize;
    uint MinimumBlockSize;
    uint MaximumPartitionCount;
    uint FeaturesLow;
    uint FeaturesHigh;
    uint EOTWarningZoneSize;
}

HSP用 定義

HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; TAPE_GET_DRIVE_PARAMETERS サイズ: 32 バイト(x64)
dim st, 8    ; 4byte整数×8(構造体サイズ 32 / 4 切り上げ)
; ECC : BOOLEAN (+0, 1byte)  poke st,0,値  /  値 = peek(st,0)
; Compression : BOOLEAN (+1, 1byte)  poke st,1,値  /  値 = peek(st,1)
; DataPadding : BOOLEAN (+2, 1byte)  poke st,2,値  /  値 = peek(st,2)
; ReportSetmarks : BOOLEAN (+3, 1byte)  poke st,3,値  /  値 = peek(st,3)
; DefaultBlockSize : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; MaximumBlockSize : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; MinimumBlockSize : DWORD (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; MaximumPartitionCount : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; FeaturesLow : DWORD (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; FeaturesHigh : TAPE_GET_DRIVE_PARAMETERS_FEATURES_HIGH (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; EOTWarningZoneSize : DWORD (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global TAPE_GET_DRIVE_PARAMETERS
    #field bool1 ECC
    #field bool1 Compression
    #field bool1 DataPadding
    #field bool1 ReportSetmarks
    #field int DefaultBlockSize
    #field int MaximumBlockSize
    #field int MinimumBlockSize
    #field int MaximumPartitionCount
    #field int FeaturesLow
    #field int FeaturesHigh
    #field int EOTWarningZoneSize
#endstruct

stdim st, TAPE_GET_DRIVE_PARAMETERS        ; NSTRUCT 変数を確保
st->ECC = 100
mes "ECC=" + st->ECC