Win32 API 日本語リファレンス
ホームMedia.WindowsMediaFormat › DRM_PLAY_OPL

DRM_PLAY_OPL

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

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

フィールド

フィールドサイズx64x86説明
minOPLDRM_MINIMUM_OUTPUT_PROTECTION_LEVELS10+0+0再生時に要求される最小出力保護レベル群(DRM_MINIMUM_OUTPUT_PROTECTION_LEVELS)。
oplIdReservedDRM_OPL_OUTPUT_IDS16/8+16+12予約された出力保護ID群(DRM_OPL_OUTPUT_IDS)。
vopiDRM_VIDEO_OUTPUT_PROTECTION_IDS16/8+32+20映像出力保護IDの集合(DRM_VIDEO_OUTPUT_PROTECTION_IDS)。

各言語での定義

#include <windows.h>

// DRM_MINIMUM_OUTPUT_PROTECTION_LEVELS  (x64 10 / x86 10 バイト)
typedef struct DRM_MINIMUM_OUTPUT_PROTECTION_LEVELS {
    WORD wCompressedDigitalVideo;
    WORD wUncompressedDigitalVideo;
    WORD wAnalogVideo;
    WORD wCompressedDigitalAudio;
    WORD wUncompressedDigitalAudio;
} DRM_MINIMUM_OUTPUT_PROTECTION_LEVELS;

// DRM_OPL_OUTPUT_IDS  (x64 16 / x86 8 バイト)
typedef struct DRM_OPL_OUTPUT_IDS {
    WORD cIds;
    GUID* rgIds;
} DRM_OPL_OUTPUT_IDS;

// DRM_VIDEO_OUTPUT_PROTECTION_IDS  (x64 16 / x86 8 バイト)
typedef struct DRM_VIDEO_OUTPUT_PROTECTION_IDS {
    WORD cEntries;
    DRM_OUTPUT_PROTECTION* rgVop;
} DRM_VIDEO_OUTPUT_PROTECTION_IDS;

// DRM_PLAY_OPL  (x64 48 / x86 28 バイト)
typedef struct DRM_PLAY_OPL {
    DRM_MINIMUM_OUTPUT_PROTECTION_LEVELS minOPL;
    DRM_OPL_OUTPUT_IDS oplIdReserved;
    DRM_VIDEO_OUTPUT_PROTECTION_IDS vopi;
} DRM_PLAY_OPL;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DRM_MINIMUM_OUTPUT_PROTECTION_LEVELS
{
    public ushort wCompressedDigitalVideo;
    public ushort wUncompressedDigitalVideo;
    public ushort wAnalogVideo;
    public ushort wCompressedDigitalAudio;
    public ushort wUncompressedDigitalAudio;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DRM_OPL_OUTPUT_IDS
{
    public ushort cIds;
    public IntPtr rgIds;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DRM_VIDEO_OUTPUT_PROTECTION_IDS
{
    public ushort cEntries;
    public IntPtr rgVop;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DRM_PLAY_OPL
{
    public DRM_MINIMUM_OUTPUT_PROTECTION_LEVELS minOPL;
    public DRM_OPL_OUTPUT_IDS oplIdReserved;
    public DRM_VIDEO_OUTPUT_PROTECTION_IDS vopi;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DRM_MINIMUM_OUTPUT_PROTECTION_LEVELS
    Public wCompressedDigitalVideo As UShort
    Public wUncompressedDigitalVideo As UShort
    Public wAnalogVideo As UShort
    Public wCompressedDigitalAudio As UShort
    Public wUncompressedDigitalAudio As UShort
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DRM_OPL_OUTPUT_IDS
    Public cIds As UShort
    Public rgIds As IntPtr
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DRM_VIDEO_OUTPUT_PROTECTION_IDS
    Public cEntries As UShort
    Public rgVop As IntPtr
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DRM_PLAY_OPL
    Public minOPL As DRM_MINIMUM_OUTPUT_PROTECTION_LEVELS
    Public oplIdReserved As DRM_OPL_OUTPUT_IDS
    Public vopi As DRM_VIDEO_OUTPUT_PROTECTION_IDS
End Structure
import ctypes
from ctypes import wintypes

class DRM_MINIMUM_OUTPUT_PROTECTION_LEVELS(ctypes.Structure):
    _fields_ = [
        ("wCompressedDigitalVideo", ctypes.c_ushort),
        ("wUncompressedDigitalVideo", ctypes.c_ushort),
        ("wAnalogVideo", ctypes.c_ushort),
        ("wCompressedDigitalAudio", ctypes.c_ushort),
        ("wUncompressedDigitalAudio", ctypes.c_ushort),
    ]

class DRM_OPL_OUTPUT_IDS(ctypes.Structure):
    _fields_ = [
        ("cIds", ctypes.c_ushort),
        ("rgIds", ctypes.c_void_p),
    ]

class DRM_VIDEO_OUTPUT_PROTECTION_IDS(ctypes.Structure):
    _fields_ = [
        ("cEntries", ctypes.c_ushort),
        ("rgVop", ctypes.c_void_p),
    ]

class DRM_PLAY_OPL(ctypes.Structure):
    _fields_ = [
        ("minOPL", DRM_MINIMUM_OUTPUT_PROTECTION_LEVELS),
        ("oplIdReserved", DRM_OPL_OUTPUT_IDS),
        ("vopi", DRM_VIDEO_OUTPUT_PROTECTION_IDS),
    ]
#[repr(C)]
pub struct DRM_MINIMUM_OUTPUT_PROTECTION_LEVELS {
    pub wCompressedDigitalVideo: u16,
    pub wUncompressedDigitalVideo: u16,
    pub wAnalogVideo: u16,
    pub wCompressedDigitalAudio: u16,
    pub wUncompressedDigitalAudio: u16,
}

#[repr(C)]
pub struct DRM_OPL_OUTPUT_IDS {
    pub cIds: u16,
    pub rgIds: *mut core::ffi::c_void,
}

#[repr(C)]
pub struct DRM_VIDEO_OUTPUT_PROTECTION_IDS {
    pub cEntries: u16,
    pub rgVop: *mut core::ffi::c_void,
}

#[repr(C)]
pub struct DRM_PLAY_OPL {
    pub minOPL: DRM_MINIMUM_OUTPUT_PROTECTION_LEVELS,
    pub oplIdReserved: DRM_OPL_OUTPUT_IDS,
    pub vopi: DRM_VIDEO_OUTPUT_PROTECTION_IDS,
}
import "golang.org/x/sys/windows"

type DRM_MINIMUM_OUTPUT_PROTECTION_LEVELS struct {
	wCompressedDigitalVideo uint16
	wUncompressedDigitalVideo uint16
	wAnalogVideo uint16
	wCompressedDigitalAudio uint16
	wUncompressedDigitalAudio uint16
}

type DRM_OPL_OUTPUT_IDS struct {
	cIds uint16
	rgIds uintptr
}

type DRM_VIDEO_OUTPUT_PROTECTION_IDS struct {
	cEntries uint16
	rgVop uintptr
}

type DRM_PLAY_OPL struct {
	minOPL DRM_MINIMUM_OUTPUT_PROTECTION_LEVELS
	oplIdReserved DRM_OPL_OUTPUT_IDS
	vopi DRM_VIDEO_OUTPUT_PROTECTION_IDS
}
type
  DRM_MINIMUM_OUTPUT_PROTECTION_LEVELS = record
    wCompressedDigitalVideo: Word;
    wUncompressedDigitalVideo: Word;
    wAnalogVideo: Word;
    wCompressedDigitalAudio: Word;
    wUncompressedDigitalAudio: Word;
  end;

  DRM_OPL_OUTPUT_IDS = record
    cIds: Word;
    rgIds: Pointer;
  end;

  DRM_VIDEO_OUTPUT_PROTECTION_IDS = record
    cEntries: Word;
    rgVop: Pointer;
  end;

  DRM_PLAY_OPL = record
    minOPL: DRM_MINIMUM_OUTPUT_PROTECTION_LEVELS;
    oplIdReserved: DRM_OPL_OUTPUT_IDS;
    vopi: DRM_VIDEO_OUTPUT_PROTECTION_IDS;
  end;
const DRM_MINIMUM_OUTPUT_PROTECTION_LEVELS = extern struct {
    wCompressedDigitalVideo: u16,
    wUncompressedDigitalVideo: u16,
    wAnalogVideo: u16,
    wCompressedDigitalAudio: u16,
    wUncompressedDigitalAudio: u16,
};

const DRM_OPL_OUTPUT_IDS = extern struct {
    cIds: u16,
    rgIds: ?*anyopaque,
};

const DRM_VIDEO_OUTPUT_PROTECTION_IDS = extern struct {
    cEntries: u16,
    rgVop: ?*anyopaque,
};

const DRM_PLAY_OPL = extern struct {
    minOPL: DRM_MINIMUM_OUTPUT_PROTECTION_LEVELS,
    oplIdReserved: DRM_OPL_OUTPUT_IDS,
    vopi: DRM_VIDEO_OUTPUT_PROTECTION_IDS,
};
type
  DRM_MINIMUM_OUTPUT_PROTECTION_LEVELS {.bycopy.} = object
    wCompressedDigitalVideo: uint16
    wUncompressedDigitalVideo: uint16
    wAnalogVideo: uint16
    wCompressedDigitalAudio: uint16
    wUncompressedDigitalAudio: uint16

  DRM_OPL_OUTPUT_IDS {.bycopy.} = object
    cIds: uint16
    rgIds: pointer

  DRM_VIDEO_OUTPUT_PROTECTION_IDS {.bycopy.} = object
    cEntries: uint16
    rgVop: pointer

  DRM_PLAY_OPL {.bycopy.} = object
    minOPL: DRM_MINIMUM_OUTPUT_PROTECTION_LEVELS
    oplIdReserved: DRM_OPL_OUTPUT_IDS
    vopi: DRM_VIDEO_OUTPUT_PROTECTION_IDS
struct DRM_MINIMUM_OUTPUT_PROTECTION_LEVELS
{
    ushort wCompressedDigitalVideo;
    ushort wUncompressedDigitalVideo;
    ushort wAnalogVideo;
    ushort wCompressedDigitalAudio;
    ushort wUncompressedDigitalAudio;
}

struct DRM_OPL_OUTPUT_IDS
{
    ushort cIds;
    void* rgIds;
}

struct DRM_VIDEO_OUTPUT_PROTECTION_IDS
{
    ushort cEntries;
    void* rgVop;
}

struct DRM_PLAY_OPL
{
    DRM_MINIMUM_OUTPUT_PROTECTION_LEVELS minOPL;
    DRM_OPL_OUTPUT_IDS oplIdReserved;
    DRM_VIDEO_OUTPUT_PROTECTION_IDS vopi;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; DRM_PLAY_OPL サイズ: 28 バイト(x86)
dim st, 7    ; 4byte整数×7(構造体サイズ 28 / 4 切り上げ)
; minOPL : DRM_MINIMUM_OUTPUT_PROTECTION_LEVELS (+0, 10byte)  varptr(st)+0 を基点に操作(10byte:入れ子/配列)
; oplIdReserved : DRM_OPL_OUTPUT_IDS (+12, 8byte)  varptr(st)+12 を基点に操作(8byte:入れ子/配列)
; vopi : DRM_VIDEO_OUTPUT_PROTECTION_IDS (+20, 8byte)  varptr(st)+20 を基点に操作(8byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; DRM_PLAY_OPL サイズ: 48 バイト(x64)
dim st, 12    ; 4byte整数×12(構造体サイズ 48 / 4 切り上げ)
; minOPL : DRM_MINIMUM_OUTPUT_PROTECTION_LEVELS (+0, 10byte)  varptr(st)+0 を基点に操作(10byte:入れ子/配列)
; oplIdReserved : DRM_OPL_OUTPUT_IDS (+16, 16byte)  varptr(st)+16 を基点に操作(16byte:入れ子/配列)
; vopi : DRM_VIDEO_OUTPUT_PROTECTION_IDS (+32, 16byte)  varptr(st)+32 を基点に操作(16byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global DRM_MINIMUM_OUTPUT_PROTECTION_LEVELS
    #field short wCompressedDigitalVideo
    #field short wUncompressedDigitalVideo
    #field short wAnalogVideo
    #field short wCompressedDigitalAudio
    #field short wUncompressedDigitalAudio
#endstruct

#defstruct global DRM_OPL_OUTPUT_IDS
    #field short cIds
    #field intptr rgIds
#endstruct

#defstruct global DRM_VIDEO_OUTPUT_PROTECTION_IDS
    #field short cEntries
    #field intptr rgVop
#endstruct

#defstruct global DRM_PLAY_OPL
    #field DRM_MINIMUM_OUTPUT_PROTECTION_LEVELS minOPL
    #field DRM_OPL_OUTPUT_IDS oplIdReserved
    #field DRM_VIDEO_OUTPUT_PROTECTION_IDS vopi
#endstruct

stdim st, DRM_PLAY_OPL        ; NSTRUCT 変数を確保