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

BDA_ISDBCAS_EMG_REQ

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

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

フィールド

フィールドサイズx64x86説明
bCLABYTE1+0+0APDUのクラスバイト(CLA)。ICカードコマンドのクラスを示す。
bINSBYTE1+1+1APDUの命令バイト(INS)。実行する命令を識別する。
bP1BYTE1+2+2APDUのパラメータ1(P1)。命令の引数を表す。
bP2BYTE1+3+3APDUのパラメータ2(P2)。命令の引数を表す。
bLCBYTE1+4+4APDUのデータ長(Lc)。送信データのバイト数を示す。
bCardIdBYTE6+5+5対象ICカードを識別する番号。
bProtocolBYTE1+11+11使用する通信プロトコルを示す値。
bCABroadcasterGroupIdBYTE1+12+12CA放送事業者グループを識別するID。
bMessageControlBYTE1+13+13EMGメッセージの制御フラグを示すバイト。
bMessageCodeBYTE1+14+14EMG(緊急メッセージ)のメッセージコード。

各言語での定義

#include <windows.h>

// BDA_ISDBCAS_EMG_REQ  (x64 15 / x86 15 バイト)
typedef struct BDA_ISDBCAS_EMG_REQ {
    BYTE bCLA;
    BYTE bINS;
    BYTE bP1;
    BYTE bP2;
    BYTE bLC;
    BYTE bCardId[6];
    BYTE bProtocol;
    BYTE bCABroadcasterGroupId;
    BYTE bMessageControl;
    BYTE bMessageCode[1];
} BDA_ISDBCAS_EMG_REQ;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct BDA_ISDBCAS_EMG_REQ
{
    public byte bCLA;
    public byte bINS;
    public byte bP1;
    public byte bP2;
    public byte bLC;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)] public byte[] bCardId;
    public byte bProtocol;
    public byte bCABroadcasterGroupId;
    public byte bMessageControl;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 1)] public byte[] bMessageCode;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure BDA_ISDBCAS_EMG_REQ
    Public bCLA As Byte
    Public bINS As Byte
    Public bP1 As Byte
    Public bP2 As Byte
    Public bLC As Byte
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=6)> Public bCardId() As Byte
    Public bProtocol As Byte
    Public bCABroadcasterGroupId As Byte
    Public bMessageControl As Byte
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=1)> Public bMessageCode() As Byte
End Structure
import ctypes
from ctypes import wintypes

class BDA_ISDBCAS_EMG_REQ(ctypes.Structure):
    _fields_ = [
        ("bCLA", ctypes.c_ubyte),
        ("bINS", ctypes.c_ubyte),
        ("bP1", ctypes.c_ubyte),
        ("bP2", ctypes.c_ubyte),
        ("bLC", ctypes.c_ubyte),
        ("bCardId", ctypes.c_ubyte * 6),
        ("bProtocol", ctypes.c_ubyte),
        ("bCABroadcasterGroupId", ctypes.c_ubyte),
        ("bMessageControl", ctypes.c_ubyte),
        ("bMessageCode", ctypes.c_ubyte * 1),
    ]
#[repr(C)]
pub struct BDA_ISDBCAS_EMG_REQ {
    pub bCLA: u8,
    pub bINS: u8,
    pub bP1: u8,
    pub bP2: u8,
    pub bLC: u8,
    pub bCardId: [u8; 6],
    pub bProtocol: u8,
    pub bCABroadcasterGroupId: u8,
    pub bMessageControl: u8,
    pub bMessageCode: [u8; 1],
}
import "golang.org/x/sys/windows"

type BDA_ISDBCAS_EMG_REQ struct {
	bCLA byte
	bINS byte
	bP1 byte
	bP2 byte
	bLC byte
	bCardId [6]byte
	bProtocol byte
	bCABroadcasterGroupId byte
	bMessageControl byte
	bMessageCode [1]byte
}
type
  BDA_ISDBCAS_EMG_REQ = record
    bCLA: Byte;
    bINS: Byte;
    bP1: Byte;
    bP2: Byte;
    bLC: Byte;
    bCardId: array[0..5] of Byte;
    bProtocol: Byte;
    bCABroadcasterGroupId: Byte;
    bMessageControl: Byte;
    bMessageCode: array[0..0] of Byte;
  end;
const BDA_ISDBCAS_EMG_REQ = extern struct {
    bCLA: u8,
    bINS: u8,
    bP1: u8,
    bP2: u8,
    bLC: u8,
    bCardId: [6]u8,
    bProtocol: u8,
    bCABroadcasterGroupId: u8,
    bMessageControl: u8,
    bMessageCode: [1]u8,
};
type
  BDA_ISDBCAS_EMG_REQ {.bycopy.} = object
    bCLA: uint8
    bINS: uint8
    bP1: uint8
    bP2: uint8
    bLC: uint8
    bCardId: array[6, uint8]
    bProtocol: uint8
    bCABroadcasterGroupId: uint8
    bMessageControl: uint8
    bMessageCode: array[1, uint8]
struct BDA_ISDBCAS_EMG_REQ
{
    ubyte bCLA;
    ubyte bINS;
    ubyte bP1;
    ubyte bP2;
    ubyte bLC;
    ubyte[6] bCardId;
    ubyte bProtocol;
    ubyte bCABroadcasterGroupId;
    ubyte bMessageControl;
    ubyte[1] bMessageCode;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; BDA_ISDBCAS_EMG_REQ サイズ: 15 バイト(x64)
dim st, 4    ; 4byte整数×4(構造体サイズ 15 / 4 切り上げ)
; bCLA : BYTE (+0, 1byte)  poke st,0,値  /  値 = peek(st,0)
; bINS : BYTE (+1, 1byte)  poke st,1,値  /  値 = peek(st,1)
; bP1 : BYTE (+2, 1byte)  poke st,2,値  /  値 = peek(st,2)
; bP2 : BYTE (+3, 1byte)  poke st,3,値  /  値 = peek(st,3)
; bLC : BYTE (+4, 1byte)  poke st,4,値  /  値 = peek(st,4)
; bCardId : BYTE (+5, 6byte)  varptr(st)+5 を基点に操作(6byte:入れ子/配列)
; bProtocol : BYTE (+11, 1byte)  poke st,11,値  /  値 = peek(st,11)
; bCABroadcasterGroupId : BYTE (+12, 1byte)  poke st,12,値  /  値 = peek(st,12)
; bMessageControl : BYTE (+13, 1byte)  poke st,13,値  /  値 = peek(st,13)
; bMessageCode : BYTE (+14, 1byte)  varptr(st)+14 を基点に操作(1byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global BDA_ISDBCAS_EMG_REQ
    #field byte bCLA
    #field byte bINS
    #field byte bP1
    #field byte bP2
    #field byte bLC
    #field byte bCardId 6
    #field byte bProtocol
    #field byte bCABroadcasterGroupId
    #field byte bMessageControl
    #field byte bMessageCode 1
#endstruct

stdim st, BDA_ISDBCAS_EMG_REQ        ; NSTRUCT 変数を確保
st->bCLA = 100
mes "bCLA=" + st->bCLA