ホーム › 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 | 割り当てられる資格情報構造体の種類を識別します。資格情報の種類は WLX_CONSOLESWITCHCREDENTIAL_TYPE というプレフィックス付きで定義されており、Winlogon が構造体を型キャストして構造体の残りの部分を参照できるようになっています。 | ||||
| UserToken | HANDLE | 8/4 | +8 | +4 | ユーザーのトークンのハンドル。 | ||||
| LogonId | LUID | 8 | +16 | +8 | 一意のログオン識別子。 | ||||
| Quotas | QUOTA_LIMITS | 48/32 | +24 | +16 | ユーザーが利用できるシステム リソースの量に関する情報を格納する QUOTA_LIMITS 構造体。 | ||||
| UserName | LPWSTR | 8/4 | +72 | +48 | 文字列としてのユーザー名。 | ||||
| Domain | LPWSTR | 8/4 | +80 | +52 | 文字列としてのユーザーのドメイン。 | ||||
| LogonTime | LONGLONG | 8 | +88 | +56 | 正確なログオン時刻。 | ||||
| SmartCardLogon | BOOL | 4 | +96 | +64 | ログオンがスマート カードによって行われた場合は TRUE です。 | ||||
| ProfileLength | DWORD | 4 | +100 | +68 | ユーザーのプロファイルの長さ(バイト単位)。 | ||||
| MessageType | DWORD | 4 | +104 | +72 | 返されるプロファイル データの種類を識別する MSV1_0_PROFILE_BUFFER_TYPE 値。このメンバーは MsV1_0InteractiveProfile に設定しなければなりません。 | ||||
| LogonCount | WORD | 2 | +108 | +76 | ユーザーが現在ログオンしている回数。 注意 ドメイン コントローラーにはすべてのログオンとログオフが通知されるわけではないため、この値が正確であるとは限りません。
| ||||
| BadPasswordCount | WORD | 2 | +110 | +78 | 最後に成功したログオン以降に、無効なパスワードがこのアカウントに適用された回数。 | ||||
| ProfileLogonTime | LONGLONG | 8 | +112 | +80 | ユーザーが最後にログオンした時刻。これは絶対形式の Windows 標準時刻値です。 | ||||
| LogoffTime | LONGLONG | 8 | +120 | +88 | ユーザーがログオフすべき時刻。これは絶対形式の Windows 標準時刻値です。 | ||||
| KickOffTime | LONGLONG | 8 | +128 | +96 | システムがユーザーを強制的にログオフさせるべき時刻。これは絶対形式の Windows 標準時刻値です。なお、Windows のユーザーが対話的に強制ログオフされることはありませんが、そのネットワーク接続は閉じられる場合があります。 | ||||
| PasswordLastSet | LONGLONG | 8 | +136 | +104 | パスワードが最後に変更された日時。これは絶対形式の Windows 標準時刻値です。 | ||||
| PasswordCanChange | LONGLONG | 8 | +144 | +112 | パスワードの変更をユーザーに促すべき日時。これは絶対形式の Windows 標準時刻値です。このメンバーは、現在のパスワードを変更するかどうかをユーザーに尋ねるプロンプトを表示するために GINA が使用します。 | ||||
| PasswordMustChange | LONGLONG | 8 | +152 | +120 | ユーザーがパスワードを変更しなければならない日時。ユーザーがパスワードを変更できない場合、このメンバーは未定義です。これは絶対形式の Windows 標準時刻値です。 | ||||
| LogonScript | LPWSTR | 8/4 | +160 | +128 | アカウントのログオン スクリプトへの相対パスを格納する UNICODE_STRING。 | ||||
| HomeDirectory | LPWSTR | 8/4 | +168 | +132 | ユーザーのホーム ディレクトリを格納する UNICODE_STRING。 | ||||
| FullName | LPWSTR | 8/4 | +176 | +136 | ユーザーのフル ネームを格納する UNICODE_STRING。 | ||||
| ProfilePath | LPWSTR | 8/4 | +184 | +140 | ユーザーが移動ユーザー プロファイルを持つ場合に、そのプロファイルへのパスを指定する UNICODE_STRING。例: \SomeServer\SomeShare\MyUserName | ||||
| HomeDirectoryDrive | LPWSTR | 8/4 | +192 | +144 | ホーム ディレクトリのドライブ文字(例: C:\ や D:)を格納する UNICODE_STRING。 | ||||
| LogonServer | LPWSTR | 8/4 | +200 | +148 | ログオン要求を処理したサーバーの名前を格納する UNICODE_STRING。 | ||||
| UserFlags | DWORD | 4 | +208 | +152 | このユーザーがどのようにセッションを確立したかを指定します。次のフラグを指定できます。
| ||||
| PrivateDataLen | DWORD | 4 | +212 | +156 | GINA 固有データの長さ(バイト単位)。GINA 固有のデータがない場合は 0 に設定します。 | ||||
| PrivateData | BYTE* | 8/4 | +216 | +160 | GINA 固有データを格納するバッファー。 |
公式ドキュメント
WLX_CONSOLESWITCH_CREDENTIALS_INFO_V1_0 構造体は、 WlxGetConsoleSwitchCredentials の呼び出しによって返されるクライアント資格情報を格納します。
これにより、資格情報を透過的にターゲット セッションへ転送できます。
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での定義
#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