ホーム › Security.WinWlx › WLX_CONSOLESWITCH_CREDENTIALS_INFO_V1_0
WLX_CONSOLESWITCH_CREDENTIALS_INFO_V1_0
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| dwType | DWORD | 4 | +0 | +0 | 資格情報構造体のバージョン種別を表す。 |
| UserToken | HANDLE | 8/4 | +8 | +4 | ユーザーを表すアクセストークンのハンドル。 |
| LogonId | LUID | 8 | +16 | +8 | ログオンセッションを一意に識別するLUID。 |
| Quotas | QUOTA_LIMITS | 48/32 | +24 | +16 | プロセスに適用されるクォータ制限値。 |
| UserName | LPWSTR | 8/4 | +72 | +48 | ユーザー名文字列。 |
| Domain | LPWSTR | 8/4 | +80 | +52 | ドメイン名文字列。 |
| LogonTime | LONGLONG | 8 | +88 | +56 | ログオン時刻を表す。 |
| SmartCardLogon | BOOL | 4 | +96 | +64 | スマートカードによるログオンかを示すフラグ。 |
| ProfileLength | DWORD | 4 | +100 | +68 | プロファイルデータのバイト長を表す。 |
| MessageType | DWORD | 4 | +104 | +72 | メッセージの種別を表す。 |
| LogonCount | WORD | 2 | +108 | +76 | ログオン回数を表す。 |
| BadPasswordCount | WORD | 2 | +110 | +78 | 誤ったパスワード入力回数を表す。 |
| ProfileLogonTime | LONGLONG | 8 | +112 | +80 | プロファイルのログオン時刻を表す。 |
| LogoffTime | LONGLONG | 8 | +120 | +88 | 強制ログオフ予定時刻を表す。 |
| KickOffTime | LONGLONG | 8 | +128 | +96 | 強制切断予定時刻を表す。 |
| PasswordLastSet | LONGLONG | 8 | +136 | +104 | パスワード最終設定日時を表す。 |
| PasswordCanChange | LONGLONG | 8 | +144 | +112 | パスワード変更が可能になる日時を表す。 |
| PasswordMustChange | LONGLONG | 8 | +152 | +120 | パスワード変更が必須になる日時を表す。 |
| LogonScript | LPWSTR | 8/4 | +160 | +128 | ログオンスクリプトのパス文字列。 |
| HomeDirectory | LPWSTR | 8/4 | +168 | +132 | ホームディレクトリのパス文字列。 |
| FullName | LPWSTR | 8/4 | +176 | +136 | ユーザーのフルネーム文字列。 |
| ProfilePath | LPWSTR | 8/4 | +184 | +140 | ユーザープロファイルのパス文字列。 |
| HomeDirectoryDrive | LPWSTR | 8/4 | +192 | +144 | ホームディレクトリのドライブ指定文字列。 |
| LogonServer | LPWSTR | 8/4 | +200 | +148 | 認証を行ったログオンサーバー名文字列。 |
| UserFlags | DWORD | 4 | +208 | +152 | ユーザーアカウントの属性を示すフラグ群。 |
| PrivateDataLen | DWORD | 4 | +212 | +156 | PrivateDataのバイト長を表す。 |
| PrivateData | BYTE* | 8/4 | +216 | +160 | 資格情報固有のプライベートデータへのポインタ。 |
各言語での定義
#include <windows.h>
// LUID (x64 8 / x86 8 バイト)
typedef struct LUID {
DWORD LowPart;
INT HighPart;
} LUID;
// QUOTA_LIMITS (x64 48 / x86 32 バイト)
typedef struct QUOTA_LIMITS {
UINT_PTR PagedPoolLimit;
UINT_PTR NonPagedPoolLimit;
UINT_PTR MinimumWorkingSetSize;
UINT_PTR MaximumWorkingSetSize;
UINT_PTR PagefileLimit;
LONGLONG TimeLimit;
} QUOTA_LIMITS;
// WLX_CONSOLESWITCH_CREDENTIALS_INFO_V1_0 (x64 224 / x86 168 バイト)
typedef struct WLX_CONSOLESWITCH_CREDENTIALS_INFO_V1_0 {
DWORD dwType;
HANDLE UserToken;
LUID LogonId;
QUOTA_LIMITS Quotas;
LPWSTR UserName;
LPWSTR Domain;
LONGLONG LogonTime;
BOOL SmartCardLogon;
DWORD ProfileLength;
DWORD MessageType;
WORD LogonCount;
WORD BadPasswordCount;
LONGLONG ProfileLogonTime;
LONGLONG LogoffTime;
LONGLONG KickOffTime;
LONGLONG PasswordLastSet;
LONGLONG PasswordCanChange;
LONGLONG PasswordMustChange;
LPWSTR LogonScript;
LPWSTR HomeDirectory;
LPWSTR FullName;
LPWSTR ProfilePath;
LPWSTR HomeDirectoryDrive;
LPWSTR LogonServer;
DWORD UserFlags;
DWORD PrivateDataLen;
BYTE* PrivateData;
} WLX_CONSOLESWITCH_CREDENTIALS_INFO_V1_0;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 QUOTA_LIMITS
{
public UIntPtr PagedPoolLimit;
public UIntPtr NonPagedPoolLimit;
public UIntPtr MinimumWorkingSetSize;
public UIntPtr MaximumWorkingSetSize;
public UIntPtr PagefileLimit;
public long TimeLimit;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WLX_CONSOLESWITCH_CREDENTIALS_INFO_V1_0
{
public uint dwType;
public IntPtr UserToken;
public LUID LogonId;
public QUOTA_LIMITS Quotas;
public IntPtr UserName;
public IntPtr Domain;
public long LogonTime;
[MarshalAs(UnmanagedType.Bool)] public bool SmartCardLogon;
public uint ProfileLength;
public uint MessageType;
public ushort LogonCount;
public ushort BadPasswordCount;
public long ProfileLogonTime;
public long LogoffTime;
public long KickOffTime;
public long PasswordLastSet;
public long PasswordCanChange;
public long PasswordMustChange;
public IntPtr LogonScript;
public IntPtr HomeDirectory;
public IntPtr FullName;
public IntPtr ProfilePath;
public IntPtr HomeDirectoryDrive;
public IntPtr LogonServer;
public uint UserFlags;
public uint PrivateDataLen;
public IntPtr PrivateData;
}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 QUOTA_LIMITS
Public PagedPoolLimit As UIntPtr
Public NonPagedPoolLimit As UIntPtr
Public MinimumWorkingSetSize As UIntPtr
Public MaximumWorkingSetSize As UIntPtr
Public PagefileLimit As UIntPtr
Public TimeLimit As Long
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WLX_CONSOLESWITCH_CREDENTIALS_INFO_V1_0
Public dwType As UInteger
Public UserToken As IntPtr
Public LogonId As LUID
Public Quotas As QUOTA_LIMITS
Public UserName As IntPtr
Public Domain As IntPtr
Public LogonTime As Long
<MarshalAs(UnmanagedType.Bool)> Public SmartCardLogon As Boolean
Public ProfileLength As UInteger
Public MessageType As UInteger
Public LogonCount As UShort
Public BadPasswordCount As UShort
Public ProfileLogonTime As Long
Public LogoffTime As Long
Public KickOffTime As Long
Public PasswordLastSet As Long
Public PasswordCanChange As Long
Public PasswordMustChange As Long
Public LogonScript As IntPtr
Public HomeDirectory As IntPtr
Public FullName As IntPtr
Public ProfilePath As IntPtr
Public HomeDirectoryDrive As IntPtr
Public LogonServer As IntPtr
Public UserFlags As UInteger
Public PrivateDataLen As UInteger
Public PrivateData As IntPtr
End Structureimport ctypes
from ctypes import wintypes
class LUID(ctypes.Structure):
_fields_ = [
("LowPart", wintypes.DWORD),
("HighPart", ctypes.c_int),
]
class QUOTA_LIMITS(ctypes.Structure):
_fields_ = [
("PagedPoolLimit", ctypes.c_size_t),
("NonPagedPoolLimit", ctypes.c_size_t),
("MinimumWorkingSetSize", ctypes.c_size_t),
("MaximumWorkingSetSize", ctypes.c_size_t),
("PagefileLimit", ctypes.c_size_t),
("TimeLimit", ctypes.c_longlong),
]
class WLX_CONSOLESWITCH_CREDENTIALS_INFO_V1_0(ctypes.Structure):
_fields_ = [
("dwType", wintypes.DWORD),
("UserToken", ctypes.c_void_p),
("LogonId", LUID),
("Quotas", QUOTA_LIMITS),
("UserName", ctypes.c_void_p),
("Domain", ctypes.c_void_p),
("LogonTime", ctypes.c_longlong),
("SmartCardLogon", wintypes.BOOL),
("ProfileLength", wintypes.DWORD),
("MessageType", wintypes.DWORD),
("LogonCount", ctypes.c_ushort),
("BadPasswordCount", ctypes.c_ushort),
("ProfileLogonTime", ctypes.c_longlong),
("LogoffTime", ctypes.c_longlong),
("KickOffTime", ctypes.c_longlong),
("PasswordLastSet", ctypes.c_longlong),
("PasswordCanChange", ctypes.c_longlong),
("PasswordMustChange", ctypes.c_longlong),
("LogonScript", ctypes.c_void_p),
("HomeDirectory", ctypes.c_void_p),
("FullName", ctypes.c_void_p),
("ProfilePath", ctypes.c_void_p),
("HomeDirectoryDrive", ctypes.c_void_p),
("LogonServer", ctypes.c_void_p),
("UserFlags", wintypes.DWORD),
("PrivateDataLen", wintypes.DWORD),
("PrivateData", ctypes.c_void_p),
]#[repr(C)]
pub struct LUID {
pub LowPart: u32,
pub HighPart: i32,
}
#[repr(C)]
pub struct QUOTA_LIMITS {
pub PagedPoolLimit: usize,
pub NonPagedPoolLimit: usize,
pub MinimumWorkingSetSize: usize,
pub MaximumWorkingSetSize: usize,
pub PagefileLimit: usize,
pub TimeLimit: i64,
}
#[repr(C)]
pub struct WLX_CONSOLESWITCH_CREDENTIALS_INFO_V1_0 {
pub dwType: u32,
pub UserToken: *mut core::ffi::c_void,
pub LogonId: LUID,
pub Quotas: QUOTA_LIMITS,
pub UserName: *mut core::ffi::c_void,
pub Domain: *mut core::ffi::c_void,
pub LogonTime: i64,
pub SmartCardLogon: i32,
pub ProfileLength: u32,
pub MessageType: u32,
pub LogonCount: u16,
pub BadPasswordCount: u16,
pub ProfileLogonTime: i64,
pub LogoffTime: i64,
pub KickOffTime: i64,
pub PasswordLastSet: i64,
pub PasswordCanChange: i64,
pub PasswordMustChange: i64,
pub LogonScript: *mut core::ffi::c_void,
pub HomeDirectory: *mut core::ffi::c_void,
pub FullName: *mut core::ffi::c_void,
pub ProfilePath: *mut core::ffi::c_void,
pub HomeDirectoryDrive: *mut core::ffi::c_void,
pub LogonServer: *mut core::ffi::c_void,
pub UserFlags: u32,
pub PrivateDataLen: u32,
pub PrivateData: *mut core::ffi::c_void,
}import "golang.org/x/sys/windows"
type LUID struct {
LowPart uint32
HighPart int32
}
type QUOTA_LIMITS struct {
PagedPoolLimit uintptr
NonPagedPoolLimit uintptr
MinimumWorkingSetSize uintptr
MaximumWorkingSetSize uintptr
PagefileLimit uintptr
TimeLimit int64
}
type WLX_CONSOLESWITCH_CREDENTIALS_INFO_V1_0 struct {
dwType uint32
UserToken uintptr
LogonId LUID
Quotas QUOTA_LIMITS
UserName uintptr
Domain uintptr
LogonTime int64
SmartCardLogon int32
ProfileLength uint32
MessageType uint32
LogonCount uint16
BadPasswordCount uint16
ProfileLogonTime int64
LogoffTime int64
KickOffTime int64
PasswordLastSet int64
PasswordCanChange int64
PasswordMustChange int64
LogonScript uintptr
HomeDirectory uintptr
FullName uintptr
ProfilePath uintptr
HomeDirectoryDrive uintptr
LogonServer uintptr
UserFlags uint32
PrivateDataLen uint32
PrivateData uintptr
}type
LUID = record
LowPart: DWORD;
HighPart: Integer;
end;
QUOTA_LIMITS = record
PagedPoolLimit: NativeUInt;
NonPagedPoolLimit: NativeUInt;
MinimumWorkingSetSize: NativeUInt;
MaximumWorkingSetSize: NativeUInt;
PagefileLimit: NativeUInt;
TimeLimit: Int64;
end;
WLX_CONSOLESWITCH_CREDENTIALS_INFO_V1_0 = record
dwType: DWORD;
UserToken: Pointer;
LogonId: LUID;
Quotas: QUOTA_LIMITS;
UserName: Pointer;
Domain: Pointer;
LogonTime: Int64;
SmartCardLogon: BOOL;
ProfileLength: DWORD;
MessageType: DWORD;
LogonCount: Word;
BadPasswordCount: Word;
ProfileLogonTime: Int64;
LogoffTime: Int64;
KickOffTime: Int64;
PasswordLastSet: Int64;
PasswordCanChange: Int64;
PasswordMustChange: Int64;
LogonScript: Pointer;
HomeDirectory: Pointer;
FullName: Pointer;
ProfilePath: Pointer;
HomeDirectoryDrive: Pointer;
LogonServer: Pointer;
UserFlags: DWORD;
PrivateDataLen: DWORD;
PrivateData: Pointer;
end;const LUID = extern struct {
LowPart: u32,
HighPart: i32,
};
const QUOTA_LIMITS = extern struct {
PagedPoolLimit: usize,
NonPagedPoolLimit: usize,
MinimumWorkingSetSize: usize,
MaximumWorkingSetSize: usize,
PagefileLimit: usize,
TimeLimit: i64,
};
const WLX_CONSOLESWITCH_CREDENTIALS_INFO_V1_0 = extern struct {
dwType: u32,
UserToken: ?*anyopaque,
LogonId: LUID,
Quotas: QUOTA_LIMITS,
UserName: ?*anyopaque,
Domain: ?*anyopaque,
LogonTime: i64,
SmartCardLogon: i32,
ProfileLength: u32,
MessageType: u32,
LogonCount: u16,
BadPasswordCount: u16,
ProfileLogonTime: i64,
LogoffTime: i64,
KickOffTime: i64,
PasswordLastSet: i64,
PasswordCanChange: i64,
PasswordMustChange: i64,
LogonScript: ?*anyopaque,
HomeDirectory: ?*anyopaque,
FullName: ?*anyopaque,
ProfilePath: ?*anyopaque,
HomeDirectoryDrive: ?*anyopaque,
LogonServer: ?*anyopaque,
UserFlags: u32,
PrivateDataLen: u32,
PrivateData: ?*anyopaque,
};type
LUID {.bycopy.} = object
LowPart: uint32
HighPart: int32
QUOTA_LIMITS {.bycopy.} = object
PagedPoolLimit: uint
NonPagedPoolLimit: uint
MinimumWorkingSetSize: uint
MaximumWorkingSetSize: uint
PagefileLimit: uint
TimeLimit: int64
WLX_CONSOLESWITCH_CREDENTIALS_INFO_V1_0 {.bycopy.} = object
dwType: uint32
UserToken: pointer
LogonId: LUID
Quotas: QUOTA_LIMITS
UserName: pointer
Domain: pointer
LogonTime: int64
SmartCardLogon: int32
ProfileLength: uint32
MessageType: uint32
LogonCount: uint16
BadPasswordCount: uint16
ProfileLogonTime: int64
LogoffTime: int64
KickOffTime: int64
PasswordLastSet: int64
PasswordCanChange: int64
PasswordMustChange: int64
LogonScript: pointer
HomeDirectory: pointer
FullName: pointer
ProfilePath: pointer
HomeDirectoryDrive: pointer
LogonServer: pointer
UserFlags: uint32
PrivateDataLen: uint32
PrivateData: pointerstruct LUID
{
uint LowPart;
int HighPart;
}
struct QUOTA_LIMITS
{
size_t PagedPoolLimit;
size_t NonPagedPoolLimit;
size_t MinimumWorkingSetSize;
size_t MaximumWorkingSetSize;
size_t PagefileLimit;
long TimeLimit;
}
struct WLX_CONSOLESWITCH_CREDENTIALS_INFO_V1_0
{
uint dwType;
void* UserToken;
LUID LogonId;
QUOTA_LIMITS Quotas;
void* UserName;
void* Domain;
long LogonTime;
int SmartCardLogon;
uint ProfileLength;
uint MessageType;
ushort LogonCount;
ushort BadPasswordCount;
long ProfileLogonTime;
long LogoffTime;
long KickOffTime;
long PasswordLastSet;
long PasswordCanChange;
long PasswordMustChange;
void* LogonScript;
void* HomeDirectory;
void* FullName;
void* ProfilePath;
void* HomeDirectoryDrive;
void* LogonServer;
uint UserFlags;
uint PrivateDataLen;
void* PrivateData;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; WLX_CONSOLESWITCH_CREDENTIALS_INFO_V1_0 サイズ: 168 バイト(x86)
dim st, 42 ; 4byte整数×42(構造体サイズ 168 / 4 切り上げ)
; dwType : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; UserToken : HANDLE (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; LogonId : LUID (+8, 8byte) varptr(st)+8 を基点に操作(8byte:入れ子/配列)
; Quotas : QUOTA_LIMITS (+16, 32byte) varptr(st)+16 を基点に操作(32byte:入れ子/配列)
; UserName : LPWSTR (+48, 4byte) st.12 = 値 / 値 = st.12 (lpoke/lpeek も可)
; Domain : LPWSTR (+52, 4byte) st.13 = 値 / 値 = st.13 (lpoke/lpeek も可)
; LogonTime : LONGLONG (+56, 8byte) qpoke st,56,値 / qpeek(st,56) ※IronHSPのみ。3.7/3.8は lpoke st,56,下位 : lpoke st,60,上位
; SmartCardLogon : BOOL (+64, 4byte) st.16 = 値 / 値 = st.16 (lpoke/lpeek も可)
; ProfileLength : DWORD (+68, 4byte) st.17 = 値 / 値 = st.17 (lpoke/lpeek も可)
; MessageType : DWORD (+72, 4byte) st.18 = 値 / 値 = st.18 (lpoke/lpeek も可)
; LogonCount : WORD (+76, 2byte) wpoke st,76,値 / 値 = wpeek(st,76)
; BadPasswordCount : WORD (+78, 2byte) wpoke st,78,値 / 値 = wpeek(st,78)
; ProfileLogonTime : LONGLONG (+80, 8byte) qpoke st,80,値 / qpeek(st,80) ※IronHSPのみ。3.7/3.8は lpoke st,80,下位 : lpoke st,84,上位
; LogoffTime : LONGLONG (+88, 8byte) qpoke st,88,値 / qpeek(st,88) ※IronHSPのみ。3.7/3.8は lpoke st,88,下位 : lpoke st,92,上位
; KickOffTime : LONGLONG (+96, 8byte) qpoke st,96,値 / qpeek(st,96) ※IronHSPのみ。3.7/3.8は lpoke st,96,下位 : lpoke st,100,上位
; PasswordLastSet : LONGLONG (+104, 8byte) qpoke st,104,値 / qpeek(st,104) ※IronHSPのみ。3.7/3.8は lpoke st,104,下位 : lpoke st,108,上位
; PasswordCanChange : LONGLONG (+112, 8byte) qpoke st,112,値 / qpeek(st,112) ※IronHSPのみ。3.7/3.8は lpoke st,112,下位 : lpoke st,116,上位
; PasswordMustChange : LONGLONG (+120, 8byte) qpoke st,120,値 / qpeek(st,120) ※IronHSPのみ。3.7/3.8は lpoke st,120,下位 : lpoke st,124,上位
; LogonScript : LPWSTR (+128, 4byte) st.32 = 値 / 値 = st.32 (lpoke/lpeek も可)
; HomeDirectory : LPWSTR (+132, 4byte) st.33 = 値 / 値 = st.33 (lpoke/lpeek も可)
; FullName : LPWSTR (+136, 4byte) st.34 = 値 / 値 = st.34 (lpoke/lpeek も可)
; ProfilePath : LPWSTR (+140, 4byte) st.35 = 値 / 値 = st.35 (lpoke/lpeek も可)
; HomeDirectoryDrive : LPWSTR (+144, 4byte) st.36 = 値 / 値 = st.36 (lpoke/lpeek も可)
; LogonServer : LPWSTR (+148, 4byte) st.37 = 値 / 値 = st.37 (lpoke/lpeek も可)
; UserFlags : DWORD (+152, 4byte) st.38 = 値 / 値 = st.38 (lpoke/lpeek も可)
; PrivateDataLen : DWORD (+156, 4byte) st.39 = 値 / 値 = st.39 (lpoke/lpeek も可)
; PrivateData : BYTE* (+160, 4byte) st.40 = 値 / 値 = st.40 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; WLX_CONSOLESWITCH_CREDENTIALS_INFO_V1_0 サイズ: 224 バイト(x64)
dim st, 56 ; 4byte整数×56(構造体サイズ 224 / 4 切り上げ)
; dwType : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; UserToken : HANDLE (+8, 8byte) qpoke st,8,値 / qpeek(st,8) ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; LogonId : LUID (+16, 8byte) varptr(st)+16 を基点に操作(8byte:入れ子/配列)
; Quotas : QUOTA_LIMITS (+24, 48byte) varptr(st)+24 を基点に操作(48byte:入れ子/配列)
; UserName : LPWSTR (+72, 8byte) qpoke st,72,値 / qpeek(st,72) ※IronHSPのみ。3.7/3.8は lpoke st,72,下位 : lpoke st,76,上位
; Domain : LPWSTR (+80, 8byte) qpoke st,80,値 / qpeek(st,80) ※IronHSPのみ。3.7/3.8は lpoke st,80,下位 : lpoke st,84,上位
; LogonTime : LONGLONG (+88, 8byte) qpoke st,88,値 / qpeek(st,88) ※IronHSPのみ。3.7/3.8は lpoke st,88,下位 : lpoke st,92,上位
; SmartCardLogon : BOOL (+96, 4byte) st.24 = 値 / 値 = st.24 (lpoke/lpeek も可)
; ProfileLength : DWORD (+100, 4byte) st.25 = 値 / 値 = st.25 (lpoke/lpeek も可)
; MessageType : DWORD (+104, 4byte) st.26 = 値 / 値 = st.26 (lpoke/lpeek も可)
; LogonCount : WORD (+108, 2byte) wpoke st,108,値 / 値 = wpeek(st,108)
; BadPasswordCount : WORD (+110, 2byte) wpoke st,110,値 / 値 = wpeek(st,110)
; ProfileLogonTime : LONGLONG (+112, 8byte) qpoke st,112,値 / qpeek(st,112) ※IronHSPのみ。3.7/3.8は lpoke st,112,下位 : lpoke st,116,上位
; LogoffTime : LONGLONG (+120, 8byte) qpoke st,120,値 / qpeek(st,120) ※IronHSPのみ。3.7/3.8は lpoke st,120,下位 : lpoke st,124,上位
; KickOffTime : LONGLONG (+128, 8byte) qpoke st,128,値 / qpeek(st,128) ※IronHSPのみ。3.7/3.8は lpoke st,128,下位 : lpoke st,132,上位
; PasswordLastSet : LONGLONG (+136, 8byte) qpoke st,136,値 / qpeek(st,136) ※IronHSPのみ。3.7/3.8は lpoke st,136,下位 : lpoke st,140,上位
; PasswordCanChange : LONGLONG (+144, 8byte) qpoke st,144,値 / qpeek(st,144) ※IronHSPのみ。3.7/3.8は lpoke st,144,下位 : lpoke st,148,上位
; PasswordMustChange : LONGLONG (+152, 8byte) qpoke st,152,値 / qpeek(st,152) ※IronHSPのみ。3.7/3.8は lpoke st,152,下位 : lpoke st,156,上位
; LogonScript : LPWSTR (+160, 8byte) qpoke st,160,値 / qpeek(st,160) ※IronHSPのみ。3.7/3.8は lpoke st,160,下位 : lpoke st,164,上位
; HomeDirectory : LPWSTR (+168, 8byte) qpoke st,168,値 / qpeek(st,168) ※IronHSPのみ。3.7/3.8は lpoke st,168,下位 : lpoke st,172,上位
; FullName : LPWSTR (+176, 8byte) qpoke st,176,値 / qpeek(st,176) ※IronHSPのみ。3.7/3.8は lpoke st,176,下位 : lpoke st,180,上位
; ProfilePath : LPWSTR (+184, 8byte) qpoke st,184,値 / qpeek(st,184) ※IronHSPのみ。3.7/3.8は lpoke st,184,下位 : lpoke st,188,上位
; HomeDirectoryDrive : LPWSTR (+192, 8byte) qpoke st,192,値 / qpeek(st,192) ※IronHSPのみ。3.7/3.8は lpoke st,192,下位 : lpoke st,196,上位
; LogonServer : LPWSTR (+200, 8byte) qpoke st,200,値 / qpeek(st,200) ※IronHSPのみ。3.7/3.8は lpoke st,200,下位 : lpoke st,204,上位
; UserFlags : DWORD (+208, 4byte) st.52 = 値 / 値 = st.52 (lpoke/lpeek も可)
; PrivateDataLen : DWORD (+212, 4byte) st.53 = 値 / 値 = st.53 (lpoke/lpeek も可)
; PrivateData : BYTE* (+216, 8byte) qpoke st,216,値 / qpeek(st,216) ※IronHSPのみ。3.7/3.8は lpoke st,216,下位 : lpoke st,220,上位
; ※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 QUOTA_LIMITS
#field intptr PagedPoolLimit
#field intptr NonPagedPoolLimit
#field intptr MinimumWorkingSetSize
#field intptr MaximumWorkingSetSize
#field intptr PagefileLimit
#field int64 TimeLimit
#endstruct
#defstruct global WLX_CONSOLESWITCH_CREDENTIALS_INFO_V1_0
#field int dwType
#field intptr UserToken
#field LUID LogonId
#field QUOTA_LIMITS Quotas
#field intptr UserName
#field intptr Domain
#field int64 LogonTime
#field bool SmartCardLogon
#field int ProfileLength
#field int MessageType
#field short LogonCount
#field short BadPasswordCount
#field int64 ProfileLogonTime
#field int64 LogoffTime
#field int64 KickOffTime
#field int64 PasswordLastSet
#field int64 PasswordCanChange
#field int64 PasswordMustChange
#field intptr LogonScript
#field intptr HomeDirectory
#field intptr FullName
#field intptr ProfilePath
#field intptr HomeDirectoryDrive
#field intptr LogonServer
#field int UserFlags
#field int PrivateDataLen
#field intptr PrivateData
#endstruct
stdim st, WLX_CONSOLESWITCH_CREDENTIALS_INFO_V1_0 ; NSTRUCT 変数を確保
st->dwType = 100
mes "dwType=" + st->dwType