Win32 API 日本語リファレンス
ホームSecurity.Authentication.Identity › SECURITY_LOGON_SESSION_DATA

SECURITY_LOGON_SESSION_DATA

構造体
サイズx64: 272 バイト / x86: 184 バイト

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

フィールド

フィールドサイズx64x86説明
SizeDWORD4+0+0この構造体のサイズをバイト単位で示す。
LogonIdLUID8+4+4ログオンセッションを一意に識別するLUID。
UserNameLSA_UNICODE_STRING16/8+16+12ログオンしたユーザー名(LSA_UNICODE_STRING)。
LogonDomainLSA_UNICODE_STRING16/8+32+20ユーザーのログオンドメイン名(LSA_UNICODE_STRING)。
AuthenticationPackageLSA_UNICODE_STRING16/8+48+28認証に使用された認証パッケージ名(LSA_UNICODE_STRING)。
LogonTypeDWORD4+64+36ログオン種別(対話/ネットワーク/サービス等)を示す値。
SessionDWORD4+68+40ターミナルサービスのセッションID。
SidPSID8/4+72+44ユーザーのSID。
LogonTimeLONGLONG8+80+48ログオン日時(100ナノ秒単位)。
LogonServerLSA_UNICODE_STRING16/8+88+56認証を行ったサーバーの名前(LSA_UNICODE_STRING)。
DnsDomainNameLSA_UNICODE_STRING16/8+104+64ユーザーのDNSドメイン名(LSA_UNICODE_STRING)。
UpnLSA_UNICODE_STRING16/8+120+72ユーザープリンシパル名(LSA_UNICODE_STRING)。
UserFlagsDWORD4+136+80ユーザーログオンに関するフラグ。
LastLogonInfoLSA_LAST_INTER_LOGON_INFO24+144+88前回ログオン情報(成功/失敗時刻等)。
LogonScriptLSA_UNICODE_STRING16/8+168+112ログオンスクリプトのパス(LSA_UNICODE_STRING)。
ProfilePathLSA_UNICODE_STRING16/8+184+120ユーザープロファイルのパス(LSA_UNICODE_STRING)。
HomeDirectoryLSA_UNICODE_STRING16/8+200+128ホームディレクトリのパス(LSA_UNICODE_STRING)。
HomeDirectoryDriveLSA_UNICODE_STRING16/8+216+136ホームディレクトリのドライブ文字(LSA_UNICODE_STRING)。
LogoffTimeLONGLONG8+232+144強制ログオフ予定日時(100ナノ秒単位)。
KickOffTimeLONGLONG8+240+152強制切断予定日時(100ナノ秒単位)。
PasswordLastSetLONGLONG8+248+160パスワードが最後に設定された日時(100ナノ秒単位)。
PasswordCanChangeLONGLONG8+256+168パスワードを変更可能になる日時(100ナノ秒単位)。
PasswordMustChangeLONGLONG8+264+176パスワード変更が必須となる日時(100ナノ秒単位)。

各言語での定義

#include <windows.h>

// LUID  (x64 8 / x86 8 バイト)
typedef struct LUID {
    DWORD LowPart;
    INT HighPart;
} LUID;

// LSA_UNICODE_STRING  (x64 16 / x86 8 バイト)
typedef struct LSA_UNICODE_STRING {
    WORD Length;
    WORD MaximumLength;
    LPWSTR Buffer;
} LSA_UNICODE_STRING;

// LSA_LAST_INTER_LOGON_INFO  (x64 24 / x86 24 バイト)
typedef struct LSA_LAST_INTER_LOGON_INFO {
    LONGLONG LastSuccessfulLogon;
    LONGLONG LastFailedLogon;
    DWORD FailedAttemptCountSinceLastSuccessfulLogon;
} LSA_LAST_INTER_LOGON_INFO;

// SECURITY_LOGON_SESSION_DATA  (x64 272 / x86 184 バイト)
typedef struct SECURITY_LOGON_SESSION_DATA {
    DWORD Size;
    LUID LogonId;
    LSA_UNICODE_STRING UserName;
    LSA_UNICODE_STRING LogonDomain;
    LSA_UNICODE_STRING AuthenticationPackage;
    DWORD LogonType;
    DWORD Session;
    PSID Sid;
    LONGLONG LogonTime;
    LSA_UNICODE_STRING LogonServer;
    LSA_UNICODE_STRING DnsDomainName;
    LSA_UNICODE_STRING Upn;
    DWORD UserFlags;
    LSA_LAST_INTER_LOGON_INFO LastLogonInfo;
    LSA_UNICODE_STRING LogonScript;
    LSA_UNICODE_STRING ProfilePath;
    LSA_UNICODE_STRING HomeDirectory;
    LSA_UNICODE_STRING HomeDirectoryDrive;
    LONGLONG LogoffTime;
    LONGLONG KickOffTime;
    LONGLONG PasswordLastSet;
    LONGLONG PasswordCanChange;
    LONGLONG PasswordMustChange;
} SECURITY_LOGON_SESSION_DATA;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct LUID
{
    public uint LowPart;
    public int HighPart;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct LSA_UNICODE_STRING
{
    public ushort Length;
    public ushort MaximumLength;
    public IntPtr Buffer;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct LSA_LAST_INTER_LOGON_INFO
{
    public long LastSuccessfulLogon;
    public long LastFailedLogon;
    public uint FailedAttemptCountSinceLastSuccessfulLogon;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct SECURITY_LOGON_SESSION_DATA
{
    public uint Size;
    public LUID LogonId;
    public LSA_UNICODE_STRING UserName;
    public LSA_UNICODE_STRING LogonDomain;
    public LSA_UNICODE_STRING AuthenticationPackage;
    public uint LogonType;
    public uint Session;
    public IntPtr Sid;
    public long LogonTime;
    public LSA_UNICODE_STRING LogonServer;
    public LSA_UNICODE_STRING DnsDomainName;
    public LSA_UNICODE_STRING Upn;
    public uint UserFlags;
    public LSA_LAST_INTER_LOGON_INFO LastLogonInfo;
    public LSA_UNICODE_STRING LogonScript;
    public LSA_UNICODE_STRING ProfilePath;
    public LSA_UNICODE_STRING HomeDirectory;
    public LSA_UNICODE_STRING HomeDirectoryDrive;
    public long LogoffTime;
    public long KickOffTime;
    public long PasswordLastSet;
    public long PasswordCanChange;
    public long PasswordMustChange;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure LUID
    Public LowPart As UInteger
    Public HighPart As Integer
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure LSA_UNICODE_STRING
    Public Length As UShort
    Public MaximumLength As UShort
    Public Buffer As IntPtr
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure LSA_LAST_INTER_LOGON_INFO
    Public LastSuccessfulLogon As Long
    Public LastFailedLogon As Long
    Public FailedAttemptCountSinceLastSuccessfulLogon As UInteger
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure SECURITY_LOGON_SESSION_DATA
    Public Size As UInteger
    Public LogonId As LUID
    Public UserName As LSA_UNICODE_STRING
    Public LogonDomain As LSA_UNICODE_STRING
    Public AuthenticationPackage As LSA_UNICODE_STRING
    Public LogonType As UInteger
    Public Session As UInteger
    Public Sid As IntPtr
    Public LogonTime As Long
    Public LogonServer As LSA_UNICODE_STRING
    Public DnsDomainName As LSA_UNICODE_STRING
    Public Upn As LSA_UNICODE_STRING
    Public UserFlags As UInteger
    Public LastLogonInfo As LSA_LAST_INTER_LOGON_INFO
    Public LogonScript As LSA_UNICODE_STRING
    Public ProfilePath As LSA_UNICODE_STRING
    Public HomeDirectory As LSA_UNICODE_STRING
    Public HomeDirectoryDrive As LSA_UNICODE_STRING
    Public LogoffTime As Long
    Public KickOffTime As Long
    Public PasswordLastSet As Long
    Public PasswordCanChange As Long
    Public PasswordMustChange As Long
End Structure
import ctypes
from ctypes import wintypes

class LUID(ctypes.Structure):
    _fields_ = [
        ("LowPart", wintypes.DWORD),
        ("HighPart", ctypes.c_int),
    ]

class LSA_UNICODE_STRING(ctypes.Structure):
    _fields_ = [
        ("Length", ctypes.c_ushort),
        ("MaximumLength", ctypes.c_ushort),
        ("Buffer", ctypes.c_void_p),
    ]

class LSA_LAST_INTER_LOGON_INFO(ctypes.Structure):
    _fields_ = [
        ("LastSuccessfulLogon", ctypes.c_longlong),
        ("LastFailedLogon", ctypes.c_longlong),
        ("FailedAttemptCountSinceLastSuccessfulLogon", wintypes.DWORD),
    ]

class SECURITY_LOGON_SESSION_DATA(ctypes.Structure):
    _fields_ = [
        ("Size", wintypes.DWORD),
        ("LogonId", LUID),
        ("UserName", LSA_UNICODE_STRING),
        ("LogonDomain", LSA_UNICODE_STRING),
        ("AuthenticationPackage", LSA_UNICODE_STRING),
        ("LogonType", wintypes.DWORD),
        ("Session", wintypes.DWORD),
        ("Sid", ctypes.c_void_p),
        ("LogonTime", ctypes.c_longlong),
        ("LogonServer", LSA_UNICODE_STRING),
        ("DnsDomainName", LSA_UNICODE_STRING),
        ("Upn", LSA_UNICODE_STRING),
        ("UserFlags", wintypes.DWORD),
        ("LastLogonInfo", LSA_LAST_INTER_LOGON_INFO),
        ("LogonScript", LSA_UNICODE_STRING),
        ("ProfilePath", LSA_UNICODE_STRING),
        ("HomeDirectory", LSA_UNICODE_STRING),
        ("HomeDirectoryDrive", LSA_UNICODE_STRING),
        ("LogoffTime", ctypes.c_longlong),
        ("KickOffTime", ctypes.c_longlong),
        ("PasswordLastSet", ctypes.c_longlong),
        ("PasswordCanChange", ctypes.c_longlong),
        ("PasswordMustChange", ctypes.c_longlong),
    ]
#[repr(C)]
pub struct LUID {
    pub LowPart: u32,
    pub HighPart: i32,
}

#[repr(C)]
pub struct LSA_UNICODE_STRING {
    pub Length: u16,
    pub MaximumLength: u16,
    pub Buffer: *mut core::ffi::c_void,
}

#[repr(C)]
pub struct LSA_LAST_INTER_LOGON_INFO {
    pub LastSuccessfulLogon: i64,
    pub LastFailedLogon: i64,
    pub FailedAttemptCountSinceLastSuccessfulLogon: u32,
}

#[repr(C)]
pub struct SECURITY_LOGON_SESSION_DATA {
    pub Size: u32,
    pub LogonId: LUID,
    pub UserName: LSA_UNICODE_STRING,
    pub LogonDomain: LSA_UNICODE_STRING,
    pub AuthenticationPackage: LSA_UNICODE_STRING,
    pub LogonType: u32,
    pub Session: u32,
    pub Sid: *mut core::ffi::c_void,
    pub LogonTime: i64,
    pub LogonServer: LSA_UNICODE_STRING,
    pub DnsDomainName: LSA_UNICODE_STRING,
    pub Upn: LSA_UNICODE_STRING,
    pub UserFlags: u32,
    pub LastLogonInfo: LSA_LAST_INTER_LOGON_INFO,
    pub LogonScript: LSA_UNICODE_STRING,
    pub ProfilePath: LSA_UNICODE_STRING,
    pub HomeDirectory: LSA_UNICODE_STRING,
    pub HomeDirectoryDrive: LSA_UNICODE_STRING,
    pub LogoffTime: i64,
    pub KickOffTime: i64,
    pub PasswordLastSet: i64,
    pub PasswordCanChange: i64,
    pub PasswordMustChange: i64,
}
import "golang.org/x/sys/windows"

type LUID struct {
	LowPart uint32
	HighPart int32
}

type LSA_UNICODE_STRING struct {
	Length uint16
	MaximumLength uint16
	Buffer uintptr
}

type LSA_LAST_INTER_LOGON_INFO struct {
	LastSuccessfulLogon int64
	LastFailedLogon int64
	FailedAttemptCountSinceLastSuccessfulLogon uint32
}

type SECURITY_LOGON_SESSION_DATA struct {
	Size uint32
	LogonId LUID
	UserName LSA_UNICODE_STRING
	LogonDomain LSA_UNICODE_STRING
	AuthenticationPackage LSA_UNICODE_STRING
	LogonType uint32
	Session uint32
	Sid uintptr
	LogonTime int64
	LogonServer LSA_UNICODE_STRING
	DnsDomainName LSA_UNICODE_STRING
	Upn LSA_UNICODE_STRING
	UserFlags uint32
	LastLogonInfo LSA_LAST_INTER_LOGON_INFO
	LogonScript LSA_UNICODE_STRING
	ProfilePath LSA_UNICODE_STRING
	HomeDirectory LSA_UNICODE_STRING
	HomeDirectoryDrive LSA_UNICODE_STRING
	LogoffTime int64
	KickOffTime int64
	PasswordLastSet int64
	PasswordCanChange int64
	PasswordMustChange int64
}
type
  LUID = record
    LowPart: DWORD;
    HighPart: Integer;
  end;

  LSA_UNICODE_STRING = record
    Length: Word;
    MaximumLength: Word;
    Buffer: Pointer;
  end;

  LSA_LAST_INTER_LOGON_INFO = record
    LastSuccessfulLogon: Int64;
    LastFailedLogon: Int64;
    FailedAttemptCountSinceLastSuccessfulLogon: DWORD;
  end;

  SECURITY_LOGON_SESSION_DATA = record
    Size: DWORD;
    LogonId: LUID;
    UserName: LSA_UNICODE_STRING;
    LogonDomain: LSA_UNICODE_STRING;
    AuthenticationPackage: LSA_UNICODE_STRING;
    LogonType: DWORD;
    Session: DWORD;
    Sid: Pointer;
    LogonTime: Int64;
    LogonServer: LSA_UNICODE_STRING;
    DnsDomainName: LSA_UNICODE_STRING;
    Upn: LSA_UNICODE_STRING;
    UserFlags: DWORD;
    LastLogonInfo: LSA_LAST_INTER_LOGON_INFO;
    LogonScript: LSA_UNICODE_STRING;
    ProfilePath: LSA_UNICODE_STRING;
    HomeDirectory: LSA_UNICODE_STRING;
    HomeDirectoryDrive: LSA_UNICODE_STRING;
    LogoffTime: Int64;
    KickOffTime: Int64;
    PasswordLastSet: Int64;
    PasswordCanChange: Int64;
    PasswordMustChange: Int64;
  end;
const LUID = extern struct {
    LowPart: u32,
    HighPart: i32,
};

const LSA_UNICODE_STRING = extern struct {
    Length: u16,
    MaximumLength: u16,
    Buffer: ?*anyopaque,
};

const LSA_LAST_INTER_LOGON_INFO = extern struct {
    LastSuccessfulLogon: i64,
    LastFailedLogon: i64,
    FailedAttemptCountSinceLastSuccessfulLogon: u32,
};

const SECURITY_LOGON_SESSION_DATA = extern struct {
    Size: u32,
    LogonId: LUID,
    UserName: LSA_UNICODE_STRING,
    LogonDomain: LSA_UNICODE_STRING,
    AuthenticationPackage: LSA_UNICODE_STRING,
    LogonType: u32,
    Session: u32,
    Sid: ?*anyopaque,
    LogonTime: i64,
    LogonServer: LSA_UNICODE_STRING,
    DnsDomainName: LSA_UNICODE_STRING,
    Upn: LSA_UNICODE_STRING,
    UserFlags: u32,
    LastLogonInfo: LSA_LAST_INTER_LOGON_INFO,
    LogonScript: LSA_UNICODE_STRING,
    ProfilePath: LSA_UNICODE_STRING,
    HomeDirectory: LSA_UNICODE_STRING,
    HomeDirectoryDrive: LSA_UNICODE_STRING,
    LogoffTime: i64,
    KickOffTime: i64,
    PasswordLastSet: i64,
    PasswordCanChange: i64,
    PasswordMustChange: i64,
};
type
  LUID {.bycopy.} = object
    LowPart: uint32
    HighPart: int32

  LSA_UNICODE_STRING {.bycopy.} = object
    Length: uint16
    MaximumLength: uint16
    Buffer: pointer

  LSA_LAST_INTER_LOGON_INFO {.bycopy.} = object
    LastSuccessfulLogon: int64
    LastFailedLogon: int64
    FailedAttemptCountSinceLastSuccessfulLogon: uint32

  SECURITY_LOGON_SESSION_DATA {.bycopy.} = object
    Size: uint32
    LogonId: LUID
    UserName: LSA_UNICODE_STRING
    LogonDomain: LSA_UNICODE_STRING
    AuthenticationPackage: LSA_UNICODE_STRING
    LogonType: uint32
    Session: uint32
    Sid: pointer
    LogonTime: int64
    LogonServer: LSA_UNICODE_STRING
    DnsDomainName: LSA_UNICODE_STRING
    Upn: LSA_UNICODE_STRING
    UserFlags: uint32
    LastLogonInfo: LSA_LAST_INTER_LOGON_INFO
    LogonScript: LSA_UNICODE_STRING
    ProfilePath: LSA_UNICODE_STRING
    HomeDirectory: LSA_UNICODE_STRING
    HomeDirectoryDrive: LSA_UNICODE_STRING
    LogoffTime: int64
    KickOffTime: int64
    PasswordLastSet: int64
    PasswordCanChange: int64
    PasswordMustChange: int64
struct LUID
{
    uint LowPart;
    int HighPart;
}

struct LSA_UNICODE_STRING
{
    ushort Length;
    ushort MaximumLength;
    void* Buffer;
}

struct LSA_LAST_INTER_LOGON_INFO
{
    long LastSuccessfulLogon;
    long LastFailedLogon;
    uint FailedAttemptCountSinceLastSuccessfulLogon;
}

struct SECURITY_LOGON_SESSION_DATA
{
    uint Size;
    LUID LogonId;
    LSA_UNICODE_STRING UserName;
    LSA_UNICODE_STRING LogonDomain;
    LSA_UNICODE_STRING AuthenticationPackage;
    uint LogonType;
    uint Session;
    void* Sid;
    long LogonTime;
    LSA_UNICODE_STRING LogonServer;
    LSA_UNICODE_STRING DnsDomainName;
    LSA_UNICODE_STRING Upn;
    uint UserFlags;
    LSA_LAST_INTER_LOGON_INFO LastLogonInfo;
    LSA_UNICODE_STRING LogonScript;
    LSA_UNICODE_STRING ProfilePath;
    LSA_UNICODE_STRING HomeDirectory;
    LSA_UNICODE_STRING HomeDirectoryDrive;
    long LogoffTime;
    long KickOffTime;
    long PasswordLastSet;
    long PasswordCanChange;
    long PasswordMustChange;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; SECURITY_LOGON_SESSION_DATA サイズ: 184 バイト(x86)
dim st, 46    ; 4byte整数×46(構造体サイズ 184 / 4 切り上げ)
; Size : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; LogonId : LUID (+4, 8byte)  varptr(st)+4 を基点に操作(8byte:入れ子/配列)
; UserName : LSA_UNICODE_STRING (+12, 8byte)  varptr(st)+12 を基点に操作(8byte:入れ子/配列)
; LogonDomain : LSA_UNICODE_STRING (+20, 8byte)  varptr(st)+20 を基点に操作(8byte:入れ子/配列)
; AuthenticationPackage : LSA_UNICODE_STRING (+28, 8byte)  varptr(st)+28 を基点に操作(8byte:入れ子/配列)
; LogonType : DWORD (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; Session : DWORD (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; Sid : PSID (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; LogonTime : LONGLONG (+48, 8byte)  qpoke st,48,値 / qpeek(st,48)  ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; LogonServer : LSA_UNICODE_STRING (+56, 8byte)  varptr(st)+56 を基点に操作(8byte:入れ子/配列)
; DnsDomainName : LSA_UNICODE_STRING (+64, 8byte)  varptr(st)+64 を基点に操作(8byte:入れ子/配列)
; Upn : LSA_UNICODE_STRING (+72, 8byte)  varptr(st)+72 を基点に操作(8byte:入れ子/配列)
; UserFlags : DWORD (+80, 4byte)  st.20 = 値  /  値 = st.20   (lpoke/lpeek も可)
; LastLogonInfo : LSA_LAST_INTER_LOGON_INFO (+88, 24byte)  varptr(st)+88 を基点に操作(24byte:入れ子/配列)
; LogonScript : LSA_UNICODE_STRING (+112, 8byte)  varptr(st)+112 を基点に操作(8byte:入れ子/配列)
; ProfilePath : LSA_UNICODE_STRING (+120, 8byte)  varptr(st)+120 を基点に操作(8byte:入れ子/配列)
; HomeDirectory : LSA_UNICODE_STRING (+128, 8byte)  varptr(st)+128 を基点に操作(8byte:入れ子/配列)
; HomeDirectoryDrive : LSA_UNICODE_STRING (+136, 8byte)  varptr(st)+136 を基点に操作(8byte:入れ子/配列)
; LogoffTime : LONGLONG (+144, 8byte)  qpoke st,144,値 / qpeek(st,144)  ※IronHSPのみ。3.7/3.8は lpoke st,144,下位 : lpoke st,148,上位
; KickOffTime : LONGLONG (+152, 8byte)  qpoke st,152,値 / qpeek(st,152)  ※IronHSPのみ。3.7/3.8は lpoke st,152,下位 : lpoke st,156,上位
; PasswordLastSet : LONGLONG (+160, 8byte)  qpoke st,160,値 / qpeek(st,160)  ※IronHSPのみ。3.7/3.8は lpoke st,160,下位 : lpoke st,164,上位
; PasswordCanChange : LONGLONG (+168, 8byte)  qpoke st,168,値 / qpeek(st,168)  ※IronHSPのみ。3.7/3.8は lpoke st,168,下位 : lpoke st,172,上位
; PasswordMustChange : LONGLONG (+176, 8byte)  qpoke st,176,値 / qpeek(st,176)  ※IronHSPのみ。3.7/3.8は lpoke st,176,下位 : lpoke st,180,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; SECURITY_LOGON_SESSION_DATA サイズ: 272 バイト(x64)
dim st, 68    ; 4byte整数×68(構造体サイズ 272 / 4 切り上げ)
; Size : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; LogonId : LUID (+4, 8byte)  varptr(st)+4 を基点に操作(8byte:入れ子/配列)
; UserName : LSA_UNICODE_STRING (+16, 16byte)  varptr(st)+16 を基点に操作(16byte:入れ子/配列)
; LogonDomain : LSA_UNICODE_STRING (+32, 16byte)  varptr(st)+32 を基点に操作(16byte:入れ子/配列)
; AuthenticationPackage : LSA_UNICODE_STRING (+48, 16byte)  varptr(st)+48 を基点に操作(16byte:入れ子/配列)
; LogonType : DWORD (+64, 4byte)  st.16 = 値  /  値 = st.16   (lpoke/lpeek も可)
; Session : DWORD (+68, 4byte)  st.17 = 値  /  値 = st.17   (lpoke/lpeek も可)
; Sid : PSID (+72, 8byte)  qpoke st,72,値 / qpeek(st,72)  ※IronHSPのみ。3.7/3.8は lpoke st,72,下位 : lpoke st,76,上位
; LogonTime : LONGLONG (+80, 8byte)  qpoke st,80,値 / qpeek(st,80)  ※IronHSPのみ。3.7/3.8は lpoke st,80,下位 : lpoke st,84,上位
; LogonServer : LSA_UNICODE_STRING (+88, 16byte)  varptr(st)+88 を基点に操作(16byte:入れ子/配列)
; DnsDomainName : LSA_UNICODE_STRING (+104, 16byte)  varptr(st)+104 を基点に操作(16byte:入れ子/配列)
; Upn : LSA_UNICODE_STRING (+120, 16byte)  varptr(st)+120 を基点に操作(16byte:入れ子/配列)
; UserFlags : DWORD (+136, 4byte)  st.34 = 値  /  値 = st.34   (lpoke/lpeek も可)
; LastLogonInfo : LSA_LAST_INTER_LOGON_INFO (+144, 24byte)  varptr(st)+144 を基点に操作(24byte:入れ子/配列)
; LogonScript : LSA_UNICODE_STRING (+168, 16byte)  varptr(st)+168 を基点に操作(16byte:入れ子/配列)
; ProfilePath : LSA_UNICODE_STRING (+184, 16byte)  varptr(st)+184 を基点に操作(16byte:入れ子/配列)
; HomeDirectory : LSA_UNICODE_STRING (+200, 16byte)  varptr(st)+200 を基点に操作(16byte:入れ子/配列)
; HomeDirectoryDrive : LSA_UNICODE_STRING (+216, 16byte)  varptr(st)+216 を基点に操作(16byte:入れ子/配列)
; LogoffTime : LONGLONG (+232, 8byte)  qpoke st,232,値 / qpeek(st,232)  ※IronHSPのみ。3.7/3.8は lpoke st,232,下位 : lpoke st,236,上位
; KickOffTime : LONGLONG (+240, 8byte)  qpoke st,240,値 / qpeek(st,240)  ※IronHSPのみ。3.7/3.8は lpoke st,240,下位 : lpoke st,244,上位
; PasswordLastSet : LONGLONG (+248, 8byte)  qpoke st,248,値 / qpeek(st,248)  ※IronHSPのみ。3.7/3.8は lpoke st,248,下位 : lpoke st,252,上位
; PasswordCanChange : LONGLONG (+256, 8byte)  qpoke st,256,値 / qpeek(st,256)  ※IronHSPのみ。3.7/3.8は lpoke st,256,下位 : lpoke st,260,上位
; PasswordMustChange : LONGLONG (+264, 8byte)  qpoke st,264,値 / qpeek(st,264)  ※IronHSPのみ。3.7/3.8は lpoke st,264,下位 : lpoke st,268,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global LUID
    #field int LowPart
    #field int HighPart
#endstruct

#defstruct global LSA_UNICODE_STRING
    #field short Length
    #field short MaximumLength
    #field intptr Buffer
#endstruct

#defstruct global LSA_LAST_INTER_LOGON_INFO
    #field int64 LastSuccessfulLogon
    #field int64 LastFailedLogon
    #field int FailedAttemptCountSinceLastSuccessfulLogon
#endstruct

#defstruct global SECURITY_LOGON_SESSION_DATA
    #field int Size
    #field LUID LogonId
    #field LSA_UNICODE_STRING UserName
    #field LSA_UNICODE_STRING LogonDomain
    #field LSA_UNICODE_STRING AuthenticationPackage
    #field int LogonType
    #field int Session
    #field intptr Sid
    #field int64 LogonTime
    #field LSA_UNICODE_STRING LogonServer
    #field LSA_UNICODE_STRING DnsDomainName
    #field LSA_UNICODE_STRING Upn
    #field int UserFlags
    #field LSA_LAST_INTER_LOGON_INFO LastLogonInfo
    #field LSA_UNICODE_STRING LogonScript
    #field LSA_UNICODE_STRING ProfilePath
    #field LSA_UNICODE_STRING HomeDirectory
    #field LSA_UNICODE_STRING HomeDirectoryDrive
    #field int64 LogoffTime
    #field int64 KickOffTime
    #field int64 PasswordLastSet
    #field int64 PasswordCanChange
    #field int64 PasswordMustChange
#endstruct

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