ホーム › NetworkManagement.QoS › SIPAEVENT_SBCP_INFO_PAYLOAD_V1
SIPAEVENT_SBCP_INFO_PAYLOAD_V1
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| PayloadVersion | DWORD | 4 | +0 | +0 | ペイロードのバージョン番号。 |
| VarDataOffset | DWORD | 4 | +4 | +4 | 可変長データへのオフセットをバイト単位で示す値。 |
| HashAlgID | WORD | 2 | +8 | +8 | ダイジェストのハッシュアルゴリズムIDを示す値。 |
| DigestLength | WORD | 2 | +10 | +10 | ダイジェストのバイト長。 |
| Options | DWORD | 4 | +12 | +12 | SBCPに関するオプションフラグ。 |
| SignersCount | DWORD | 4 | +16 | +16 | 署名者の数。 |
| VarData | BYTE | 1 | +20 | +20 | 可変長データの先頭バイト。署名者情報等を含む。 |
各言語での定義
#include <windows.h>
// SIPAEVENT_SBCP_INFO_PAYLOAD_V1 (x64 21 / x86 21 バイト)
#pragma pack(push, 1)
typedef struct SIPAEVENT_SBCP_INFO_PAYLOAD_V1 {
DWORD PayloadVersion;
DWORD VarDataOffset;
WORD HashAlgID;
WORD DigestLength;
DWORD Options;
DWORD SignersCount;
BYTE VarData[1];
} SIPAEVENT_SBCP_INFO_PAYLOAD_V1;
#pragma pack(pop)using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Unicode)]
public struct SIPAEVENT_SBCP_INFO_PAYLOAD_V1
{
public uint PayloadVersion;
public uint VarDataOffset;
public ushort HashAlgID;
public ushort DigestLength;
public uint Options;
public uint SignersCount;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 1)] public byte[] VarData;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, Pack:=1, CharSet:=CharSet.Unicode)>
Public Structure SIPAEVENT_SBCP_INFO_PAYLOAD_V1
Public PayloadVersion As UInteger
Public VarDataOffset As UInteger
Public HashAlgID As UShort
Public DigestLength As UShort
Public Options As UInteger
Public SignersCount As UInteger
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=1)> Public VarData() As Byte
End Structureimport ctypes
from ctypes import wintypes
class SIPAEVENT_SBCP_INFO_PAYLOAD_V1(ctypes.Structure):
_pack_ = 1
_fields_ = [
("PayloadVersion", wintypes.DWORD),
("VarDataOffset", wintypes.DWORD),
("HashAlgID", ctypes.c_ushort),
("DigestLength", ctypes.c_ushort),
("Options", wintypes.DWORD),
("SignersCount", wintypes.DWORD),
("VarData", ctypes.c_ubyte * 1),
]#[repr(C, packed(1))]
pub struct SIPAEVENT_SBCP_INFO_PAYLOAD_V1 {
pub PayloadVersion: u32,
pub VarDataOffset: u32,
pub HashAlgID: u16,
pub DigestLength: u16,
pub Options: u32,
pub SignersCount: u32,
pub VarData: [u8; 1],
}import "golang.org/x/sys/windows"
type SIPAEVENT_SBCP_INFO_PAYLOAD_V1 struct {
PayloadVersion uint32
VarDataOffset uint32
HashAlgID uint16
DigestLength uint16
Options uint32
SignersCount uint32
VarData [1]byte
}type
SIPAEVENT_SBCP_INFO_PAYLOAD_V1 = packed record
PayloadVersion: DWORD;
VarDataOffset: DWORD;
HashAlgID: Word;
DigestLength: Word;
Options: DWORD;
SignersCount: DWORD;
VarData: array[0..0] of Byte;
end;const SIPAEVENT_SBCP_INFO_PAYLOAD_V1 = extern struct {
PayloadVersion: u32,
VarDataOffset: u32,
HashAlgID: u16,
DigestLength: u16,
Options: u32,
SignersCount: u32,
VarData: [1]u8,
};type
SIPAEVENT_SBCP_INFO_PAYLOAD_V1 {.packed.} = object
PayloadVersion: uint32
VarDataOffset: uint32
HashAlgID: uint16
DigestLength: uint16
Options: uint32
SignersCount: uint32
VarData: array[1, uint8]align(1)
struct SIPAEVENT_SBCP_INFO_PAYLOAD_V1
{
uint PayloadVersion;
uint VarDataOffset;
ushort HashAlgID;
ushort DigestLength;
uint Options;
uint SignersCount;
ubyte[1] VarData;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; SIPAEVENT_SBCP_INFO_PAYLOAD_V1 サイズ: 21 バイト(x64)
dim st, 6 ; 4byte整数×6(構造体サイズ 21 / 4 切り上げ)
; PayloadVersion : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; VarDataOffset : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; HashAlgID : WORD (+8, 2byte) wpoke st,8,値 / 値 = wpeek(st,8)
; DigestLength : WORD (+10, 2byte) wpoke st,10,値 / 値 = wpeek(st,10)
; Options : DWORD (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; SignersCount : DWORD (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; VarData : BYTE (+20, 1byte) varptr(st)+20 を基点に操作(1byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global SIPAEVENT_SBCP_INFO_PAYLOAD_V1, pack=1
#field int PayloadVersion
#field int VarDataOffset
#field short HashAlgID
#field short DigestLength
#field int Options
#field int SignersCount
#field byte VarData 1
#endstruct
stdim st, SIPAEVENT_SBCP_INFO_PAYLOAD_V1 ; NSTRUCT 変数を確保
st->PayloadVersion = 100
mes "PayloadVersion=" + st->PayloadVersion