ホーム › NetworkManagement.QoS › WBCL_Iterator
WBCL_Iterator
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| firstElementPtr | void* | 8/4 | +0 | +0 | ログ内の先頭要素を指すポインタ。 |
| logSize | DWORD | 4 | +8 | +4 | ログ全体のバイトサイズ。 |
| currentElementPtr | void* | 8/4 | +12 | +8 | 現在の反復位置の要素を指すポインタ。 |
| currentElementSize | DWORD | 4 | +20 | +12 | 現在の要素のバイトサイズ。 |
| digestSize | WORD | 2 | +24 | +16 | ダイジェスト(ハッシュ)のバイト長。 |
| logFormat | WORD | 2 | +26 | +18 | ログのフォーマット種別を示す値。 |
| numberOfDigests | DWORD | 4 | +28 | +20 | 要素あたりのダイジェスト数。 |
| digestSizes | void* | 8/4 | +32 | +24 | 各ダイジェストのサイズ情報を指すポインタ。 |
| supportedAlgorithms | DWORD | 4 | +40 | +28 | サポートするハッシュアルゴリズムのビットマスク。 |
| hashAlgorithm | WORD | 2 | +44 | +32 | 使用するハッシュアルゴリズムを示すTPMアルゴリズムID。 |
各言語での定義
#include <windows.h>
// WBCL_Iterator (x64 46 / x86 34 バイト)
#pragma pack(push, 1)
typedef struct WBCL_Iterator {
void* firstElementPtr;
DWORD logSize;
void* currentElementPtr;
DWORD currentElementSize;
WORD digestSize;
WORD logFormat;
DWORD numberOfDigests;
void* digestSizes;
DWORD supportedAlgorithms;
WORD hashAlgorithm;
} WBCL_Iterator;
#pragma pack(pop)using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Unicode)]
public struct WBCL_Iterator
{
public IntPtr firstElementPtr;
public uint logSize;
public IntPtr currentElementPtr;
public uint currentElementSize;
public ushort digestSize;
public ushort logFormat;
public uint numberOfDigests;
public IntPtr digestSizes;
public uint supportedAlgorithms;
public ushort hashAlgorithm;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, Pack:=1, CharSet:=CharSet.Unicode)>
Public Structure WBCL_Iterator
Public firstElementPtr As IntPtr
Public logSize As UInteger
Public currentElementPtr As IntPtr
Public currentElementSize As UInteger
Public digestSize As UShort
Public logFormat As UShort
Public numberOfDigests As UInteger
Public digestSizes As IntPtr
Public supportedAlgorithms As UInteger
Public hashAlgorithm As UShort
End Structureimport ctypes
from ctypes import wintypes
class WBCL_Iterator(ctypes.Structure):
_pack_ = 1
_fields_ = [
("firstElementPtr", ctypes.c_void_p),
("logSize", wintypes.DWORD),
("currentElementPtr", ctypes.c_void_p),
("currentElementSize", wintypes.DWORD),
("digestSize", ctypes.c_ushort),
("logFormat", ctypes.c_ushort),
("numberOfDigests", wintypes.DWORD),
("digestSizes", ctypes.c_void_p),
("supportedAlgorithms", wintypes.DWORD),
("hashAlgorithm", ctypes.c_ushort),
]#[repr(C, packed(1))]
pub struct WBCL_Iterator {
pub firstElementPtr: *mut core::ffi::c_void,
pub logSize: u32,
pub currentElementPtr: *mut core::ffi::c_void,
pub currentElementSize: u32,
pub digestSize: u16,
pub logFormat: u16,
pub numberOfDigests: u32,
pub digestSizes: *mut core::ffi::c_void,
pub supportedAlgorithms: u32,
pub hashAlgorithm: u16,
}import "golang.org/x/sys/windows"
type WBCL_Iterator struct {
firstElementPtr uintptr
logSize uint32
currentElementPtr uintptr
currentElementSize uint32
digestSize uint16
logFormat uint16
numberOfDigests uint32
digestSizes uintptr
supportedAlgorithms uint32
hashAlgorithm uint16
}type
WBCL_Iterator = packed record
firstElementPtr: Pointer;
logSize: DWORD;
currentElementPtr: Pointer;
currentElementSize: DWORD;
digestSize: Word;
logFormat: Word;
numberOfDigests: DWORD;
digestSizes: Pointer;
supportedAlgorithms: DWORD;
hashAlgorithm: Word;
end;const WBCL_Iterator = extern struct {
firstElementPtr: ?*anyopaque,
logSize: u32,
currentElementPtr: ?*anyopaque,
currentElementSize: u32,
digestSize: u16,
logFormat: u16,
numberOfDigests: u32,
digestSizes: ?*anyopaque,
supportedAlgorithms: u32,
hashAlgorithm: u16,
};type
WBCL_Iterator {.packed.} = object
firstElementPtr: pointer
logSize: uint32
currentElementPtr: pointer
currentElementSize: uint32
digestSize: uint16
logFormat: uint16
numberOfDigests: uint32
digestSizes: pointer
supportedAlgorithms: uint32
hashAlgorithm: uint16align(1)
struct WBCL_Iterator
{
void* firstElementPtr;
uint logSize;
void* currentElementPtr;
uint currentElementSize;
ushort digestSize;
ushort logFormat;
uint numberOfDigests;
void* digestSizes;
uint supportedAlgorithms;
ushort hashAlgorithm;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; WBCL_Iterator サイズ: 34 バイト(x86)
dim st, 9 ; 4byte整数×9(構造体サイズ 34 / 4 切り上げ)
; firstElementPtr : void* (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; logSize : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; currentElementPtr : void* (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; currentElementSize : DWORD (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; digestSize : WORD (+16, 2byte) wpoke st,16,値 / 値 = wpeek(st,16)
; logFormat : WORD (+18, 2byte) wpoke st,18,値 / 値 = wpeek(st,18)
; numberOfDigests : DWORD (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; digestSizes : void* (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; supportedAlgorithms : DWORD (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; hashAlgorithm : WORD (+32, 2byte) wpoke st,32,値 / 値 = wpeek(st,32)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; WBCL_Iterator サイズ: 46 バイト(x64)
dim st, 12 ; 4byte整数×12(構造体サイズ 46 / 4 切り上げ)
; firstElementPtr : void* (+0, 8byte) qpoke st,0,値 / qpeek(st,0) ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; logSize : DWORD (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; currentElementPtr : void* (+12, 8byte) qpoke st,12,値 / qpeek(st,12) ※IronHSPのみ。3.7/3.8は lpoke st,12,下位 : lpoke st,16,上位
; currentElementSize : DWORD (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; digestSize : WORD (+24, 2byte) wpoke st,24,値 / 値 = wpeek(st,24)
; logFormat : WORD (+26, 2byte) wpoke st,26,値 / 値 = wpeek(st,26)
; numberOfDigests : DWORD (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; digestSizes : void* (+32, 8byte) qpoke st,32,値 / qpeek(st,32) ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; supportedAlgorithms : DWORD (+40, 4byte) st.10 = 値 / 値 = st.10 (lpoke/lpeek も可)
; hashAlgorithm : WORD (+44, 2byte) wpoke st,44,値 / 値 = wpeek(st,44)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global WBCL_Iterator, pack=1
#field intptr firstElementPtr
#field int logSize
#field intptr currentElementPtr
#field int currentElementSize
#field short digestSize
#field short logFormat
#field int numberOfDigests
#field intptr digestSizes
#field int supportedAlgorithms
#field short hashAlgorithm
#endstruct
stdim st, WBCL_Iterator ; NSTRUCT 変数を確保
st->logSize = 100
mes "logSize=" + st->logSize