ホーム › Networking.WinSock › NSPV2_ROUTINE
NSPV2_ROUTINE
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| cbSize | DWORD | 4 | +0 | +0 | この構造体のサイズをバイト単位で示す。 |
| dwMajorVersion | DWORD | 4 | +4 | +4 | NSPv2ルーチンのメジャーバージョンを示す。 |
| dwMinorVersion | DWORD | 4 | +8 | +8 | NSPv2ルーチンのマイナーバージョンを示す。 |
| NSPv2Startup | LPNSPV2STARTUP | 8/4 | +16 | +12 | NSPv2Startup関数へのポインタ。プロバイダを初期化する。 |
| NSPv2Cleanup | LPNSPV2CLEANUP | 8/4 | +24 | +16 | NSPv2Cleanup関数へのポインタ。プロバイダを終了する。 |
| NSPv2LookupServiceBegin | LPNSPV2LOOKUPSERVICEBEGIN | 8/4 | +32 | +20 | NSPv2LookupServiceBegin関数へのポインタ。サービス照会を開始する。 |
| NSPv2LookupServiceNextEx | LPNSPV2LOOKUPSERVICENEXTEX | 8/4 | +40 | +24 | NSPv2LookupServiceNextEx関数へのポインタ。次の照会結果を取得する。 |
| NSPv2LookupServiceEnd | LPNSPV2LOOKUPSERVICEEND | 8/4 | +48 | +28 | NSPv2LookupServiceEnd関数へのポインタ。照会を終了する。 |
| NSPv2SetServiceEx | LPNSPV2SETSERVICEEX | 8/4 | +56 | +32 | NSPv2SetServiceEx関数へのポインタ。サービスを登録/解除する。 |
| NSPv2ClientSessionRundown | LPNSPV2CLIENTSESSIONRUNDOWN | 8/4 | +64 | +36 | NSPv2ClientSessionRundown関数へのポインタ。クライアントセッションを後始末する。 |
各言語での定義
#include <windows.h>
// NSPV2_ROUTINE (x64 72 / x86 40 バイト)
typedef struct NSPV2_ROUTINE {
DWORD cbSize;
DWORD dwMajorVersion;
DWORD dwMinorVersion;
LPNSPV2STARTUP NSPv2Startup;
LPNSPV2CLEANUP NSPv2Cleanup;
LPNSPV2LOOKUPSERVICEBEGIN NSPv2LookupServiceBegin;
LPNSPV2LOOKUPSERVICENEXTEX NSPv2LookupServiceNextEx;
LPNSPV2LOOKUPSERVICEEND NSPv2LookupServiceEnd;
LPNSPV2SETSERVICEEX NSPv2SetServiceEx;
LPNSPV2CLIENTSESSIONRUNDOWN NSPv2ClientSessionRundown;
} NSPV2_ROUTINE;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct NSPV2_ROUTINE
{
public uint cbSize;
public uint dwMajorVersion;
public uint dwMinorVersion;
public IntPtr NSPv2Startup;
public IntPtr NSPv2Cleanup;
public IntPtr NSPv2LookupServiceBegin;
public IntPtr NSPv2LookupServiceNextEx;
public IntPtr NSPv2LookupServiceEnd;
public IntPtr NSPv2SetServiceEx;
public IntPtr NSPv2ClientSessionRundown;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure NSPV2_ROUTINE
Public cbSize As UInteger
Public dwMajorVersion As UInteger
Public dwMinorVersion As UInteger
Public NSPv2Startup As IntPtr
Public NSPv2Cleanup As IntPtr
Public NSPv2LookupServiceBegin As IntPtr
Public NSPv2LookupServiceNextEx As IntPtr
Public NSPv2LookupServiceEnd As IntPtr
Public NSPv2SetServiceEx As IntPtr
Public NSPv2ClientSessionRundown As IntPtr
End Structureimport ctypes
from ctypes import wintypes
class NSPV2_ROUTINE(ctypes.Structure):
_fields_ = [
("cbSize", wintypes.DWORD),
("dwMajorVersion", wintypes.DWORD),
("dwMinorVersion", wintypes.DWORD),
("NSPv2Startup", ctypes.c_void_p),
("NSPv2Cleanup", ctypes.c_void_p),
("NSPv2LookupServiceBegin", ctypes.c_void_p),
("NSPv2LookupServiceNextEx", ctypes.c_void_p),
("NSPv2LookupServiceEnd", ctypes.c_void_p),
("NSPv2SetServiceEx", ctypes.c_void_p),
("NSPv2ClientSessionRundown", ctypes.c_void_p),
]#[repr(C)]
pub struct NSPV2_ROUTINE {
pub cbSize: u32,
pub dwMajorVersion: u32,
pub dwMinorVersion: u32,
pub NSPv2Startup: *mut core::ffi::c_void,
pub NSPv2Cleanup: *mut core::ffi::c_void,
pub NSPv2LookupServiceBegin: *mut core::ffi::c_void,
pub NSPv2LookupServiceNextEx: *mut core::ffi::c_void,
pub NSPv2LookupServiceEnd: *mut core::ffi::c_void,
pub NSPv2SetServiceEx: *mut core::ffi::c_void,
pub NSPv2ClientSessionRundown: *mut core::ffi::c_void,
}import "golang.org/x/sys/windows"
type NSPV2_ROUTINE struct {
cbSize uint32
dwMajorVersion uint32
dwMinorVersion uint32
NSPv2Startup uintptr
NSPv2Cleanup uintptr
NSPv2LookupServiceBegin uintptr
NSPv2LookupServiceNextEx uintptr
NSPv2LookupServiceEnd uintptr
NSPv2SetServiceEx uintptr
NSPv2ClientSessionRundown uintptr
}type
NSPV2_ROUTINE = record
cbSize: DWORD;
dwMajorVersion: DWORD;
dwMinorVersion: DWORD;
NSPv2Startup: Pointer;
NSPv2Cleanup: Pointer;
NSPv2LookupServiceBegin: Pointer;
NSPv2LookupServiceNextEx: Pointer;
NSPv2LookupServiceEnd: Pointer;
NSPv2SetServiceEx: Pointer;
NSPv2ClientSessionRundown: Pointer;
end;const NSPV2_ROUTINE = extern struct {
cbSize: u32,
dwMajorVersion: u32,
dwMinorVersion: u32,
NSPv2Startup: ?*anyopaque,
NSPv2Cleanup: ?*anyopaque,
NSPv2LookupServiceBegin: ?*anyopaque,
NSPv2LookupServiceNextEx: ?*anyopaque,
NSPv2LookupServiceEnd: ?*anyopaque,
NSPv2SetServiceEx: ?*anyopaque,
NSPv2ClientSessionRundown: ?*anyopaque,
};type
NSPV2_ROUTINE {.bycopy.} = object
cbSize: uint32
dwMajorVersion: uint32
dwMinorVersion: uint32
NSPv2Startup: pointer
NSPv2Cleanup: pointer
NSPv2LookupServiceBegin: pointer
NSPv2LookupServiceNextEx: pointer
NSPv2LookupServiceEnd: pointer
NSPv2SetServiceEx: pointer
NSPv2ClientSessionRundown: pointerstruct NSPV2_ROUTINE
{
uint cbSize;
uint dwMajorVersion;
uint dwMinorVersion;
void* NSPv2Startup;
void* NSPv2Cleanup;
void* NSPv2LookupServiceBegin;
void* NSPv2LookupServiceNextEx;
void* NSPv2LookupServiceEnd;
void* NSPv2SetServiceEx;
void* NSPv2ClientSessionRundown;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; NSPV2_ROUTINE サイズ: 40 バイト(x86)
dim st, 10 ; 4byte整数×10(構造体サイズ 40 / 4 切り上げ)
; cbSize : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; dwMajorVersion : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; dwMinorVersion : DWORD (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; NSPv2Startup : LPNSPV2STARTUP (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; NSPv2Cleanup : LPNSPV2CLEANUP (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; NSPv2LookupServiceBegin : LPNSPV2LOOKUPSERVICEBEGIN (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; NSPv2LookupServiceNextEx : LPNSPV2LOOKUPSERVICENEXTEX (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; NSPv2LookupServiceEnd : LPNSPV2LOOKUPSERVICEEND (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; NSPv2SetServiceEx : LPNSPV2SETSERVICEEX (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; NSPv2ClientSessionRundown : LPNSPV2CLIENTSESSIONRUNDOWN (+36, 4byte) st.9 = 値 / 値 = st.9 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; NSPV2_ROUTINE サイズ: 72 バイト(x64)
dim st, 18 ; 4byte整数×18(構造体サイズ 72 / 4 切り上げ)
; cbSize : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; dwMajorVersion : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; dwMinorVersion : DWORD (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; NSPv2Startup : LPNSPV2STARTUP (+16, 8byte) qpoke st,16,値 / qpeek(st,16) ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; NSPv2Cleanup : LPNSPV2CLEANUP (+24, 8byte) qpoke st,24,値 / qpeek(st,24) ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; NSPv2LookupServiceBegin : LPNSPV2LOOKUPSERVICEBEGIN (+32, 8byte) qpoke st,32,値 / qpeek(st,32) ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; NSPv2LookupServiceNextEx : LPNSPV2LOOKUPSERVICENEXTEX (+40, 8byte) qpoke st,40,値 / qpeek(st,40) ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; NSPv2LookupServiceEnd : LPNSPV2LOOKUPSERVICEEND (+48, 8byte) qpoke st,48,値 / qpeek(st,48) ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; NSPv2SetServiceEx : LPNSPV2SETSERVICEEX (+56, 8byte) qpoke st,56,値 / qpeek(st,56) ※IronHSPのみ。3.7/3.8は lpoke st,56,下位 : lpoke st,60,上位
; NSPv2ClientSessionRundown : LPNSPV2CLIENTSESSIONRUNDOWN (+64, 8byte) qpoke st,64,値 / qpeek(st,64) ※IronHSPのみ。3.7/3.8は lpoke st,64,下位 : lpoke st,68,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global NSPV2_ROUTINE
#field int cbSize
#field int dwMajorVersion
#field int dwMinorVersion
#field intptr NSPv2Startup
#field intptr NSPv2Cleanup
#field intptr NSPv2LookupServiceBegin
#field intptr NSPv2LookupServiceNextEx
#field intptr NSPv2LookupServiceEnd
#field intptr NSPv2SetServiceEx
#field intptr NSPv2ClientSessionRundown
#endstruct
stdim st, NSPV2_ROUTINE ; NSTRUCT 変数を確保
st->cbSize = 100
mes "cbSize=" + st->cbSize