Win32 API 日本語リファレンス
ホームSecurity.WinWlx › WLX_DISPATCH_VERSION_1_0

WLX_DISPATCH_VERSION_1_0

構造体
サイズx64: 104 バイト / x86: 52 バイト

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

フィールド

フィールドサイズx64x86説明
WlxUseCtrlAltDelPWLX_USE_CTRL_ALT_DEL8/4+0+0WlxUseCtrlAltDel 関数へのポインター。
WlxSetContextPointerPWLX_SET_CONTEXT_POINTER8/4+8+4WlxSetContextPointer 関数へのポインター。
WlxSasNotifyPWLX_SAS_NOTIFY8/4+16+8WlxSasNotify 関数へのポインター。
WlxSetTimeoutPWLX_SET_TIMEOUT8/4+24+12WlxSetTimeout 関数へのポインター。
WlxAssignShellProtectionPWLX_ASSIGN_SHELL_PROTECTION8/4+32+16WlxAssignShellProtection 関数へのポインター。
WlxMessageBoxPWLX_MESSAGE_BOX8/4+40+20WlxMessageBox 関数へのポインター。
WlxDialogBoxPWLX_DIALOG_BOX8/4+48+24WlxDialogBox 関数へのポインター。
WlxDialogBoxParamPWLX_DIALOG_BOX_PARAM8/4+56+28WlxDialogBoxParam 関数へのポインター。
WlxDialogBoxIndirectPWLX_DIALOG_BOX_INDIRECT8/4+64+32WlxDialogBoxIndirect 関数へのポインター。
WlxDialogBoxIndirectParamPWLX_DIALOG_BOX_INDIRECT_PARAM8/4+72+36WlxDialogBoxIndirectParam 関数へのポインター。
WlxSwitchDesktopToUserPWLX_SWITCH_DESKTOP_TO_USER8/4+80+40WlxSwitchDesktopToUser 関数へのポインター。
WlxSwitchDesktopToWinlogonPWLX_SWITCH_DESKTOP_TO_WINLOGON8/4+88+44WlxSwitchDesktopToWinlogon 関数へのポインター。
WlxChangePasswordNotifyPWLX_CHANGE_PASSWORD_NOTIFY8/4+96+48WlxChangePasswordNotify 関数へのポインター。

公式ドキュメント

[WLX_DISPATCH_VERSION_1_0 構造体は、Windows Server 2008 および Windows Vista 以降では使用できなくなりました。]

WLX_DISPATCH_VERSION_1_0 構造体は、WlxInitialize の呼び出しで GINA DLL に渡される Winlogon バージョン 1.0 関数ディスパッチテーブルの形式を定義します。

このディスパッチテーブルは、GINA DLL が WlxNegotiate の実装でバージョン 1.0 を指定した場合に使用されます。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での定義

#include <windows.h>

// WLX_DISPATCH_VERSION_1_0  (x64 104 / x86 52 バイト)
typedef struct WLX_DISPATCH_VERSION_1_0 {
    PWLX_USE_CTRL_ALT_DEL WlxUseCtrlAltDel;
    PWLX_SET_CONTEXT_POINTER WlxSetContextPointer;
    PWLX_SAS_NOTIFY WlxSasNotify;
    PWLX_SET_TIMEOUT WlxSetTimeout;
    PWLX_ASSIGN_SHELL_PROTECTION WlxAssignShellProtection;
    PWLX_MESSAGE_BOX WlxMessageBox;
    PWLX_DIALOG_BOX WlxDialogBox;
    PWLX_DIALOG_BOX_PARAM WlxDialogBoxParam;
    PWLX_DIALOG_BOX_INDIRECT WlxDialogBoxIndirect;
    PWLX_DIALOG_BOX_INDIRECT_PARAM WlxDialogBoxIndirectParam;
    PWLX_SWITCH_DESKTOP_TO_USER WlxSwitchDesktopToUser;
    PWLX_SWITCH_DESKTOP_TO_WINLOGON WlxSwitchDesktopToWinlogon;
    PWLX_CHANGE_PASSWORD_NOTIFY WlxChangePasswordNotify;
} WLX_DISPATCH_VERSION_1_0;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WLX_DISPATCH_VERSION_1_0
{
    public IntPtr WlxUseCtrlAltDel;
    public IntPtr WlxSetContextPointer;
    public IntPtr WlxSasNotify;
    public IntPtr WlxSetTimeout;
    public IntPtr WlxAssignShellProtection;
    public IntPtr WlxMessageBox;
    public IntPtr WlxDialogBox;
    public IntPtr WlxDialogBoxParam;
    public IntPtr WlxDialogBoxIndirect;
    public IntPtr WlxDialogBoxIndirectParam;
    public IntPtr WlxSwitchDesktopToUser;
    public IntPtr WlxSwitchDesktopToWinlogon;
    public IntPtr WlxChangePasswordNotify;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WLX_DISPATCH_VERSION_1_0
    Public WlxUseCtrlAltDel As IntPtr
    Public WlxSetContextPointer As IntPtr
    Public WlxSasNotify As IntPtr
    Public WlxSetTimeout As IntPtr
    Public WlxAssignShellProtection As IntPtr
    Public WlxMessageBox As IntPtr
    Public WlxDialogBox As IntPtr
    Public WlxDialogBoxParam As IntPtr
    Public WlxDialogBoxIndirect As IntPtr
    Public WlxDialogBoxIndirectParam As IntPtr
    Public WlxSwitchDesktopToUser As IntPtr
    Public WlxSwitchDesktopToWinlogon As IntPtr
    Public WlxChangePasswordNotify As IntPtr
End Structure
import ctypes
from ctypes import wintypes

class WLX_DISPATCH_VERSION_1_0(ctypes.Structure):
    _fields_ = [
        ("WlxUseCtrlAltDel", ctypes.c_void_p),
        ("WlxSetContextPointer", ctypes.c_void_p),
        ("WlxSasNotify", ctypes.c_void_p),
        ("WlxSetTimeout", ctypes.c_void_p),
        ("WlxAssignShellProtection", ctypes.c_void_p),
        ("WlxMessageBox", ctypes.c_void_p),
        ("WlxDialogBox", ctypes.c_void_p),
        ("WlxDialogBoxParam", ctypes.c_void_p),
        ("WlxDialogBoxIndirect", ctypes.c_void_p),
        ("WlxDialogBoxIndirectParam", ctypes.c_void_p),
        ("WlxSwitchDesktopToUser", ctypes.c_void_p),
        ("WlxSwitchDesktopToWinlogon", ctypes.c_void_p),
        ("WlxChangePasswordNotify", ctypes.c_void_p),
    ]
#[repr(C)]
pub struct WLX_DISPATCH_VERSION_1_0 {
    pub WlxUseCtrlAltDel: *mut core::ffi::c_void,
    pub WlxSetContextPointer: *mut core::ffi::c_void,
    pub WlxSasNotify: *mut core::ffi::c_void,
    pub WlxSetTimeout: *mut core::ffi::c_void,
    pub WlxAssignShellProtection: *mut core::ffi::c_void,
    pub WlxMessageBox: *mut core::ffi::c_void,
    pub WlxDialogBox: *mut core::ffi::c_void,
    pub WlxDialogBoxParam: *mut core::ffi::c_void,
    pub WlxDialogBoxIndirect: *mut core::ffi::c_void,
    pub WlxDialogBoxIndirectParam: *mut core::ffi::c_void,
    pub WlxSwitchDesktopToUser: *mut core::ffi::c_void,
    pub WlxSwitchDesktopToWinlogon: *mut core::ffi::c_void,
    pub WlxChangePasswordNotify: *mut core::ffi::c_void,
}
import "golang.org/x/sys/windows"

type WLX_DISPATCH_VERSION_1_0 struct {
	WlxUseCtrlAltDel uintptr
	WlxSetContextPointer uintptr
	WlxSasNotify uintptr
	WlxSetTimeout uintptr
	WlxAssignShellProtection uintptr
	WlxMessageBox uintptr
	WlxDialogBox uintptr
	WlxDialogBoxParam uintptr
	WlxDialogBoxIndirect uintptr
	WlxDialogBoxIndirectParam uintptr
	WlxSwitchDesktopToUser uintptr
	WlxSwitchDesktopToWinlogon uintptr
	WlxChangePasswordNotify uintptr
}
type
  WLX_DISPATCH_VERSION_1_0 = record
    WlxUseCtrlAltDel: Pointer;
    WlxSetContextPointer: Pointer;
    WlxSasNotify: Pointer;
    WlxSetTimeout: Pointer;
    WlxAssignShellProtection: Pointer;
    WlxMessageBox: Pointer;
    WlxDialogBox: Pointer;
    WlxDialogBoxParam: Pointer;
    WlxDialogBoxIndirect: Pointer;
    WlxDialogBoxIndirectParam: Pointer;
    WlxSwitchDesktopToUser: Pointer;
    WlxSwitchDesktopToWinlogon: Pointer;
    WlxChangePasswordNotify: Pointer;
  end;
const WLX_DISPATCH_VERSION_1_0 = extern struct {
    WlxUseCtrlAltDel: ?*anyopaque,
    WlxSetContextPointer: ?*anyopaque,
    WlxSasNotify: ?*anyopaque,
    WlxSetTimeout: ?*anyopaque,
    WlxAssignShellProtection: ?*anyopaque,
    WlxMessageBox: ?*anyopaque,
    WlxDialogBox: ?*anyopaque,
    WlxDialogBoxParam: ?*anyopaque,
    WlxDialogBoxIndirect: ?*anyopaque,
    WlxDialogBoxIndirectParam: ?*anyopaque,
    WlxSwitchDesktopToUser: ?*anyopaque,
    WlxSwitchDesktopToWinlogon: ?*anyopaque,
    WlxChangePasswordNotify: ?*anyopaque,
};
type
  WLX_DISPATCH_VERSION_1_0 {.bycopy.} = object
    WlxUseCtrlAltDel: pointer
    WlxSetContextPointer: pointer
    WlxSasNotify: pointer
    WlxSetTimeout: pointer
    WlxAssignShellProtection: pointer
    WlxMessageBox: pointer
    WlxDialogBox: pointer
    WlxDialogBoxParam: pointer
    WlxDialogBoxIndirect: pointer
    WlxDialogBoxIndirectParam: pointer
    WlxSwitchDesktopToUser: pointer
    WlxSwitchDesktopToWinlogon: pointer
    WlxChangePasswordNotify: pointer
struct WLX_DISPATCH_VERSION_1_0
{
    void* WlxUseCtrlAltDel;
    void* WlxSetContextPointer;
    void* WlxSasNotify;
    void* WlxSetTimeout;
    void* WlxAssignShellProtection;
    void* WlxMessageBox;
    void* WlxDialogBox;
    void* WlxDialogBoxParam;
    void* WlxDialogBoxIndirect;
    void* WlxDialogBoxIndirectParam;
    void* WlxSwitchDesktopToUser;
    void* WlxSwitchDesktopToWinlogon;
    void* WlxChangePasswordNotify;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; WLX_DISPATCH_VERSION_1_0 サイズ: 52 バイト(x86)
dim st, 13    ; 4byte整数×13(構造体サイズ 52 / 4 切り上げ)
; WlxUseCtrlAltDel : PWLX_USE_CTRL_ALT_DEL (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; WlxSetContextPointer : PWLX_SET_CONTEXT_POINTER (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; WlxSasNotify : PWLX_SAS_NOTIFY (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; WlxSetTimeout : PWLX_SET_TIMEOUT (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; WlxAssignShellProtection : PWLX_ASSIGN_SHELL_PROTECTION (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; WlxMessageBox : PWLX_MESSAGE_BOX (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; WlxDialogBox : PWLX_DIALOG_BOX (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; WlxDialogBoxParam : PWLX_DIALOG_BOX_PARAM (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; WlxDialogBoxIndirect : PWLX_DIALOG_BOX_INDIRECT (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; WlxDialogBoxIndirectParam : PWLX_DIALOG_BOX_INDIRECT_PARAM (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; WlxSwitchDesktopToUser : PWLX_SWITCH_DESKTOP_TO_USER (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; WlxSwitchDesktopToWinlogon : PWLX_SWITCH_DESKTOP_TO_WINLOGON (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; WlxChangePasswordNotify : PWLX_CHANGE_PASSWORD_NOTIFY (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; WLX_DISPATCH_VERSION_1_0 サイズ: 104 バイト(x64)
dim st, 26    ; 4byte整数×26(構造体サイズ 104 / 4 切り上げ)
; WlxUseCtrlAltDel : PWLX_USE_CTRL_ALT_DEL (+0, 8byte)  qpoke st,0,値 / qpeek(st,0)  ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; WlxSetContextPointer : PWLX_SET_CONTEXT_POINTER (+8, 8byte)  qpoke st,8,値 / qpeek(st,8)  ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; WlxSasNotify : PWLX_SAS_NOTIFY (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; WlxSetTimeout : PWLX_SET_TIMEOUT (+24, 8byte)  qpoke st,24,値 / qpeek(st,24)  ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; WlxAssignShellProtection : PWLX_ASSIGN_SHELL_PROTECTION (+32, 8byte)  qpoke st,32,値 / qpeek(st,32)  ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; WlxMessageBox : PWLX_MESSAGE_BOX (+40, 8byte)  qpoke st,40,値 / qpeek(st,40)  ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; WlxDialogBox : PWLX_DIALOG_BOX (+48, 8byte)  qpoke st,48,値 / qpeek(st,48)  ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; WlxDialogBoxParam : PWLX_DIALOG_BOX_PARAM (+56, 8byte)  qpoke st,56,値 / qpeek(st,56)  ※IronHSPのみ。3.7/3.8は lpoke st,56,下位 : lpoke st,60,上位
; WlxDialogBoxIndirect : PWLX_DIALOG_BOX_INDIRECT (+64, 8byte)  qpoke st,64,値 / qpeek(st,64)  ※IronHSPのみ。3.7/3.8は lpoke st,64,下位 : lpoke st,68,上位
; WlxDialogBoxIndirectParam : PWLX_DIALOG_BOX_INDIRECT_PARAM (+72, 8byte)  qpoke st,72,値 / qpeek(st,72)  ※IronHSPのみ。3.7/3.8は lpoke st,72,下位 : lpoke st,76,上位
; WlxSwitchDesktopToUser : PWLX_SWITCH_DESKTOP_TO_USER (+80, 8byte)  qpoke st,80,値 / qpeek(st,80)  ※IronHSPのみ。3.7/3.8は lpoke st,80,下位 : lpoke st,84,上位
; WlxSwitchDesktopToWinlogon : PWLX_SWITCH_DESKTOP_TO_WINLOGON (+88, 8byte)  qpoke st,88,値 / qpeek(st,88)  ※IronHSPのみ。3.7/3.8は lpoke st,88,下位 : lpoke st,92,上位
; WlxChangePasswordNotify : PWLX_CHANGE_PASSWORD_NOTIFY (+96, 8byte)  qpoke st,96,値 / qpeek(st,96)  ※IronHSPのみ。3.7/3.8は lpoke st,96,下位 : lpoke st,100,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global WLX_DISPATCH_VERSION_1_0
    #field intptr WlxUseCtrlAltDel
    #field intptr WlxSetContextPointer
    #field intptr WlxSasNotify
    #field intptr WlxSetTimeout
    #field intptr WlxAssignShellProtection
    #field intptr WlxMessageBox
    #field intptr WlxDialogBox
    #field intptr WlxDialogBoxParam
    #field intptr WlxDialogBoxIndirect
    #field intptr WlxDialogBoxIndirectParam
    #field intptr WlxSwitchDesktopToUser
    #field intptr WlxSwitchDesktopToWinlogon
    #field intptr WlxChangePasswordNotify
#endstruct

stdim st, WLX_DISPATCH_VERSION_1_0        ; NSTRUCT 変数を確保