HTTP_LOG_FIELDS_DATA
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| Base | HTTP_LOG_DATA | 4 | +0 | +0 | このメンバーは、HTTP_LOG_DATA_TYPE 列挙型の HttpLogDataTypeFields 値で初期化します。 |
| UserNameLength | WORD | 2 | +4 | +4 | ユーザー名メンバーのサイズ (バイト単位)。 |
| UriStemLength | WORD | 2 | +6 | +6 | URI ステムメンバーのサイズ (バイト単位)。 |
| ClientIpLength | WORD | 2 | +8 | +8 | クライアント IP アドレスメンバーのサイズ (バイト単位)。 |
| ServerNameLength | WORD | 2 | +10 | +10 | サーバー名メンバーのサイズ (バイト単位)。 |
| ServiceNameLength | WORD | 2 | +12 | +12 | ServiceNameのバイト長(WORD)である。 |
| ServerIpLength | WORD | 2 | +14 | +14 | サーバー IP アドレスメンバーのサイズ (バイト単位)。 |
| MethodLength | WORD | 2 | +16 | +16 | HTTP メソッドメンバーのサイズ (バイト単位)。 |
| UriQueryLength | WORD | 2 | +18 | +18 | URI クエリメンバーのサイズ (バイト単位)。 |
| HostLength | WORD | 2 | +20 | +20 | ホスト名メンバーのサイズ (バイト単位)。 |
| UserAgentLength | WORD | 2 | +22 | +22 | ユーザーエージェントメンバーのサイズ (バイト単位)。 |
| CookieLength | WORD | 2 | +24 | +24 | cookie メンバーのサイズ (バイト単位)。 |
| ReferrerLength | WORD | 2 | +26 | +26 | リファラーメンバーのサイズ (バイト単位)。 |
| UserName | LPWSTR | 8/4 | +32 | +28 | ユーザーの名前。 |
| UriStem | LPWSTR | 8/4 | +40 | +32 | URI ステム。 |
| ClientIp | LPSTR | 8/4 | +48 | +36 | クライアントの IP アドレス。 |
| ServerName | LPSTR | 8/4 | +56 | +40 | サーバーの名前。 |
| ServiceName | LPSTR | 8/4 | +64 | +44 | サービスの名前。 |
| ServerIp | LPSTR | 8/4 | +72 | +48 | サーバーの IP アドレス。 |
| Method | LPSTR | 8/4 | +80 | +52 | HTTP メソッド。 |
| UriQuery | LPSTR | 8/4 | +88 | +56 | URI クエリ。 |
| Host | LPSTR | 8/4 | +96 | +60 | 要求に含まれるホスト情報。 |
| UserAgent | LPSTR | 8/4 | +104 | +64 | ユーザーエージェント名。 |
| Cookie | LPSTR | 8/4 | +112 | +68 | アプリケーションが提供する cookie。 |
| Referrer | LPSTR | 8/4 | +120 | +72 | リファラー。 |
| ServerPort | WORD | 2 | +128 | +76 | サーバーのポート。 |
| ProtocolStatus | WORD | 2 | +130 | +78 | プロトコルの状態。 |
| Win32Status | DWORD | 4 | +132 | +80 | Win32 の状態。 |
| MethodNum | HTTP_VERB | 4 | +136 | +84 | メソッド番号。 |
| SubStatus | WORD | 2 | +140 | +88 | サブ状態。 |
公式ドキュメント
HTTP_LOG_FIELDS_DATA 構造体は、WC3 ログが有効な場合に、HTTP 応答に対してログ記録されるフィールドを渡すために使用します。
解説(Remarks)
HTTP_LOG_FIELDS_DATA 構造体は、HTTP バージョン 2.0 API 以降の HttpSendResponseEntityBody 関数および HttpSendHttpResponse 関数における省略可能なパラメーター (pLogData) です。HTTP_LOG_FIELDS_DATA 構造体は、応答のどのフィールドがログ記録されるかを指定します。
この構造体を渡さない限り、URL グループまたはサーバーセッションにサーバーのログ プロパティが設定されている場合でも、応答はログ記録されません。アプリケーションが各応答と共に HTTP_LOG_FIELDS_DATA 構造体を渡し、かつサーバーセッションまたは URL グループにログ プロパティが設定されていない限り、要求はログ記録されません。HTTP_LOG_FIELDS_DATA 構造体のほとんどのフィールドは、HTTP_REQUEST 構造体の対応するフィールドから初期化できますが、一部のログフィールドはアプリケーションのみが把握しています (たとえば Win32Status や SubStatus)。この構造体により、アプリケーションはログ記録されるフィールドを変更できます。特定のフィールドのログ記録を無効にするには、アプリケーションが対応するメンバーに NULL ポインターと長さ 0 を渡します。
アプリケーションは、最後の送信呼び出しで HTTP_LOG_FIELDS_DATA 構造体を指定しなければなりません。HttpSendHttpResponse の 1 回の呼び出しで応答を送信する場合は、その呼び出しでログデータを指定する必要があります。複数回の送信呼び出しに分けて応答を送信する場合は、最後の HttpSendResponseEntityBody の呼び出しでデータを指定する必要があります。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での定義
#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 Structureimport 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: uint16struct 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