WLX_PROFILE_V2_0
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| dwType | DWORD | 4 | +0 | +0 | WLX_PROFILE_TYPE_V2_0 に設定しなければなりません。 |
| pszProfile | LPWSTR | 8/4 | +8 | +4 | プロファイル パスへのポインター(例: "%SystemRoot%\system32\config\AprilM001"、または "\server\share\profiles\floating\AprilM.usr" のようなネットワーク パス)。 pszProfile が指す文字列は、GINA DLL が LocalAlloc を使用して個別に割り当てなければなりません。この文字列は Winlogon によって解放されます。 |
| pszPolicy | LPWSTR | 8/4 | +16 | +8 | ログオンするユーザーに適用されるポリシー ファイルへのポインター。 pszPolicy が指す文字列は、GINA DLL が LocalAlloc を使用して個別に割り当てなければなりません。この文字列は Winlogon によって解放されます。 |
| pszNetworkDefaultUserProfile | LPWSTR | 8/4 | +24 | +12 | 新しいプロファイルを作成する場合に使用する、既定のプロファイルのパスへのポインター。 pszNetworkDefaultUserProfile が指す文字列は、GINA DLL が LocalAlloc を使用して個別に割り当てなければなりません。この文字列は Winlogon によって解放されます。 |
| pszServerName | LPWSTR | 8/4 | +32 | +16 | ログオンを検証したサーバーの名前へのポインター。この名前は、ユーザーが所属するグローバル グループを列挙するために使用されます。 pszServerName が指す文字列は、GINA DLL が LocalAlloc を使用して個別に割り当てなければなりません。この文字列は Winlogon によって解放されます。 |
| pszEnvironment | LPWSTR | 8/4 | +40 | +20 | ユーザーの環境を構築する際に含める既定の環境変数へのポインター。このメンバーは、次のいずれかの形式を使用する、null で終わる文字列の連続です。
例:
このバッファーは、GINA DLL が LocalAlloc を使用して個別に割り当てなければなりません。このバッファーは Winlogon によって解放されます。 |
公式ドキュメント
[WLX_PROFILE_V2_0 構造体は、Windows Server 2008 および Windows Vista 以降では使用できません。]
WLX_PROFILE_V2_0 構造体は、 WLX_PROFILE_V1_0 で提供される情報に加えてプロファイル情報を格納します。
解説(Remarks)
この構造体は、GINA DLL から Winlogon に返されます。
GINA DLL は、プロファイル情報を提供するために WLX_PROFILE_V2_0 と WLX_PROFILE_V1_0 の 2 つの構造体を使用できます。WLX_PROFILE_V1_0 の情報には、プロファイルの種類とプロファイルへのパスのみが含まれます。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での定義
#include <windows.h>
// WLX_PROFILE_V2_0 (x64 48 / x86 24 バイト)
typedef struct WLX_PROFILE_V2_0 {
DWORD dwType;
LPWSTR pszProfile;
LPWSTR pszPolicy;
LPWSTR pszNetworkDefaultUserProfile;
LPWSTR pszServerName;
LPWSTR pszEnvironment;
} WLX_PROFILE_V2_0;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WLX_PROFILE_V2_0
{
public uint dwType;
public IntPtr pszProfile;
public IntPtr pszPolicy;
public IntPtr pszNetworkDefaultUserProfile;
public IntPtr pszServerName;
public IntPtr pszEnvironment;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WLX_PROFILE_V2_0
Public dwType As UInteger
Public pszProfile As IntPtr
Public pszPolicy As IntPtr
Public pszNetworkDefaultUserProfile As IntPtr
Public pszServerName As IntPtr
Public pszEnvironment As IntPtr
End Structureimport ctypes
from ctypes import wintypes
class WLX_PROFILE_V2_0(ctypes.Structure):
_fields_ = [
("dwType", wintypes.DWORD),
("pszProfile", ctypes.c_void_p),
("pszPolicy", ctypes.c_void_p),
("pszNetworkDefaultUserProfile", ctypes.c_void_p),
("pszServerName", ctypes.c_void_p),
("pszEnvironment", ctypes.c_void_p),
]#[repr(C)]
pub struct WLX_PROFILE_V2_0 {
pub dwType: u32,
pub pszProfile: *mut core::ffi::c_void,
pub pszPolicy: *mut core::ffi::c_void,
pub pszNetworkDefaultUserProfile: *mut core::ffi::c_void,
pub pszServerName: *mut core::ffi::c_void,
pub pszEnvironment: *mut core::ffi::c_void,
}import "golang.org/x/sys/windows"
type WLX_PROFILE_V2_0 struct {
dwType uint32
pszProfile uintptr
pszPolicy uintptr
pszNetworkDefaultUserProfile uintptr
pszServerName uintptr
pszEnvironment uintptr
}type
WLX_PROFILE_V2_0 = record
dwType: DWORD;
pszProfile: Pointer;
pszPolicy: Pointer;
pszNetworkDefaultUserProfile: Pointer;
pszServerName: Pointer;
pszEnvironment: Pointer;
end;const WLX_PROFILE_V2_0 = extern struct {
dwType: u32,
pszProfile: ?*anyopaque,
pszPolicy: ?*anyopaque,
pszNetworkDefaultUserProfile: ?*anyopaque,
pszServerName: ?*anyopaque,
pszEnvironment: ?*anyopaque,
};type
WLX_PROFILE_V2_0 {.bycopy.} = object
dwType: uint32
pszProfile: pointer
pszPolicy: pointer
pszNetworkDefaultUserProfile: pointer
pszServerName: pointer
pszEnvironment: pointerstruct WLX_PROFILE_V2_0
{
uint dwType;
void* pszProfile;
void* pszPolicy;
void* pszNetworkDefaultUserProfile;
void* pszServerName;
void* pszEnvironment;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; WLX_PROFILE_V2_0 サイズ: 24 バイト(x86)
dim st, 6 ; 4byte整数×6(構造体サイズ 24 / 4 切り上げ)
; dwType : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; pszProfile : LPWSTR (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; pszPolicy : LPWSTR (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; pszNetworkDefaultUserProfile : LPWSTR (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; pszServerName : LPWSTR (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; pszEnvironment : LPWSTR (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; WLX_PROFILE_V2_0 サイズ: 48 バイト(x64)
dim st, 12 ; 4byte整数×12(構造体サイズ 48 / 4 切り上げ)
; dwType : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; pszProfile : LPWSTR (+8, 8byte) qpoke st,8,値 / qpeek(st,8) ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; pszPolicy : LPWSTR (+16, 8byte) qpoke st,16,値 / qpeek(st,16) ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; pszNetworkDefaultUserProfile : LPWSTR (+24, 8byte) qpoke st,24,値 / qpeek(st,24) ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; pszServerName : LPWSTR (+32, 8byte) qpoke st,32,値 / qpeek(st,32) ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; pszEnvironment : LPWSTR (+40, 8byte) qpoke st,40,値 / qpeek(st,40) ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global WLX_PROFILE_V2_0
#field int dwType
#field intptr pszProfile
#field intptr pszPolicy
#field intptr pszNetworkDefaultUserProfile
#field intptr pszServerName
#field intptr pszEnvironment
#endstruct
stdim st, WLX_PROFILE_V2_0 ; NSTRUCT 変数を確保
st->dwType = 100
mes "dwType=" + st->dwType