VIDEOPARAMETERS
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 | ||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Guid | GUID | 16 | +0 | +0 | この構造体のグローバル一意識別子 (GUID) {02C62061-1097-11d1-920F-00A024DF156E} を指定します。ビデオ ミニポート ドライバーは、構造体を処理する前に構造体の先頭にある GUID を検証しなければなりません。 | ||||||||||||||||||||||||||||||
| dwOffset | DWORD | 4 | +16 | +16 | 予約済みであり、ビデオ ミニポート ドライバーは無視してください。 | ||||||||||||||||||||||||||||||
| dwCommand | DWORD | 4 | +20 | +20 | ドライバーが実行する動作を示します。このメンバーには次のいずれかの値を指定できます。 VP_COMMAND_GETミニポート ドライバーは、dwFlags に該当するフラグを設定し、そのフラグに対応するメンバーの値を設定することによって、デバイスのすべての TV コネクタ機能、現在の TV コネクタ設定、コピー プロテクション機能、および現在のコピー プロテクション設定を返します。 VP_COMMAND_SETミニポート ドライバーは、dwFlags に設定されたフラグに対応するこの構造体のメンバーに従って、TV コネクタおよびコピー プロテクションのハードウェアを設定します。 | ||||||||||||||||||||||||||||||
| dwFlags | DWORD | 4 | +24 | +24 | この構造体のどのメンバーが有効なデータを含むかを示します。dwCommand が VP_COMMAND_GET の場合、ドライバーは有効なデータを返したメンバーに対応するビットをこのメンバーに設定します。dwCommand が VP_COMMAND_SET の場合、ドライバーはこのメンバーに設定されたビットに対応するメンバーの値に従って、ハードウェアの機能を設定します。このメンバーには、次の表の 1 列目に示す値のビット単位の OR を指定できます。
| ||||||||||||||||||||||||||||||
| dwMode | DWORD | 4 | +28 | +28 | 現在の再生モードを指定します。このメンバーは VP_COMMAND_SET と VP_COMMAND_GET の両方のコマンドで有効であり、次のいずれかの値を指定できます。 VP_MODE_TV_PLAYBACKフリッカー フィルターをオフ、オーバースキャン表示をオンにした、ビデオ再生に最適なフィールドのセットを表します。 VP_MODE_WIN_GRAPHICSフリッカー フィルターを最大、オーバースキャン表示をオフにした、Windows の表示に最適な表示設定を表します。 | ||||||||||||||||||||||||||||||
| dwTVStandard | DWORD | 4 | +32 | +32 | 現在の世界のテレビ標準です。このメンバーは VP_COMMAND_SET と VP_COMMAND_GET の両方のコマンドで有効であり、次のいずれかの値を指定できます。 | ||||||||||||||||||||||||||||||
| dwAvailableModes | DWORD | 4 | +36 | +36 | デバイスが対応している再生モードを示します。このメンバーは VP_COMMAND_GET コマンドでのみ有効であり、次の値のビット単位の OR を指定できます。 | ||||||||||||||||||||||||||||||
| dwAvailableTVStandard | DWORD | 4 | +40 | +40 | 利用可能なすべての世界のテレビ標準を指定します。このメンバーは VP_COMMAND_GET コマンドでのみ有効であり、次の値のビット単位の OR を指定できます。 | ||||||||||||||||||||||||||||||
| dwFlickerFilter | DWORD | 4 | +44 | +44 | フリッカー フィルターの状態を示す、パーセントの 10 分の 1 単位の値です。このメンバーには [0,1000] の範囲の値を指定でき、VP_COMMAND_GET と VP_COMMAND_SET の両方で有効です。 | ||||||||||||||||||||||||||||||
| dwOverScanX | DWORD | 4 | +48 | +48 | x 方向のオーバースキャン量を示す、パーセントの 10 分の 1 単位の値です。このメンバーには [0,1000] の範囲の値を指定でき、VP_COMMAND_GET と VP_COMMAND_SET の両方で有効です。 | ||||||||||||||||||||||||||||||
| dwOverScanY | DWORD | 4 | +52 | +52 | y 方向のオーバースキャン量を示す、パーセントの 10 分の 1 単位の値です。このメンバーには [0,1000] の範囲の値を指定でき、VP_COMMAND_GET と VP_COMMAND_SET の両方で有効です。 | ||||||||||||||||||||||||||||||
| dwMaxUnscaledX | DWORD | 4 | +56 | +56 | ハードウェアによるビデオ イメージのスケーリングを行わずに TV が表示できる最大の x 解像度です。dwCommand が VP_COMMAND_GET の場合、ミニポート ドライバーはこのメンバーに値を設定しなければなりません。このメンバーは VP_COMMAND_SET では無効です。 | ||||||||||||||||||||||||||||||
| dwMaxUnscaledY | DWORD | 4 | +60 | +60 | ハードウェアによるビデオ イメージのスケーリングを行わずに TV が表示できる最大の y 解像度です。dwCommand が VP_COMMAND_GET の場合、ミニポート ドライバーはこのメンバーに値を設定しなければなりません。このメンバーは VP_COMMAND_SET では無効です。 | ||||||||||||||||||||||||||||||
| dwPositionX | DWORD | 4 | +64 | +64 | TV 上のイメージの現在の x 位置を決定するためにハードウェアが使用する値です。このメンバーはピクセル単位で指定し、VP_COMMAND_GET と VP_COMMAND_SET の両方で有効です。 | ||||||||||||||||||||||||||||||
| dwPositionY | DWORD | 4 | +68 | +68 | TV 上のイメージの現在の y 位置を決定するためにハードウェアが使用する値です。このメンバーは走査線単位で指定し、VP_COMMAND_GET と VP_COMMAND_SET の両方で有効です。 | ||||||||||||||||||||||||||||||
| dwBrightness | DWORD | 4 | +72 | +72 | TV の明るさ設定を示すパーセント値です。このメンバーには [0,100] の範囲の値を指定でき、VP_COMMAND_GET と VP_COMMAND_SET の両方で有効です。 | ||||||||||||||||||||||||||||||
| dwContrast | DWORD | 4 | +76 | +76 | TV のコントラスト設定を示すパーセント値です。このメンバーには [0,100] の範囲の値を指定でき、VP_COMMAND_GET と VP_COMMAND_SET の両方で有効です。 | ||||||||||||||||||||||||||||||
| dwCPType | DWORD | 4 | +80 | +80 | デバイスがサポートするコピー プロテクションの種類を指定します。このメンバーは VP_COMMAND_SET と VP_COMMAND_GET の両方のコマンドで有効であり、CP_TYPE_APS_TRIGGER を指定できます。 | ||||||||||||||||||||||||||||||
| dwCPCommand | DWORD | 4 | +84 | +84 | コピー プロテクションのコマンドです。このメンバーは VP_COMMAND_SET コマンドでのみ有効であり、次のいずれかの値を指定できます。 VP_CP_CMD_ACTIVATEミニポート ドライバーはコピー プロテクションを有効にし、一意のコピー プロテクション キーを生成して dwCPKey で返します。 VP_CP_CMD_CHANGEdwCPKey のコピー プロテクション キーが有効な場合、ミニポート ドライバーは bCP_APSTriggerBits のトリガー データに基づいてコピー プロテクションを変更します。 VP_CP_CMD_DEACTIVATEdwCPKey のコピー プロテクション キーが有効な場合、ミニポート ドライバーはコピー プロテクションを無効にします。 | ||||||||||||||||||||||||||||||
| dwCPStandard | DWORD | 4 | +88 | +88 | コピー プロテクションの種類が利用可能な TV 標準です。このメンバーは VP_COMMAND_GET コマンドでのみ有効であり、次の値のビット単位の OR を指定できます。 | ||||||||||||||||||||||||||||||
| dwCPKey | DWORD | 4 | +92 | +92 | このドライバー インスタンスに固有の、ドライバーが生成したコピー プロテクション キーです。このメンバーは VP_COMMAND_SET コマンドでのみ有効です。ミニポート ドライバーは、dwCPCommand が VP_CP_CMD_ACTIVATE に設定されている場合に、このキーを生成して返します。呼び出し元は、dwCPCommand フィールドが VP_CP_CMD_DEACTIVATE または VP_CP_CMD_CHANGE のいずれかである場合に、このキーを設定しなければなりません。呼び出し元が誤ったキーを設定した場合、ドライバーは現在のコピー プロテクション設定を変更してはなりません。 | ||||||||||||||||||||||||||||||
| bCP_APSTriggerBits | DWORD | 4 | +96 | +96 | DVD のアナログ プロテクション システム (APS) トリガー ビット データを指定します。ビット 0 と 1 が有効です。このメンバーは VP_COMMAND_SET コマンドでのみ有効です。 | ||||||||||||||||||||||||||||||
| bOEMCopyProtection | BYTE | 256 | +100 | +100 | OEM 固有のコピー プロテクション データです。このメンバーは VP_COMMAND_SET と VP_COMMAND_GET の両方のコマンドで有効です。 |
公式ドキュメント
ビデオ ミニポート ドライバーは、IOCTL 要求が IOCTL_VIDEO_HANDLE_VIDEOPARAMETERS の場合、VIDEO_REQUEST_PACKET の InputBuffer メンバーで VIDEOPARAMETERS 構造体へのポインターを受け取ります。VIDEOPARAMETERS 構造体の dwCommand メンバーに応じて、ミニポート ドライバーはデバイスのテレビ コネクタおよびコピー プロテクションの機能を取得または設定します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での定義
#include <windows.h>
// VIDEOPARAMETERS (x64 356 / x86 356 バイト)
typedef struct VIDEOPARAMETERS {
GUID Guid;
DWORD dwOffset;
DWORD dwCommand;
DWORD dwFlags;
DWORD dwMode;
DWORD dwTVStandard;
DWORD dwAvailableModes;
DWORD dwAvailableTVStandard;
DWORD dwFlickerFilter;
DWORD dwOverScanX;
DWORD dwOverScanY;
DWORD dwMaxUnscaledX;
DWORD dwMaxUnscaledY;
DWORD dwPositionX;
DWORD dwPositionY;
DWORD dwBrightness;
DWORD dwContrast;
DWORD dwCPType;
DWORD dwCPCommand;
DWORD dwCPStandard;
DWORD dwCPKey;
DWORD bCP_APSTriggerBits;
BYTE bOEMCopyProtection[256];
} VIDEOPARAMETERS;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct VIDEOPARAMETERS
{
public Guid Guid;
public uint dwOffset;
public uint dwCommand;
public uint dwFlags;
public uint dwMode;
public uint dwTVStandard;
public uint dwAvailableModes;
public uint dwAvailableTVStandard;
public uint dwFlickerFilter;
public uint dwOverScanX;
public uint dwOverScanY;
public uint dwMaxUnscaledX;
public uint dwMaxUnscaledY;
public uint dwPositionX;
public uint dwPositionY;
public uint dwBrightness;
public uint dwContrast;
public uint dwCPType;
public uint dwCPCommand;
public uint dwCPStandard;
public uint dwCPKey;
public uint bCP_APSTriggerBits;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)] public byte[] bOEMCopyProtection;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure VIDEOPARAMETERS
Public Guid As Guid
Public dwOffset As UInteger
Public dwCommand As UInteger
Public dwFlags As UInteger
Public dwMode As UInteger
Public dwTVStandard As UInteger
Public dwAvailableModes As UInteger
Public dwAvailableTVStandard As UInteger
Public dwFlickerFilter As UInteger
Public dwOverScanX As UInteger
Public dwOverScanY As UInteger
Public dwMaxUnscaledX As UInteger
Public dwMaxUnscaledY As UInteger
Public dwPositionX As UInteger
Public dwPositionY As UInteger
Public dwBrightness As UInteger
Public dwContrast As UInteger
Public dwCPType As UInteger
Public dwCPCommand As UInteger
Public dwCPStandard As UInteger
Public dwCPKey As UInteger
Public bCP_APSTriggerBits As UInteger
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=256)> Public bOEMCopyProtection() As Byte
End Structureimport ctypes
from ctypes import wintypes
class VIDEOPARAMETERS(ctypes.Structure):
_fields_ = [
("Guid", GUID),
("dwOffset", wintypes.DWORD),
("dwCommand", wintypes.DWORD),
("dwFlags", wintypes.DWORD),
("dwMode", wintypes.DWORD),
("dwTVStandard", wintypes.DWORD),
("dwAvailableModes", wintypes.DWORD),
("dwAvailableTVStandard", wintypes.DWORD),
("dwFlickerFilter", wintypes.DWORD),
("dwOverScanX", wintypes.DWORD),
("dwOverScanY", wintypes.DWORD),
("dwMaxUnscaledX", wintypes.DWORD),
("dwMaxUnscaledY", wintypes.DWORD),
("dwPositionX", wintypes.DWORD),
("dwPositionY", wintypes.DWORD),
("dwBrightness", wintypes.DWORD),
("dwContrast", wintypes.DWORD),
("dwCPType", wintypes.DWORD),
("dwCPCommand", wintypes.DWORD),
("dwCPStandard", wintypes.DWORD),
("dwCPKey", wintypes.DWORD),
("bCP_APSTriggerBits", wintypes.DWORD),
("bOEMCopyProtection", ctypes.c_ubyte * 256),
]#[repr(C)]
pub struct VIDEOPARAMETERS {
pub Guid: GUID,
pub dwOffset: u32,
pub dwCommand: u32,
pub dwFlags: u32,
pub dwMode: u32,
pub dwTVStandard: u32,
pub dwAvailableModes: u32,
pub dwAvailableTVStandard: u32,
pub dwFlickerFilter: u32,
pub dwOverScanX: u32,
pub dwOverScanY: u32,
pub dwMaxUnscaledX: u32,
pub dwMaxUnscaledY: u32,
pub dwPositionX: u32,
pub dwPositionY: u32,
pub dwBrightness: u32,
pub dwContrast: u32,
pub dwCPType: u32,
pub dwCPCommand: u32,
pub dwCPStandard: u32,
pub dwCPKey: u32,
pub bCP_APSTriggerBits: u32,
pub bOEMCopyProtection: [u8; 256],
}import "golang.org/x/sys/windows"
type VIDEOPARAMETERS struct {
Guid windows.GUID
dwOffset uint32
dwCommand uint32
dwFlags uint32
dwMode uint32
dwTVStandard uint32
dwAvailableModes uint32
dwAvailableTVStandard uint32
dwFlickerFilter uint32
dwOverScanX uint32
dwOverScanY uint32
dwMaxUnscaledX uint32
dwMaxUnscaledY uint32
dwPositionX uint32
dwPositionY uint32
dwBrightness uint32
dwContrast uint32
dwCPType uint32
dwCPCommand uint32
dwCPStandard uint32
dwCPKey uint32
bCP_APSTriggerBits uint32
bOEMCopyProtection [256]byte
}type
VIDEOPARAMETERS = record
Guid: TGUID;
dwOffset: DWORD;
dwCommand: DWORD;
dwFlags: DWORD;
dwMode: DWORD;
dwTVStandard: DWORD;
dwAvailableModes: DWORD;
dwAvailableTVStandard: DWORD;
dwFlickerFilter: DWORD;
dwOverScanX: DWORD;
dwOverScanY: DWORD;
dwMaxUnscaledX: DWORD;
dwMaxUnscaledY: DWORD;
dwPositionX: DWORD;
dwPositionY: DWORD;
dwBrightness: DWORD;
dwContrast: DWORD;
dwCPType: DWORD;
dwCPCommand: DWORD;
dwCPStandard: DWORD;
dwCPKey: DWORD;
bCP_APSTriggerBits: DWORD;
bOEMCopyProtection: array[0..255] of Byte;
end;const VIDEOPARAMETERS = extern struct {
Guid: GUID,
dwOffset: u32,
dwCommand: u32,
dwFlags: u32,
dwMode: u32,
dwTVStandard: u32,
dwAvailableModes: u32,
dwAvailableTVStandard: u32,
dwFlickerFilter: u32,
dwOverScanX: u32,
dwOverScanY: u32,
dwMaxUnscaledX: u32,
dwMaxUnscaledY: u32,
dwPositionX: u32,
dwPositionY: u32,
dwBrightness: u32,
dwContrast: u32,
dwCPType: u32,
dwCPCommand: u32,
dwCPStandard: u32,
dwCPKey: u32,
bCP_APSTriggerBits: u32,
bOEMCopyProtection: [256]u8,
};type
VIDEOPARAMETERS {.bycopy.} = object
Guid: GUID
dwOffset: uint32
dwCommand: uint32
dwFlags: uint32
dwMode: uint32
dwTVStandard: uint32
dwAvailableModes: uint32
dwAvailableTVStandard: uint32
dwFlickerFilter: uint32
dwOverScanX: uint32
dwOverScanY: uint32
dwMaxUnscaledX: uint32
dwMaxUnscaledY: uint32
dwPositionX: uint32
dwPositionY: uint32
dwBrightness: uint32
dwContrast: uint32
dwCPType: uint32
dwCPCommand: uint32
dwCPStandard: uint32
dwCPKey: uint32
bCP_APSTriggerBits: uint32
bOEMCopyProtection: array[256, uint8]struct VIDEOPARAMETERS
{
GUID Guid;
uint dwOffset;
uint dwCommand;
uint dwFlags;
uint dwMode;
uint dwTVStandard;
uint dwAvailableModes;
uint dwAvailableTVStandard;
uint dwFlickerFilter;
uint dwOverScanX;
uint dwOverScanY;
uint dwMaxUnscaledX;
uint dwMaxUnscaledY;
uint dwPositionX;
uint dwPositionY;
uint dwBrightness;
uint dwContrast;
uint dwCPType;
uint dwCPCommand;
uint dwCPStandard;
uint dwCPKey;
uint bCP_APSTriggerBits;
ubyte[256] bOEMCopyProtection;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; VIDEOPARAMETERS サイズ: 356 バイト(x64)
dim st, 89 ; 4byte整数×89(構造体サイズ 356 / 4 切り上げ)
; Guid : GUID (+0, 16byte) varptr(st)+0 を基点に操作(16byte:入れ子/配列)
; dwOffset : DWORD (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; dwCommand : DWORD (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; dwFlags : DWORD (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; dwMode : DWORD (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; dwTVStandard : DWORD (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; dwAvailableModes : DWORD (+36, 4byte) st.9 = 値 / 値 = st.9 (lpoke/lpeek も可)
; dwAvailableTVStandard : DWORD (+40, 4byte) st.10 = 値 / 値 = st.10 (lpoke/lpeek も可)
; dwFlickerFilter : DWORD (+44, 4byte) st.11 = 値 / 値 = st.11 (lpoke/lpeek も可)
; dwOverScanX : DWORD (+48, 4byte) st.12 = 値 / 値 = st.12 (lpoke/lpeek も可)
; dwOverScanY : DWORD (+52, 4byte) st.13 = 値 / 値 = st.13 (lpoke/lpeek も可)
; dwMaxUnscaledX : DWORD (+56, 4byte) st.14 = 値 / 値 = st.14 (lpoke/lpeek も可)
; dwMaxUnscaledY : DWORD (+60, 4byte) st.15 = 値 / 値 = st.15 (lpoke/lpeek も可)
; dwPositionX : DWORD (+64, 4byte) st.16 = 値 / 値 = st.16 (lpoke/lpeek も可)
; dwPositionY : DWORD (+68, 4byte) st.17 = 値 / 値 = st.17 (lpoke/lpeek も可)
; dwBrightness : DWORD (+72, 4byte) st.18 = 値 / 値 = st.18 (lpoke/lpeek も可)
; dwContrast : DWORD (+76, 4byte) st.19 = 値 / 値 = st.19 (lpoke/lpeek も可)
; dwCPType : DWORD (+80, 4byte) st.20 = 値 / 値 = st.20 (lpoke/lpeek も可)
; dwCPCommand : DWORD (+84, 4byte) st.21 = 値 / 値 = st.21 (lpoke/lpeek も可)
; dwCPStandard : DWORD (+88, 4byte) st.22 = 値 / 値 = st.22 (lpoke/lpeek も可)
; dwCPKey : DWORD (+92, 4byte) st.23 = 値 / 値 = st.23 (lpoke/lpeek も可)
; bCP_APSTriggerBits : DWORD (+96, 4byte) st.24 = 値 / 値 = st.24 (lpoke/lpeek も可)
; bOEMCopyProtection : BYTE (+100, 256byte) varptr(st)+100 を基点に操作(256byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global GUID, pack=1
#field int Data1
#field short Data2
#field short Data3
#field byte Data4 8
#endstruct
#defstruct global VIDEOPARAMETERS
#field GUID Guid
#field int dwOffset
#field int dwCommand
#field int dwFlags
#field int dwMode
#field int dwTVStandard
#field int dwAvailableModes
#field int dwAvailableTVStandard
#field int dwFlickerFilter
#field int dwOverScanX
#field int dwOverScanY
#field int dwMaxUnscaledX
#field int dwMaxUnscaledY
#field int dwPositionX
#field int dwPositionY
#field int dwBrightness
#field int dwContrast
#field int dwCPType
#field int dwCPCommand
#field int dwCPStandard
#field int dwCPKey
#field int bCP_APSTriggerBits
#field byte bOEMCopyProtection 256
#endstruct
stdim st, VIDEOPARAMETERS ; NSTRUCT 変数を確保
st->dwOffset = 100
mes "dwOffset=" + st->dwOffset