Win32 API 日本語リファレンス
ホームDevices.Dvd › DVD_UNIQUE_DISC_IDENTIFIER

DVD_UNIQUE_DISC_IDENTIFIER

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

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

フィールド

フィールドサイズx64x86説明
Reserved0BYTE2+0+0予約領域。将来の拡張用で通常は0。
RandomNumberBYTE2+2+2ディスク固有識別子に含まれる乱数値を示すバイト配列。
YearBYTE4+4+4識別子生成年を示すバイト配列。
MonthBYTE2+8+8識別子生成月を示す1バイト値。
DayBYTE2+10+10識別子生成日を示す1バイト値。
HourBYTE2+12+12識別子生成時を示す1バイト値。
MinuteBYTE2+14+14識別子生成分を示す1バイト値。
SecondBYTE2+16+16識別子生成秒を示す1バイト値。

各言語での定義

#include <windows.h>

// DVD_UNIQUE_DISC_IDENTIFIER  (x64 18 / x86 18 バイト)
typedef struct DVD_UNIQUE_DISC_IDENTIFIER {
    BYTE Reserved0[2];
    BYTE RandomNumber[2];
    BYTE Year[4];
    BYTE Month[2];
    BYTE Day[2];
    BYTE Hour[2];
    BYTE Minute[2];
    BYTE Second[2];
} DVD_UNIQUE_DISC_IDENTIFIER;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DVD_UNIQUE_DISC_IDENTIFIER
{
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public byte[] Reserved0;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public byte[] RandomNumber;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public byte[] Year;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public byte[] Month;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public byte[] Day;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public byte[] Hour;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public byte[] Minute;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public byte[] Second;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DVD_UNIQUE_DISC_IDENTIFIER
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=2)> Public Reserved0() As Byte
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=2)> Public RandomNumber() As Byte
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=4)> Public Year() As Byte
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=2)> Public Month() As Byte
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=2)> Public Day() As Byte
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=2)> Public Hour() As Byte
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=2)> Public Minute() As Byte
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=2)> Public Second() As Byte
End Structure
import ctypes
from ctypes import wintypes

class DVD_UNIQUE_DISC_IDENTIFIER(ctypes.Structure):
    _fields_ = [
        ("Reserved0", ctypes.c_ubyte * 2),
        ("RandomNumber", ctypes.c_ubyte * 2),
        ("Year", ctypes.c_ubyte * 4),
        ("Month", ctypes.c_ubyte * 2),
        ("Day", ctypes.c_ubyte * 2),
        ("Hour", ctypes.c_ubyte * 2),
        ("Minute", ctypes.c_ubyte * 2),
        ("Second", ctypes.c_ubyte * 2),
    ]
#[repr(C)]
pub struct DVD_UNIQUE_DISC_IDENTIFIER {
    pub Reserved0: [u8; 2],
    pub RandomNumber: [u8; 2],
    pub Year: [u8; 4],
    pub Month: [u8; 2],
    pub Day: [u8; 2],
    pub Hour: [u8; 2],
    pub Minute: [u8; 2],
    pub Second: [u8; 2],
}
import "golang.org/x/sys/windows"

type DVD_UNIQUE_DISC_IDENTIFIER struct {
	Reserved0 [2]byte
	RandomNumber [2]byte
	Year [4]byte
	Month [2]byte
	Day [2]byte
	Hour [2]byte
	Minute [2]byte
	Second [2]byte
}
type
  DVD_UNIQUE_DISC_IDENTIFIER = record
    Reserved0: array[0..1] of Byte;
    RandomNumber: array[0..1] of Byte;
    Year: array[0..3] of Byte;
    Month: array[0..1] of Byte;
    Day: array[0..1] of Byte;
    Hour: array[0..1] of Byte;
    Minute: array[0..1] of Byte;
    Second: array[0..1] of Byte;
  end;
const DVD_UNIQUE_DISC_IDENTIFIER = extern struct {
    Reserved0: [2]u8,
    RandomNumber: [2]u8,
    Year: [4]u8,
    Month: [2]u8,
    Day: [2]u8,
    Hour: [2]u8,
    Minute: [2]u8,
    Second: [2]u8,
};
type
  DVD_UNIQUE_DISC_IDENTIFIER {.bycopy.} = object
    Reserved0: array[2, uint8]
    RandomNumber: array[2, uint8]
    Year: array[4, uint8]
    Month: array[2, uint8]
    Day: array[2, uint8]
    Hour: array[2, uint8]
    Minute: array[2, uint8]
    Second: array[2, uint8]
struct DVD_UNIQUE_DISC_IDENTIFIER
{
    ubyte[2] Reserved0;
    ubyte[2] RandomNumber;
    ubyte[4] Year;
    ubyte[2] Month;
    ubyte[2] Day;
    ubyte[2] Hour;
    ubyte[2] Minute;
    ubyte[2] Second;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; DVD_UNIQUE_DISC_IDENTIFIER サイズ: 18 バイト(x64)
dim st, 5    ; 4byte整数×5(構造体サイズ 18 / 4 切り上げ)
; Reserved0 : BYTE (+0, 2byte)  varptr(st)+0 を基点に操作(2byte:入れ子/配列)
; RandomNumber : BYTE (+2, 2byte)  varptr(st)+2 を基点に操作(2byte:入れ子/配列)
; Year : BYTE (+4, 4byte)  varptr(st)+4 を基点に操作(4byte:入れ子/配列)
; Month : BYTE (+8, 2byte)  varptr(st)+8 を基点に操作(2byte:入れ子/配列)
; Day : BYTE (+10, 2byte)  varptr(st)+10 を基点に操作(2byte:入れ子/配列)
; Hour : BYTE (+12, 2byte)  varptr(st)+12 を基点に操作(2byte:入れ子/配列)
; Minute : BYTE (+14, 2byte)  varptr(st)+14 を基点に操作(2byte:入れ子/配列)
; Second : BYTE (+16, 2byte)  varptr(st)+16 を基点に操作(2byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global DVD_UNIQUE_DISC_IDENTIFIER
    #field byte Reserved0 2
    #field byte RandomNumber 2
    #field byte Year 4
    #field byte Month 2
    #field byte Day 2
    #field byte Hour 2
    #field byte Minute 2
    #field byte Second 2
#endstruct

stdim st, DVD_UNIQUE_DISC_IDENTIFIER        ; NSTRUCT 変数を確保