ホーム › Security.Authentication.Identity › SECURITY_LOGON_SESSION_DATA
SECURITY_LOGON_SESSION_DATA
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| Size | DWORD | 4 | +0 | +0 | この構造体のサイズをバイト単位で示す。 |
| LogonId | LUID | 8 | +4 | +4 | ログオンセッションを一意に識別するLUID。 |
| UserName | LSA_UNICODE_STRING | 16/8 | +16 | +12 | ログオンしたユーザー名(LSA_UNICODE_STRING)。 |
| LogonDomain | LSA_UNICODE_STRING | 16/8 | +32 | +20 | ユーザーのログオンドメイン名(LSA_UNICODE_STRING)。 |
| AuthenticationPackage | LSA_UNICODE_STRING | 16/8 | +48 | +28 | 認証に使用された認証パッケージ名(LSA_UNICODE_STRING)。 |
| LogonType | DWORD | 4 | +64 | +36 | ログオン種別(対話/ネットワーク/サービス等)を示す値。 |
| Session | DWORD | 4 | +68 | +40 | ターミナルサービスのセッションID。 |
| Sid | PSID | 8/4 | +72 | +44 | ユーザーのSID。 |
| LogonTime | LONGLONG | 8 | +80 | +48 | ログオン日時(100ナノ秒単位)。 |
| LogonServer | LSA_UNICODE_STRING | 16/8 | +88 | +56 | 認証を行ったサーバーの名前(LSA_UNICODE_STRING)。 |
| DnsDomainName | LSA_UNICODE_STRING | 16/8 | +104 | +64 | ユーザーのDNSドメイン名(LSA_UNICODE_STRING)。 |
| Upn | LSA_UNICODE_STRING | 16/8 | +120 | +72 | ユーザープリンシパル名(LSA_UNICODE_STRING)。 |
| UserFlags | DWORD | 4 | +136 | +80 | ユーザーログオンに関するフラグ。 |
| LastLogonInfo | LSA_LAST_INTER_LOGON_INFO | 24 | +144 | +88 | 前回ログオン情報(成功/失敗時刻等)。 |
| LogonScript | LSA_UNICODE_STRING | 16/8 | +168 | +112 | ログオンスクリプトのパス(LSA_UNICODE_STRING)。 |
| ProfilePath | LSA_UNICODE_STRING | 16/8 | +184 | +120 | ユーザープロファイルのパス(LSA_UNICODE_STRING)。 |
| HomeDirectory | LSA_UNICODE_STRING | 16/8 | +200 | +128 | ホームディレクトリのパス(LSA_UNICODE_STRING)。 |
| HomeDirectoryDrive | LSA_UNICODE_STRING | 16/8 | +216 | +136 | ホームディレクトリのドライブ文字(LSA_UNICODE_STRING)。 |
| LogoffTime | LONGLONG | 8 | +232 | +144 | 強制ログオフ予定日時(100ナノ秒単位)。 |
| KickOffTime | LONGLONG | 8 | +240 | +152 | 強制切断予定日時(100ナノ秒単位)。 |
| PasswordLastSet | LONGLONG | 8 | +248 | +160 | パスワードが最後に設定された日時(100ナノ秒単位)。 |
| PasswordCanChange | LONGLONG | 8 | +256 | +168 | パスワードを変更可能になる日時(100ナノ秒単位)。 |
| PasswordMustChange | LONGLONG | 8 | +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 Structureimport 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: int64struct 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