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

NSPV2_ROUTINE

構造体
サイズx64: 72 バイト / x86: 40 バイト

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

フィールド

フィールドサイズx64x86説明
cbSizeDWORD4+0+0この構造体のサイズをバイト単位で示す。
dwMajorVersionDWORD4+4+4NSPv2ルーチンのメジャーバージョンを示す。
dwMinorVersionDWORD4+8+8NSPv2ルーチンのマイナーバージョンを示す。
NSPv2StartupLPNSPV2STARTUP8/4+16+12NSPv2Startup関数へのポインタ。プロバイダを初期化する。
NSPv2CleanupLPNSPV2CLEANUP8/4+24+16NSPv2Cleanup関数へのポインタ。プロバイダを終了する。
NSPv2LookupServiceBeginLPNSPV2LOOKUPSERVICEBEGIN8/4+32+20NSPv2LookupServiceBegin関数へのポインタ。サービス照会を開始する。
NSPv2LookupServiceNextExLPNSPV2LOOKUPSERVICENEXTEX8/4+40+24NSPv2LookupServiceNextEx関数へのポインタ。次の照会結果を取得する。
NSPv2LookupServiceEndLPNSPV2LOOKUPSERVICEEND8/4+48+28NSPv2LookupServiceEnd関数へのポインタ。照会を終了する。
NSPv2SetServiceExLPNSPV2SETSERVICEEX8/4+56+32NSPv2SetServiceEx関数へのポインタ。サービスを登録/解除する。
NSPv2ClientSessionRundownLPNSPV2CLIENTSESSIONRUNDOWN8/4+64+36NSPv2ClientSessionRundown関数へのポインタ。クライアントセッションを後始末する。

各言語での定義

#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 Structure
import 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: pointer
struct 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