ホーム › Networking.WinSock › WSPUPCALLTABLE
WSPUPCALLTABLE
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| lpWPUCloseEvent | LPWPUCLOSEEVENT | 8/4 | +0 | +0 | WPUCloseEvent関数へのポインタ。イベントオブジェクトを閉じる。 |
| lpWPUCloseSocketHandle | LPWPUCLOSESOCKETHANDLE | 8/4 | +8 | +4 | WPUCloseSocketHandle関数へのポインタ。ソケットハンドルを閉じる。 |
| lpWPUCreateEvent | LPWPUCREATEEVENT | 8/4 | +16 | +8 | WPUCreateEvent関数へのポインタ。イベントオブジェクトを作成する。 |
| lpWPUCreateSocketHandle | LPWPUCREATESOCKETHANDLE | 8/4 | +24 | +12 | WPUCreateSocketHandle関数へのポインタ。ソケットハンドルを作成する。 |
| lpWPUFDIsSet | LPWPUFDISSET | 8/4 | +32 | +16 | WPUFDIsSet関数へのポインタ。fd_set内のソケット有無を判定する。 |
| lpWPUGetProviderPath | LPWPUGETPROVIDERPATH | 8/4 | +40 | +20 | WPUGetProviderPath関数へのポインタ。プロバイダDLLパスを取得する。 |
| lpWPUModifyIFSHandle | LPWPUMODIFYIFSHANDLE | 8/4 | +48 | +24 | WPUModifyIFSHandle関数へのポインタ。IFSハンドルを変更する。 |
| lpWPUPostMessage | LPWPUPOSTMESSAGE | 8/4 | +56 | +28 | WPUPostMessage関数へのポインタ。ウィンドウへメッセージを投函する。 |
| lpWPUQueryBlockingCallback | LPWPUQUERYBLOCKINGCALLBACK | 8/4 | +64 | +32 | WPUQueryBlockingCallback関数へのポインタ。ブロッキングコールバックを照会する。 |
| lpWPUQuerySocketHandleContext | LPWPUQUERYSOCKETHANDLECONTEXT | 8/4 | +72 | +36 | WPUQuerySocketHandleContext関数へのポインタ。ソケットのコンテキストを照会する。 |
| lpWPUQueueApc | LPWPUQUEUEAPC | 8/4 | +80 | +40 | WPUQueueApc関数へのポインタ。APCをスレッドにキューする。 |
| lpWPUResetEvent | LPWPURESETEVENT | 8/4 | +88 | +44 | WPUResetEvent関数へのポインタ。イベントを非シグナル状態にする。 |
| lpWPUSetEvent | LPWPUSETEVENT | 8/4 | +96 | +48 | WPUSetEvent関数へのポインタ。イベントをシグナル状態にする。 |
| lpWPUOpenCurrentThread | LPWPUOPENCURRENTTHREAD | 8/4 | +104 | +52 | WPUOpenCurrentThread関数へのポインタ。現在のスレッドを開く。 |
| lpWPUCloseThread | LPWPUCLOSETHREAD | 8/4 | +112 | +56 | WPUCloseThread関数へのポインタ。スレッドハンドルを閉じる。 |
各言語での定義
#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 Structureimport 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: pointerstruct 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 変数を確保