Win32 API 日本語リファレンス
ホームNetworking.WinSock › WSPUPCALLTABLE

WSPUPCALLTABLE

構造体
サイズx64: 120 バイト / x86: 60 バイト

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

フィールド

フィールドサイズx64x86説明
lpWPUCloseEventLPWPUCLOSEEVENT8/4+0+0WPUCloseEvent関数へのポインタ。イベントオブジェクトを閉じる。
lpWPUCloseSocketHandleLPWPUCLOSESOCKETHANDLE8/4+8+4WPUCloseSocketHandle関数へのポインタ。ソケットハンドルを閉じる。
lpWPUCreateEventLPWPUCREATEEVENT8/4+16+8WPUCreateEvent関数へのポインタ。イベントオブジェクトを作成する。
lpWPUCreateSocketHandleLPWPUCREATESOCKETHANDLE8/4+24+12WPUCreateSocketHandle関数へのポインタ。ソケットハンドルを作成する。
lpWPUFDIsSetLPWPUFDISSET8/4+32+16WPUFDIsSet関数へのポインタ。fd_set内のソケット有無を判定する。
lpWPUGetProviderPathLPWPUGETPROVIDERPATH8/4+40+20WPUGetProviderPath関数へのポインタ。プロバイダDLLパスを取得する。
lpWPUModifyIFSHandleLPWPUMODIFYIFSHANDLE8/4+48+24WPUModifyIFSHandle関数へのポインタ。IFSハンドルを変更する。
lpWPUPostMessageLPWPUPOSTMESSAGE8/4+56+28WPUPostMessage関数へのポインタ。ウィンドウへメッセージを投函する。
lpWPUQueryBlockingCallbackLPWPUQUERYBLOCKINGCALLBACK8/4+64+32WPUQueryBlockingCallback関数へのポインタ。ブロッキングコールバックを照会する。
lpWPUQuerySocketHandleContextLPWPUQUERYSOCKETHANDLECONTEXT8/4+72+36WPUQuerySocketHandleContext関数へのポインタ。ソケットのコンテキストを照会する。
lpWPUQueueApcLPWPUQUEUEAPC8/4+80+40WPUQueueApc関数へのポインタ。APCをスレッドにキューする。
lpWPUResetEventLPWPURESETEVENT8/4+88+44WPUResetEvent関数へのポインタ。イベントを非シグナル状態にする。
lpWPUSetEventLPWPUSETEVENT8/4+96+48WPUSetEvent関数へのポインタ。イベントをシグナル状態にする。
lpWPUOpenCurrentThreadLPWPUOPENCURRENTTHREAD8/4+104+52WPUOpenCurrentThread関数へのポインタ。現在のスレッドを開く。
lpWPUCloseThreadLPWPUCLOSETHREAD8/4+112+56WPUCloseThread関数へのポインタ。スレッドハンドルを閉じる。

各言語での定義

#include <windows.h>

// WSPUPCALLTABLE  (x64 120 / x86 60 バイト)
typedef struct WSPUPCALLTABLE {
    LPWPUCLOSEEVENT lpWPUCloseEvent;
    LPWPUCLOSESOCKETHANDLE lpWPUCloseSocketHandle;
    LPWPUCREATEEVENT lpWPUCreateEvent;
    LPWPUCREATESOCKETHANDLE lpWPUCreateSocketHandle;
    LPWPUFDISSET lpWPUFDIsSet;
    LPWPUGETPROVIDERPATH lpWPUGetProviderPath;
    LPWPUMODIFYIFSHANDLE lpWPUModifyIFSHandle;
    LPWPUPOSTMESSAGE lpWPUPostMessage;
    LPWPUQUERYBLOCKINGCALLBACK lpWPUQueryBlockingCallback;
    LPWPUQUERYSOCKETHANDLECONTEXT lpWPUQuerySocketHandleContext;
    LPWPUQUEUEAPC lpWPUQueueApc;
    LPWPURESETEVENT lpWPUResetEvent;
    LPWPUSETEVENT lpWPUSetEvent;
    LPWPUOPENCURRENTTHREAD lpWPUOpenCurrentThread;
    LPWPUCLOSETHREAD lpWPUCloseThread;
} WSPUPCALLTABLE;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WSPUPCALLTABLE
{
    public IntPtr lpWPUCloseEvent;
    public IntPtr lpWPUCloseSocketHandle;
    public IntPtr lpWPUCreateEvent;
    public IntPtr lpWPUCreateSocketHandle;
    public IntPtr lpWPUFDIsSet;
    public IntPtr lpWPUGetProviderPath;
    public IntPtr lpWPUModifyIFSHandle;
    public IntPtr lpWPUPostMessage;
    public IntPtr lpWPUQueryBlockingCallback;
    public IntPtr lpWPUQuerySocketHandleContext;
    public IntPtr lpWPUQueueApc;
    public IntPtr lpWPUResetEvent;
    public IntPtr lpWPUSetEvent;
    public IntPtr lpWPUOpenCurrentThread;
    public IntPtr lpWPUCloseThread;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WSPUPCALLTABLE
    Public lpWPUCloseEvent As IntPtr
    Public lpWPUCloseSocketHandle As IntPtr
    Public lpWPUCreateEvent As IntPtr
    Public lpWPUCreateSocketHandle As IntPtr
    Public lpWPUFDIsSet As IntPtr
    Public lpWPUGetProviderPath As IntPtr
    Public lpWPUModifyIFSHandle As IntPtr
    Public lpWPUPostMessage As IntPtr
    Public lpWPUQueryBlockingCallback As IntPtr
    Public lpWPUQuerySocketHandleContext As IntPtr
    Public lpWPUQueueApc As IntPtr
    Public lpWPUResetEvent As IntPtr
    Public lpWPUSetEvent As IntPtr
    Public lpWPUOpenCurrentThread As IntPtr
    Public lpWPUCloseThread As IntPtr
End Structure
import ctypes
from ctypes import wintypes

class WSPUPCALLTABLE(ctypes.Structure):
    _fields_ = [
        ("lpWPUCloseEvent", ctypes.c_void_p),
        ("lpWPUCloseSocketHandle", ctypes.c_void_p),
        ("lpWPUCreateEvent", ctypes.c_void_p),
        ("lpWPUCreateSocketHandle", ctypes.c_void_p),
        ("lpWPUFDIsSet", ctypes.c_void_p),
        ("lpWPUGetProviderPath", ctypes.c_void_p),
        ("lpWPUModifyIFSHandle", ctypes.c_void_p),
        ("lpWPUPostMessage", ctypes.c_void_p),
        ("lpWPUQueryBlockingCallback", ctypes.c_void_p),
        ("lpWPUQuerySocketHandleContext", ctypes.c_void_p),
        ("lpWPUQueueApc", ctypes.c_void_p),
        ("lpWPUResetEvent", ctypes.c_void_p),
        ("lpWPUSetEvent", ctypes.c_void_p),
        ("lpWPUOpenCurrentThread", ctypes.c_void_p),
        ("lpWPUCloseThread", ctypes.c_void_p),
    ]
#[repr(C)]
pub struct WSPUPCALLTABLE {
    pub lpWPUCloseEvent: *mut core::ffi::c_void,
    pub lpWPUCloseSocketHandle: *mut core::ffi::c_void,
    pub lpWPUCreateEvent: *mut core::ffi::c_void,
    pub lpWPUCreateSocketHandle: *mut core::ffi::c_void,
    pub lpWPUFDIsSet: *mut core::ffi::c_void,
    pub lpWPUGetProviderPath: *mut core::ffi::c_void,
    pub lpWPUModifyIFSHandle: *mut core::ffi::c_void,
    pub lpWPUPostMessage: *mut core::ffi::c_void,
    pub lpWPUQueryBlockingCallback: *mut core::ffi::c_void,
    pub lpWPUQuerySocketHandleContext: *mut core::ffi::c_void,
    pub lpWPUQueueApc: *mut core::ffi::c_void,
    pub lpWPUResetEvent: *mut core::ffi::c_void,
    pub lpWPUSetEvent: *mut core::ffi::c_void,
    pub lpWPUOpenCurrentThread: *mut core::ffi::c_void,
    pub lpWPUCloseThread: *mut core::ffi::c_void,
}
import "golang.org/x/sys/windows"

type WSPUPCALLTABLE struct {
	lpWPUCloseEvent uintptr
	lpWPUCloseSocketHandle uintptr
	lpWPUCreateEvent uintptr
	lpWPUCreateSocketHandle uintptr
	lpWPUFDIsSet uintptr
	lpWPUGetProviderPath uintptr
	lpWPUModifyIFSHandle uintptr
	lpWPUPostMessage uintptr
	lpWPUQueryBlockingCallback uintptr
	lpWPUQuerySocketHandleContext uintptr
	lpWPUQueueApc uintptr
	lpWPUResetEvent uintptr
	lpWPUSetEvent uintptr
	lpWPUOpenCurrentThread uintptr
	lpWPUCloseThread uintptr
}
type
  WSPUPCALLTABLE = record
    lpWPUCloseEvent: Pointer;
    lpWPUCloseSocketHandle: Pointer;
    lpWPUCreateEvent: Pointer;
    lpWPUCreateSocketHandle: Pointer;
    lpWPUFDIsSet: Pointer;
    lpWPUGetProviderPath: Pointer;
    lpWPUModifyIFSHandle: Pointer;
    lpWPUPostMessage: Pointer;
    lpWPUQueryBlockingCallback: Pointer;
    lpWPUQuerySocketHandleContext: Pointer;
    lpWPUQueueApc: Pointer;
    lpWPUResetEvent: Pointer;
    lpWPUSetEvent: Pointer;
    lpWPUOpenCurrentThread: Pointer;
    lpWPUCloseThread: Pointer;
  end;
const WSPUPCALLTABLE = extern struct {
    lpWPUCloseEvent: ?*anyopaque,
    lpWPUCloseSocketHandle: ?*anyopaque,
    lpWPUCreateEvent: ?*anyopaque,
    lpWPUCreateSocketHandle: ?*anyopaque,
    lpWPUFDIsSet: ?*anyopaque,
    lpWPUGetProviderPath: ?*anyopaque,
    lpWPUModifyIFSHandle: ?*anyopaque,
    lpWPUPostMessage: ?*anyopaque,
    lpWPUQueryBlockingCallback: ?*anyopaque,
    lpWPUQuerySocketHandleContext: ?*anyopaque,
    lpWPUQueueApc: ?*anyopaque,
    lpWPUResetEvent: ?*anyopaque,
    lpWPUSetEvent: ?*anyopaque,
    lpWPUOpenCurrentThread: ?*anyopaque,
    lpWPUCloseThread: ?*anyopaque,
};
type
  WSPUPCALLTABLE {.bycopy.} = object
    lpWPUCloseEvent: pointer
    lpWPUCloseSocketHandle: pointer
    lpWPUCreateEvent: pointer
    lpWPUCreateSocketHandle: pointer
    lpWPUFDIsSet: pointer
    lpWPUGetProviderPath: pointer
    lpWPUModifyIFSHandle: pointer
    lpWPUPostMessage: pointer
    lpWPUQueryBlockingCallback: pointer
    lpWPUQuerySocketHandleContext: pointer
    lpWPUQueueApc: pointer
    lpWPUResetEvent: pointer
    lpWPUSetEvent: pointer
    lpWPUOpenCurrentThread: pointer
    lpWPUCloseThread: pointer
struct WSPUPCALLTABLE
{
    void* lpWPUCloseEvent;
    void* lpWPUCloseSocketHandle;
    void* lpWPUCreateEvent;
    void* lpWPUCreateSocketHandle;
    void* lpWPUFDIsSet;
    void* lpWPUGetProviderPath;
    void* lpWPUModifyIFSHandle;
    void* lpWPUPostMessage;
    void* lpWPUQueryBlockingCallback;
    void* lpWPUQuerySocketHandleContext;
    void* lpWPUQueueApc;
    void* lpWPUResetEvent;
    void* lpWPUSetEvent;
    void* lpWPUOpenCurrentThread;
    void* lpWPUCloseThread;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; WSPUPCALLTABLE サイズ: 60 バイト(x86)
dim st, 15    ; 4byte整数×15(構造体サイズ 60 / 4 切り上げ)
; lpWPUCloseEvent : LPWPUCLOSEEVENT (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; lpWPUCloseSocketHandle : LPWPUCLOSESOCKETHANDLE (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; lpWPUCreateEvent : LPWPUCREATEEVENT (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; lpWPUCreateSocketHandle : LPWPUCREATESOCKETHANDLE (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; lpWPUFDIsSet : LPWPUFDISSET (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; lpWPUGetProviderPath : LPWPUGETPROVIDERPATH (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; lpWPUModifyIFSHandle : LPWPUMODIFYIFSHANDLE (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; lpWPUPostMessage : LPWPUPOSTMESSAGE (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; lpWPUQueryBlockingCallback : LPWPUQUERYBLOCKINGCALLBACK (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; lpWPUQuerySocketHandleContext : LPWPUQUERYSOCKETHANDLECONTEXT (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; lpWPUQueueApc : LPWPUQUEUEAPC (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; lpWPUResetEvent : LPWPURESETEVENT (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; lpWPUSetEvent : LPWPUSETEVENT (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; lpWPUOpenCurrentThread : LPWPUOPENCURRENTTHREAD (+52, 4byte)  st.13 = 値  /  値 = st.13   (lpoke/lpeek も可)
; lpWPUCloseThread : LPWPUCLOSETHREAD (+56, 4byte)  st.14 = 値  /  値 = st.14   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; WSPUPCALLTABLE サイズ: 120 バイト(x64)
dim st, 30    ; 4byte整数×30(構造体サイズ 120 / 4 切り上げ)
; lpWPUCloseEvent : LPWPUCLOSEEVENT (+0, 8byte)  qpoke st,0,値 / qpeek(st,0)  ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; lpWPUCloseSocketHandle : LPWPUCLOSESOCKETHANDLE (+8, 8byte)  qpoke st,8,値 / qpeek(st,8)  ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; lpWPUCreateEvent : LPWPUCREATEEVENT (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; lpWPUCreateSocketHandle : LPWPUCREATESOCKETHANDLE (+24, 8byte)  qpoke st,24,値 / qpeek(st,24)  ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; lpWPUFDIsSet : LPWPUFDISSET (+32, 8byte)  qpoke st,32,値 / qpeek(st,32)  ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; lpWPUGetProviderPath : LPWPUGETPROVIDERPATH (+40, 8byte)  qpoke st,40,値 / qpeek(st,40)  ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; lpWPUModifyIFSHandle : LPWPUMODIFYIFSHANDLE (+48, 8byte)  qpoke st,48,値 / qpeek(st,48)  ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; lpWPUPostMessage : LPWPUPOSTMESSAGE (+56, 8byte)  qpoke st,56,値 / qpeek(st,56)  ※IronHSPのみ。3.7/3.8は lpoke st,56,下位 : lpoke st,60,上位
; lpWPUQueryBlockingCallback : LPWPUQUERYBLOCKINGCALLBACK (+64, 8byte)  qpoke st,64,値 / qpeek(st,64)  ※IronHSPのみ。3.7/3.8は lpoke st,64,下位 : lpoke st,68,上位
; lpWPUQuerySocketHandleContext : LPWPUQUERYSOCKETHANDLECONTEXT (+72, 8byte)  qpoke st,72,値 / qpeek(st,72)  ※IronHSPのみ。3.7/3.8は lpoke st,72,下位 : lpoke st,76,上位
; lpWPUQueueApc : LPWPUQUEUEAPC (+80, 8byte)  qpoke st,80,値 / qpeek(st,80)  ※IronHSPのみ。3.7/3.8は lpoke st,80,下位 : lpoke st,84,上位
; lpWPUResetEvent : LPWPURESETEVENT (+88, 8byte)  qpoke st,88,値 / qpeek(st,88)  ※IronHSPのみ。3.7/3.8は lpoke st,88,下位 : lpoke st,92,上位
; lpWPUSetEvent : LPWPUSETEVENT (+96, 8byte)  qpoke st,96,値 / qpeek(st,96)  ※IronHSPのみ。3.7/3.8は lpoke st,96,下位 : lpoke st,100,上位
; lpWPUOpenCurrentThread : LPWPUOPENCURRENTTHREAD (+104, 8byte)  qpoke st,104,値 / qpeek(st,104)  ※IronHSPのみ。3.7/3.8は lpoke st,104,下位 : lpoke st,108,上位
; lpWPUCloseThread : LPWPUCLOSETHREAD (+112, 8byte)  qpoke st,112,値 / qpeek(st,112)  ※IronHSPのみ。3.7/3.8は lpoke st,112,下位 : lpoke st,116,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global WSPUPCALLTABLE
    #field intptr lpWPUCloseEvent
    #field intptr lpWPUCloseSocketHandle
    #field intptr lpWPUCreateEvent
    #field intptr lpWPUCreateSocketHandle
    #field intptr lpWPUFDIsSet
    #field intptr lpWPUGetProviderPath
    #field intptr lpWPUModifyIFSHandle
    #field intptr lpWPUPostMessage
    #field intptr lpWPUQueryBlockingCallback
    #field intptr lpWPUQuerySocketHandleContext
    #field intptr lpWPUQueueApc
    #field intptr lpWPUResetEvent
    #field intptr lpWPUSetEvent
    #field intptr lpWPUOpenCurrentThread
    #field intptr lpWPUCloseThread
#endstruct

stdim st, WSPUPCALLTABLE        ; NSTRUCT 変数を確保