ホーム › Devices.Dvd › DVD_UNIQUE_DISC_IDENTIFIER
DVD_UNIQUE_DISC_IDENTIFIER
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| Reserved0 | BYTE | 2 | +0 | +0 | 予約領域。将来の拡張用で通常は0。 |
| RandomNumber | BYTE | 2 | +2 | +2 | ディスク固有識別子に含まれる乱数値を示すバイト配列。 |
| Year | BYTE | 4 | +4 | +4 | 識別子生成年を示すバイト配列。 |
| Month | BYTE | 2 | +8 | +8 | 識別子生成月を示す1バイト値。 |
| Day | BYTE | 2 | +10 | +10 | 識別子生成日を示す1バイト値。 |
| Hour | BYTE | 2 | +12 | +12 | 識別子生成時を示す1バイト値。 |
| Minute | BYTE | 2 | +14 | +14 | 識別子生成分を示す1バイト値。 |
| Second | BYTE | 2 | +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 Structureimport 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 変数を確保