Win32 API 日本語リファレンス
ホームNetworkManagement.QoS › WBCL_Iterator

WBCL_Iterator

構造体
サイズx64: 46 バイト / x86: 34 バイトパッキング1

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

フィールド

フィールドサイズx64x86説明
firstElementPtrvoid*8/4+0+0ログ内の先頭要素を指すポインタ。
logSizeDWORD4+8+4ログ全体のバイトサイズ。
currentElementPtrvoid*8/4+12+8現在の反復位置の要素を指すポインタ。
currentElementSizeDWORD4+20+12現在の要素のバイトサイズ。
digestSizeWORD2+24+16ダイジェスト(ハッシュ)のバイト長。
logFormatWORD2+26+18ログのフォーマット種別を示す値。
numberOfDigestsDWORD4+28+20要素あたりのダイジェスト数。
digestSizesvoid*8/4+32+24各ダイジェストのサイズ情報を指すポインタ。
supportedAlgorithmsDWORD4+40+28サポートするハッシュアルゴリズムのビットマスク。
hashAlgorithmWORD2+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 Structure
import 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: uint16
align(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