ホーム › 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 関数へのポインターです。 |
| lpWPUGetProviderPath | LPWPUGETPROVIDERPATH | 8/4 | +40 | +20 | WPUGetProviderPath 関数へのポインターです。 |
| lpWPUModifyIFSHandle | LPWPUMODIFYIFSHANDLE | 8/4 | +48 | +24 | WPUModifyIFSHandle 関数へのポインターです。 |
| 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 関数へのポインターです。 |
| 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 関数へのポインターです。 |
公式ドキュメント
WSPUPCALLTABLE 構造体は、サービスプロバイダーのアップコール関数へのポインターのテーブルを格納します。
解説(Remarks)
WSPUPCALLTABLE 構造体は、WSPStartup 関数に渡されるサービスプロバイダーのアップコール関数へのポインターのテーブルを格納します。
出典・ライセンス: 上記「公式ドキュメント」の内容は 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>
// 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 変数を確保