Win32 API 日本語リファレンス
ホームNetworking.HttpServer › HTTP_LOG_FIELDS_DATA

HTTP_LOG_FIELDS_DATA

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

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

フィールド

フィールドサイズx64x86説明
BaseHTTP_LOG_DATA4+0+0ログデータ種別を示す基底のHTTP_LOG_DATAである。
UserNameLengthWORD2+4+4UserNameのバイト長(WORD)である。
UriStemLengthWORD2+6+6UriStemのバイト長(WORD)である。
ClientIpLengthWORD2+8+8ClientIpのバイト長(WORD)である。
ServerNameLengthWORD2+10+10ServerNameのバイト長(WORD)である。
ServiceNameLengthWORD2+12+12ServiceNameのバイト長(WORD)である。
ServerIpLengthWORD2+14+14ServerIpのバイト長(WORD)である。
MethodLengthWORD2+16+16Methodのバイト長(WORD)である。
UriQueryLengthWORD2+18+18UriQueryのバイト長(WORD)である。
HostLengthWORD2+20+20Hostのバイト長(WORD)である。
UserAgentLengthWORD2+22+22UserAgentのバイト長(WORD)である。
CookieLengthWORD2+24+24Cookieのバイト長(WORD)である。
ReferrerLengthWORD2+26+26Referrerのバイト長(WORD)である。
UserNameLPWSTR8/4+32+28認証済みユーザー名を示すワイド文字列ポインターである。
UriStemLPWSTR8/4+40+32要求URIのパス部分を示すワイド文字列ポインターである。
ClientIpLPSTR8/4+48+36クライアントのIPアドレスを示すANSI文字列ポインターである。
ServerNameLPSTR8/4+56+40サーバー名(コンピューター名)を示すANSI文字列ポインターである。
ServiceNameLPSTR8/4+64+44サービス名を示すANSI文字列ポインターである。
ServerIpLPSTR8/4+72+48サーバーのIPアドレスを示すANSI文字列ポインターである。
MethodLPSTR8/4+80+52HTTPメソッド名を示すANSI文字列ポインターである。
UriQueryLPSTR8/4+88+56要求URIのクエリ文字列を示すANSI文字列ポインターである。
HostLPSTR8/4+96+60Hostヘッダーの値を示すANSI文字列ポインターである。
UserAgentLPSTR8/4+104+64User-Agentヘッダーの値を示すANSI文字列ポインターである。
CookieLPSTR8/4+112+68Cookieヘッダーの値を示すANSI文字列ポインターである。
ReferrerLPSTR8/4+120+72Refererヘッダーの値を示すANSI文字列ポインターである。
ServerPortWORD2+128+76応答したサーバーのポート番号(WORD)である。
ProtocolStatusWORD2+130+78HTTP応答ステータスコード(WORD)である。
Win32StatusDWORD4+132+80処理結果のWin32ステータスコードである。0で成功。
MethodNumHTTP_VERB4+136+84HTTPメソッドを示すHTTP_VERB列挙値である。
SubStatusWORD2+140+88詳細なサブステータスコード(WORD)である。

各言語での定義

#include <windows.h>

// HTTP_LOG_DATA  (x64 4 / x86 4 バイト)
typedef struct HTTP_LOG_DATA {
    HTTP_LOG_DATA_TYPE Type;
} HTTP_LOG_DATA;

// HTTP_LOG_FIELDS_DATA  (x64 144 / x86 92 バイト)
typedef struct HTTP_LOG_FIELDS_DATA {
    HTTP_LOG_DATA Base;
    WORD UserNameLength;
    WORD UriStemLength;
    WORD ClientIpLength;
    WORD ServerNameLength;
    WORD ServiceNameLength;
    WORD ServerIpLength;
    WORD MethodLength;
    WORD UriQueryLength;
    WORD HostLength;
    WORD UserAgentLength;
    WORD CookieLength;
    WORD ReferrerLength;
    LPWSTR UserName;
    LPWSTR UriStem;
    LPSTR ClientIp;
    LPSTR ServerName;
    LPSTR ServiceName;
    LPSTR ServerIp;
    LPSTR Method;
    LPSTR UriQuery;
    LPSTR Host;
    LPSTR UserAgent;
    LPSTR Cookie;
    LPSTR Referrer;
    WORD ServerPort;
    WORD ProtocolStatus;
    DWORD Win32Status;
    HTTP_VERB MethodNum;
    WORD SubStatus;
} HTTP_LOG_FIELDS_DATA;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct HTTP_LOG_DATA
{
    public int Type;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct HTTP_LOG_FIELDS_DATA
{
    public HTTP_LOG_DATA Base;
    public ushort UserNameLength;
    public ushort UriStemLength;
    public ushort ClientIpLength;
    public ushort ServerNameLength;
    public ushort ServiceNameLength;
    public ushort ServerIpLength;
    public ushort MethodLength;
    public ushort UriQueryLength;
    public ushort HostLength;
    public ushort UserAgentLength;
    public ushort CookieLength;
    public ushort ReferrerLength;
    public IntPtr UserName;
    public IntPtr UriStem;
    public IntPtr ClientIp;
    public IntPtr ServerName;
    public IntPtr ServiceName;
    public IntPtr ServerIp;
    public IntPtr Method;
    public IntPtr UriQuery;
    public IntPtr Host;
    public IntPtr UserAgent;
    public IntPtr Cookie;
    public IntPtr Referrer;
    public ushort ServerPort;
    public ushort ProtocolStatus;
    public uint Win32Status;
    public int MethodNum;
    public ushort SubStatus;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure HTTP_LOG_DATA
    Public Type As Integer
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure HTTP_LOG_FIELDS_DATA
    Public Base As HTTP_LOG_DATA
    Public UserNameLength As UShort
    Public UriStemLength As UShort
    Public ClientIpLength As UShort
    Public ServerNameLength As UShort
    Public ServiceNameLength As UShort
    Public ServerIpLength As UShort
    Public MethodLength As UShort
    Public UriQueryLength As UShort
    Public HostLength As UShort
    Public UserAgentLength As UShort
    Public CookieLength As UShort
    Public ReferrerLength As UShort
    Public UserName As IntPtr
    Public UriStem As IntPtr
    Public ClientIp As IntPtr
    Public ServerName As IntPtr
    Public ServiceName As IntPtr
    Public ServerIp As IntPtr
    Public Method As IntPtr
    Public UriQuery As IntPtr
    Public Host As IntPtr
    Public UserAgent As IntPtr
    Public Cookie As IntPtr
    Public Referrer As IntPtr
    Public ServerPort As UShort
    Public ProtocolStatus As UShort
    Public Win32Status As UInteger
    Public MethodNum As Integer
    Public SubStatus As UShort
End Structure
import ctypes
from ctypes import wintypes

class HTTP_LOG_DATA(ctypes.Structure):
    _fields_ = [
        ("Type", ctypes.c_int),
    ]

class HTTP_LOG_FIELDS_DATA(ctypes.Structure):
    _fields_ = [
        ("Base", HTTP_LOG_DATA),
        ("UserNameLength", ctypes.c_ushort),
        ("UriStemLength", ctypes.c_ushort),
        ("ClientIpLength", ctypes.c_ushort),
        ("ServerNameLength", ctypes.c_ushort),
        ("ServiceNameLength", ctypes.c_ushort),
        ("ServerIpLength", ctypes.c_ushort),
        ("MethodLength", ctypes.c_ushort),
        ("UriQueryLength", ctypes.c_ushort),
        ("HostLength", ctypes.c_ushort),
        ("UserAgentLength", ctypes.c_ushort),
        ("CookieLength", ctypes.c_ushort),
        ("ReferrerLength", ctypes.c_ushort),
        ("UserName", ctypes.c_void_p),
        ("UriStem", ctypes.c_void_p),
        ("ClientIp", ctypes.c_void_p),
        ("ServerName", ctypes.c_void_p),
        ("ServiceName", ctypes.c_void_p),
        ("ServerIp", ctypes.c_void_p),
        ("Method", ctypes.c_void_p),
        ("UriQuery", ctypes.c_void_p),
        ("Host", ctypes.c_void_p),
        ("UserAgent", ctypes.c_void_p),
        ("Cookie", ctypes.c_void_p),
        ("Referrer", ctypes.c_void_p),
        ("ServerPort", ctypes.c_ushort),
        ("ProtocolStatus", ctypes.c_ushort),
        ("Win32Status", wintypes.DWORD),
        ("MethodNum", ctypes.c_int),
        ("SubStatus", ctypes.c_ushort),
    ]
#[repr(C)]
pub struct HTTP_LOG_DATA {
    pub Type: i32,
}

#[repr(C)]
pub struct HTTP_LOG_FIELDS_DATA {
    pub Base: HTTP_LOG_DATA,
    pub UserNameLength: u16,
    pub UriStemLength: u16,
    pub ClientIpLength: u16,
    pub ServerNameLength: u16,
    pub ServiceNameLength: u16,
    pub ServerIpLength: u16,
    pub MethodLength: u16,
    pub UriQueryLength: u16,
    pub HostLength: u16,
    pub UserAgentLength: u16,
    pub CookieLength: u16,
    pub ReferrerLength: u16,
    pub UserName: *mut core::ffi::c_void,
    pub UriStem: *mut core::ffi::c_void,
    pub ClientIp: *mut core::ffi::c_void,
    pub ServerName: *mut core::ffi::c_void,
    pub ServiceName: *mut core::ffi::c_void,
    pub ServerIp: *mut core::ffi::c_void,
    pub Method: *mut core::ffi::c_void,
    pub UriQuery: *mut core::ffi::c_void,
    pub Host: *mut core::ffi::c_void,
    pub UserAgent: *mut core::ffi::c_void,
    pub Cookie: *mut core::ffi::c_void,
    pub Referrer: *mut core::ffi::c_void,
    pub ServerPort: u16,
    pub ProtocolStatus: u16,
    pub Win32Status: u32,
    pub MethodNum: i32,
    pub SubStatus: u16,
}
import "golang.org/x/sys/windows"

type HTTP_LOG_DATA struct {
	Type int32
}

type HTTP_LOG_FIELDS_DATA struct {
	Base HTTP_LOG_DATA
	UserNameLength uint16
	UriStemLength uint16
	ClientIpLength uint16
	ServerNameLength uint16
	ServiceNameLength uint16
	ServerIpLength uint16
	MethodLength uint16
	UriQueryLength uint16
	HostLength uint16
	UserAgentLength uint16
	CookieLength uint16
	ReferrerLength uint16
	UserName uintptr
	UriStem uintptr
	ClientIp uintptr
	ServerName uintptr
	ServiceName uintptr
	ServerIp uintptr
	Method uintptr
	UriQuery uintptr
	Host uintptr
	UserAgent uintptr
	Cookie uintptr
	Referrer uintptr
	ServerPort uint16
	ProtocolStatus uint16
	Win32Status uint32
	MethodNum int32
	SubStatus uint16
}
type
  HTTP_LOG_DATA = record
    Type: Integer;
  end;

  HTTP_LOG_FIELDS_DATA = record
    Base: HTTP_LOG_DATA;
    UserNameLength: Word;
    UriStemLength: Word;
    ClientIpLength: Word;
    ServerNameLength: Word;
    ServiceNameLength: Word;
    ServerIpLength: Word;
    MethodLength: Word;
    UriQueryLength: Word;
    HostLength: Word;
    UserAgentLength: Word;
    CookieLength: Word;
    ReferrerLength: Word;
    UserName: Pointer;
    UriStem: Pointer;
    ClientIp: Pointer;
    ServerName: Pointer;
    ServiceName: Pointer;
    ServerIp: Pointer;
    Method: Pointer;
    UriQuery: Pointer;
    Host: Pointer;
    UserAgent: Pointer;
    Cookie: Pointer;
    Referrer: Pointer;
    ServerPort: Word;
    ProtocolStatus: Word;
    Win32Status: DWORD;
    MethodNum: Integer;
    SubStatus: Word;
  end;
const HTTP_LOG_DATA = extern struct {
    Type: i32,
};

const HTTP_LOG_FIELDS_DATA = extern struct {
    Base: HTTP_LOG_DATA,
    UserNameLength: u16,
    UriStemLength: u16,
    ClientIpLength: u16,
    ServerNameLength: u16,
    ServiceNameLength: u16,
    ServerIpLength: u16,
    MethodLength: u16,
    UriQueryLength: u16,
    HostLength: u16,
    UserAgentLength: u16,
    CookieLength: u16,
    ReferrerLength: u16,
    UserName: ?*anyopaque,
    UriStem: ?*anyopaque,
    ClientIp: ?*anyopaque,
    ServerName: ?*anyopaque,
    ServiceName: ?*anyopaque,
    ServerIp: ?*anyopaque,
    Method: ?*anyopaque,
    UriQuery: ?*anyopaque,
    Host: ?*anyopaque,
    UserAgent: ?*anyopaque,
    Cookie: ?*anyopaque,
    Referrer: ?*anyopaque,
    ServerPort: u16,
    ProtocolStatus: u16,
    Win32Status: u32,
    MethodNum: i32,
    SubStatus: u16,
};
type
  HTTP_LOG_DATA {.bycopy.} = object
    Type: int32

  HTTP_LOG_FIELDS_DATA {.bycopy.} = object
    Base: HTTP_LOG_DATA
    UserNameLength: uint16
    UriStemLength: uint16
    ClientIpLength: uint16
    ServerNameLength: uint16
    ServiceNameLength: uint16
    ServerIpLength: uint16
    MethodLength: uint16
    UriQueryLength: uint16
    HostLength: uint16
    UserAgentLength: uint16
    CookieLength: uint16
    ReferrerLength: uint16
    UserName: pointer
    UriStem: pointer
    ClientIp: pointer
    ServerName: pointer
    ServiceName: pointer
    ServerIp: pointer
    Method: pointer
    UriQuery: pointer
    Host: pointer
    UserAgent: pointer
    Cookie: pointer
    Referrer: pointer
    ServerPort: uint16
    ProtocolStatus: uint16
    Win32Status: uint32
    MethodNum: int32
    SubStatus: uint16
struct HTTP_LOG_DATA
{
    int Type;
}

struct HTTP_LOG_FIELDS_DATA
{
    HTTP_LOG_DATA Base;
    ushort UserNameLength;
    ushort UriStemLength;
    ushort ClientIpLength;
    ushort ServerNameLength;
    ushort ServiceNameLength;
    ushort ServerIpLength;
    ushort MethodLength;
    ushort UriQueryLength;
    ushort HostLength;
    ushort UserAgentLength;
    ushort CookieLength;
    ushort ReferrerLength;
    void* UserName;
    void* UriStem;
    void* ClientIp;
    void* ServerName;
    void* ServiceName;
    void* ServerIp;
    void* Method;
    void* UriQuery;
    void* Host;
    void* UserAgent;
    void* Cookie;
    void* Referrer;
    ushort ServerPort;
    ushort ProtocolStatus;
    uint Win32Status;
    int MethodNum;
    ushort SubStatus;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; HTTP_LOG_FIELDS_DATA サイズ: 92 バイト(x86)
dim st, 23    ; 4byte整数×23(構造体サイズ 92 / 4 切り上げ)
; Base : HTTP_LOG_DATA (+0, 4byte)  varptr(st)+0 を基点に操作(4byte:入れ子/配列)
; UserNameLength : WORD (+4, 2byte)  wpoke st,4,値  /  値 = wpeek(st,4)
; UriStemLength : WORD (+6, 2byte)  wpoke st,6,値  /  値 = wpeek(st,6)
; ClientIpLength : WORD (+8, 2byte)  wpoke st,8,値  /  値 = wpeek(st,8)
; ServerNameLength : WORD (+10, 2byte)  wpoke st,10,値  /  値 = wpeek(st,10)
; ServiceNameLength : WORD (+12, 2byte)  wpoke st,12,値  /  値 = wpeek(st,12)
; ServerIpLength : WORD (+14, 2byte)  wpoke st,14,値  /  値 = wpeek(st,14)
; MethodLength : WORD (+16, 2byte)  wpoke st,16,値  /  値 = wpeek(st,16)
; UriQueryLength : WORD (+18, 2byte)  wpoke st,18,値  /  値 = wpeek(st,18)
; HostLength : WORD (+20, 2byte)  wpoke st,20,値  /  値 = wpeek(st,20)
; UserAgentLength : WORD (+22, 2byte)  wpoke st,22,値  /  値 = wpeek(st,22)
; CookieLength : WORD (+24, 2byte)  wpoke st,24,値  /  値 = wpeek(st,24)
; ReferrerLength : WORD (+26, 2byte)  wpoke st,26,値  /  値 = wpeek(st,26)
; UserName : LPWSTR (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; UriStem : LPWSTR (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; ClientIp : LPSTR (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; ServerName : LPSTR (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; ServiceName : LPSTR (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; ServerIp : LPSTR (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; Method : LPSTR (+52, 4byte)  st.13 = 値  /  値 = st.13   (lpoke/lpeek も可)
; UriQuery : LPSTR (+56, 4byte)  st.14 = 値  /  値 = st.14   (lpoke/lpeek も可)
; Host : LPSTR (+60, 4byte)  st.15 = 値  /  値 = st.15   (lpoke/lpeek も可)
; UserAgent : LPSTR (+64, 4byte)  st.16 = 値  /  値 = st.16   (lpoke/lpeek も可)
; Cookie : LPSTR (+68, 4byte)  st.17 = 値  /  値 = st.17   (lpoke/lpeek も可)
; Referrer : LPSTR (+72, 4byte)  st.18 = 値  /  値 = st.18   (lpoke/lpeek も可)
; ServerPort : WORD (+76, 2byte)  wpoke st,76,値  /  値 = wpeek(st,76)
; ProtocolStatus : WORD (+78, 2byte)  wpoke st,78,値  /  値 = wpeek(st,78)
; Win32Status : DWORD (+80, 4byte)  st.20 = 値  /  値 = st.20   (lpoke/lpeek も可)
; MethodNum : HTTP_VERB (+84, 4byte)  st.21 = 値  /  値 = st.21   (lpoke/lpeek も可)
; SubStatus : WORD (+88, 2byte)  wpoke st,88,値  /  値 = wpeek(st,88)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; HTTP_LOG_FIELDS_DATA サイズ: 144 バイト(x64)
dim st, 36    ; 4byte整数×36(構造体サイズ 144 / 4 切り上げ)
; Base : HTTP_LOG_DATA (+0, 4byte)  varptr(st)+0 を基点に操作(4byte:入れ子/配列)
; UserNameLength : WORD (+4, 2byte)  wpoke st,4,値  /  値 = wpeek(st,4)
; UriStemLength : WORD (+6, 2byte)  wpoke st,6,値  /  値 = wpeek(st,6)
; ClientIpLength : WORD (+8, 2byte)  wpoke st,8,値  /  値 = wpeek(st,8)
; ServerNameLength : WORD (+10, 2byte)  wpoke st,10,値  /  値 = wpeek(st,10)
; ServiceNameLength : WORD (+12, 2byte)  wpoke st,12,値  /  値 = wpeek(st,12)
; ServerIpLength : WORD (+14, 2byte)  wpoke st,14,値  /  値 = wpeek(st,14)
; MethodLength : WORD (+16, 2byte)  wpoke st,16,値  /  値 = wpeek(st,16)
; UriQueryLength : WORD (+18, 2byte)  wpoke st,18,値  /  値 = wpeek(st,18)
; HostLength : WORD (+20, 2byte)  wpoke st,20,値  /  値 = wpeek(st,20)
; UserAgentLength : WORD (+22, 2byte)  wpoke st,22,値  /  値 = wpeek(st,22)
; CookieLength : WORD (+24, 2byte)  wpoke st,24,値  /  値 = wpeek(st,24)
; ReferrerLength : WORD (+26, 2byte)  wpoke st,26,値  /  値 = wpeek(st,26)
; UserName : LPWSTR (+32, 8byte)  qpoke st,32,値 / qpeek(st,32)  ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; UriStem : LPWSTR (+40, 8byte)  qpoke st,40,値 / qpeek(st,40)  ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; ClientIp : LPSTR (+48, 8byte)  qpoke st,48,値 / qpeek(st,48)  ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; ServerName : LPSTR (+56, 8byte)  qpoke st,56,値 / qpeek(st,56)  ※IronHSPのみ。3.7/3.8は lpoke st,56,下位 : lpoke st,60,上位
; ServiceName : LPSTR (+64, 8byte)  qpoke st,64,値 / qpeek(st,64)  ※IronHSPのみ。3.7/3.8は lpoke st,64,下位 : lpoke st,68,上位
; ServerIp : LPSTR (+72, 8byte)  qpoke st,72,値 / qpeek(st,72)  ※IronHSPのみ。3.7/3.8は lpoke st,72,下位 : lpoke st,76,上位
; Method : LPSTR (+80, 8byte)  qpoke st,80,値 / qpeek(st,80)  ※IronHSPのみ。3.7/3.8は lpoke st,80,下位 : lpoke st,84,上位
; UriQuery : LPSTR (+88, 8byte)  qpoke st,88,値 / qpeek(st,88)  ※IronHSPのみ。3.7/3.8は lpoke st,88,下位 : lpoke st,92,上位
; Host : LPSTR (+96, 8byte)  qpoke st,96,値 / qpeek(st,96)  ※IronHSPのみ。3.7/3.8は lpoke st,96,下位 : lpoke st,100,上位
; UserAgent : LPSTR (+104, 8byte)  qpoke st,104,値 / qpeek(st,104)  ※IronHSPのみ。3.7/3.8は lpoke st,104,下位 : lpoke st,108,上位
; Cookie : LPSTR (+112, 8byte)  qpoke st,112,値 / qpeek(st,112)  ※IronHSPのみ。3.7/3.8は lpoke st,112,下位 : lpoke st,116,上位
; Referrer : LPSTR (+120, 8byte)  qpoke st,120,値 / qpeek(st,120)  ※IronHSPのみ。3.7/3.8は lpoke st,120,下位 : lpoke st,124,上位
; ServerPort : WORD (+128, 2byte)  wpoke st,128,値  /  値 = wpeek(st,128)
; ProtocolStatus : WORD (+130, 2byte)  wpoke st,130,値  /  値 = wpeek(st,130)
; Win32Status : DWORD (+132, 4byte)  st.33 = 値  /  値 = st.33   (lpoke/lpeek も可)
; MethodNum : HTTP_VERB (+136, 4byte)  st.34 = 値  /  値 = st.34   (lpoke/lpeek も可)
; SubStatus : WORD (+140, 2byte)  wpoke st,140,値  /  値 = wpeek(st,140)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global HTTP_LOG_DATA
    #field int Type
#endstruct

#defstruct global HTTP_LOG_FIELDS_DATA
    #field HTTP_LOG_DATA Base
    #field short UserNameLength
    #field short UriStemLength
    #field short ClientIpLength
    #field short ServerNameLength
    #field short ServiceNameLength
    #field short ServerIpLength
    #field short MethodLength
    #field short UriQueryLength
    #field short HostLength
    #field short UserAgentLength
    #field short CookieLength
    #field short ReferrerLength
    #field intptr UserName
    #field intptr UriStem
    #field intptr ClientIp
    #field intptr ServerName
    #field intptr ServiceName
    #field intptr ServerIp
    #field intptr Method
    #field intptr UriQuery
    #field intptr Host
    #field intptr UserAgent
    #field intptr Cookie
    #field intptr Referrer
    #field short ServerPort
    #field short ProtocolStatus
    #field int Win32Status
    #field int MethodNum
    #field short SubStatus
#endstruct

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