ホーム › Devices.Dvd › DVD_LAYER_DESCRIPTOR
DVD_LAYER_DESCRIPTOR
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| _bitfield1 | BYTE | 1 | +0 | +0 | ブック種別やバージョン等を格納するビットフィールド(1バイト目)。 |
| _bitfield2 | BYTE | 1 | +1 | +1 | ディスクサイズや最大データレート等を格納するビットフィールド(2バイト目)。 |
| _bitfield3 | BYTE | 1 | +2 | +2 | レイヤ数やトラックパス等を格納するビットフィールド(3バイト目)。 |
| _bitfield4 | BYTE | 1 | +3 | +3 | 線記録密度等を格納するビットフィールド(4バイト目)。 |
| StartingDataSector | DWORD | 4 | +4 | +4 | データ領域の開始セクタ番号を示すDWORD。 |
| EndDataSector | DWORD | 4 | +8 | +8 | データ領域の終了セクタ番号を示すDWORD。 |
| EndLayerZeroSector | DWORD | 4 | +12 | +12 | レイヤ0の終了セクタ番号を示すDWORD。 |
| _bitfield5 | BYTE | 1 | +16 | +16 | BCA有無等を格納するビットフィールド(末尾バイト)。 |
各言語での定義
#include <windows.h>
// DVD_LAYER_DESCRIPTOR (x64 17 / x86 17 バイト)
#pragma pack(push, 1)
typedef struct DVD_LAYER_DESCRIPTOR {
BYTE _bitfield1;
BYTE _bitfield2;
BYTE _bitfield3;
BYTE _bitfield4;
DWORD StartingDataSector;
DWORD EndDataSector;
DWORD EndLayerZeroSector;
BYTE _bitfield5;
} DVD_LAYER_DESCRIPTOR;
#pragma pack(pop)using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Unicode)]
public struct DVD_LAYER_DESCRIPTOR
{
public byte _bitfield1;
public byte _bitfield2;
public byte _bitfield3;
public byte _bitfield4;
public uint StartingDataSector;
public uint EndDataSector;
public uint EndLayerZeroSector;
public byte _bitfield5;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, Pack:=1, CharSet:=CharSet.Unicode)>
Public Structure DVD_LAYER_DESCRIPTOR
Public _bitfield1 As Byte
Public _bitfield2 As Byte
Public _bitfield3 As Byte
Public _bitfield4 As Byte
Public StartingDataSector As UInteger
Public EndDataSector As UInteger
Public EndLayerZeroSector As UInteger
Public _bitfield5 As Byte
End Structureimport ctypes
from ctypes import wintypes
class DVD_LAYER_DESCRIPTOR(ctypes.Structure):
_pack_ = 1
_fields_ = [
("_bitfield1", ctypes.c_ubyte),
("_bitfield2", ctypes.c_ubyte),
("_bitfield3", ctypes.c_ubyte),
("_bitfield4", ctypes.c_ubyte),
("StartingDataSector", wintypes.DWORD),
("EndDataSector", wintypes.DWORD),
("EndLayerZeroSector", wintypes.DWORD),
("_bitfield5", ctypes.c_ubyte),
]#[repr(C, packed(1))]
pub struct DVD_LAYER_DESCRIPTOR {
pub _bitfield1: u8,
pub _bitfield2: u8,
pub _bitfield3: u8,
pub _bitfield4: u8,
pub StartingDataSector: u32,
pub EndDataSector: u32,
pub EndLayerZeroSector: u32,
pub _bitfield5: u8,
}import "golang.org/x/sys/windows"
type DVD_LAYER_DESCRIPTOR struct {
_bitfield1 byte
_bitfield2 byte
_bitfield3 byte
_bitfield4 byte
StartingDataSector uint32
EndDataSector uint32
EndLayerZeroSector uint32
_bitfield5 byte
}type
DVD_LAYER_DESCRIPTOR = packed record
_bitfield1: Byte;
_bitfield2: Byte;
_bitfield3: Byte;
_bitfield4: Byte;
StartingDataSector: DWORD;
EndDataSector: DWORD;
EndLayerZeroSector: DWORD;
_bitfield5: Byte;
end;const DVD_LAYER_DESCRIPTOR = extern struct {
_bitfield1: u8,
_bitfield2: u8,
_bitfield3: u8,
_bitfield4: u8,
StartingDataSector: u32,
EndDataSector: u32,
EndLayerZeroSector: u32,
_bitfield5: u8,
};type
DVD_LAYER_DESCRIPTOR {.packed.} = object
_bitfield1: uint8
_bitfield2: uint8
_bitfield3: uint8
_bitfield4: uint8
StartingDataSector: uint32
EndDataSector: uint32
EndLayerZeroSector: uint32
_bitfield5: uint8align(1)
struct DVD_LAYER_DESCRIPTOR
{
ubyte _bitfield1;
ubyte _bitfield2;
ubyte _bitfield3;
ubyte _bitfield4;
uint StartingDataSector;
uint EndDataSector;
uint EndLayerZeroSector;
ubyte _bitfield5;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; DVD_LAYER_DESCRIPTOR サイズ: 17 バイト(x64)
dim st, 5 ; 4byte整数×5(構造体サイズ 17 / 4 切り上げ)
; _bitfield1 : BYTE (+0, 1byte) poke st,0,値 / 値 = peek(st,0)
; _bitfield2 : BYTE (+1, 1byte) poke st,1,値 / 値 = peek(st,1)
; _bitfield3 : BYTE (+2, 1byte) poke st,2,値 / 値 = peek(st,2)
; _bitfield4 : BYTE (+3, 1byte) poke st,3,値 / 値 = peek(st,3)
; StartingDataSector : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; EndDataSector : DWORD (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; EndLayerZeroSector : DWORD (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; _bitfield5 : BYTE (+16, 1byte) poke st,16,値 / 値 = peek(st,16)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global DVD_LAYER_DESCRIPTOR, pack=1
#field byte _bitfield1
#field byte _bitfield2
#field byte _bitfield3
#field byte _bitfield4
#field int StartingDataSector
#field int EndDataSector
#field int EndLayerZeroSector
#field byte _bitfield5
#endstruct
stdim st, DVD_LAYER_DESCRIPTOR ; NSTRUCT 変数を確保
st->_bitfield1 = 100
mes "_bitfield1=" + st->_bitfield1