WSAQUERYSET2A
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| dwSize | DWORD | 4 | +0 | +0 | WSAQUERYSET2 構造体のサイズ(バイト単位)。WSAQUERYSET2 構造体のサイズは以降のバージョンの Windows で変更される可能性があるため、このメンバーはバージョン管理の仕組みとして使用されます。 |
| lpszServiceInstanceName | LPSTR | 8/4 | +8 | +4 | サービス名を格納する省略可能な NULL 終端文字列へのポインター。この文字列内でワイルドカードを使用する場合のセマンティクスは定義されていませんが、一部のネームスペースプロバイダーではサポートされる場合があります。 |
| lpVersion | WSAVERSION* | 8/4 | +16 | +8 | ネームスペースプロバイダーに対して要求するバージョン番号(省略可能)へのポインター。このメンバーはバージョン比較のセマンティクス(つまり、要求したバージョンと完全に一致しなければならない、またはバージョンが指定した値以上でなければならない)を提供します。 |
| lpszComment | LPSTR | 8/4 | +24 | +12 | このメンバーはクエリでは無視されます。 |
| dwNameSpace | DWORD | 4 | +32 | +16 | どのネームスペースプロバイダーに問い合わせるかを決定するネームスペース識別子。特定のネームスペース識別子を渡すと、指定したネームスペースをサポートするネームスペースプロバイダーだけが問い合わせの対象になります。NS_ALL を指定すると、インストール済みでアクティブなすべてのネームスペースプロバイダーが問い合わせの対象になります。 dwNameSpace メンバーに指定できる値は Winsock2.h インクルードファイルに定義されています。Windows Vista 以降ではいくつかの新しいネームスペースプロバイダーが含まれています。ネームスペースプロバイダーは追加でインストールできるため、次に示す値は一般的に利用できるものに限られます。他にも多くの値が存在し得ます。 |
| lpNSProviderId | GUID* | 8/4 | +40 | +20 | NS_DNS のように 1 つのネームスペースに複数のネームスペースプロバイダーが登録されている場合に、問い合わせ先となる特定のネームスペースプロバイダーの GUID(省略可能)へのポインター。特定のネームスペースプロバイダーの GUID を渡すと、指定したネームスペースプロバイダーだけが問い合わせの対象になります。ネームスペースプロバイダーの GUID を取得するには、WSAEnumNameSpaceProviders 関数または WSAEnumNameSpaceProvidersEx 関数を呼び出します。 |
| lpszContext | LPSTR | 8/4 | +48 | +24 | 階層型ネームスペースにおけるクエリの開始位置(省略可能)へのポインター。 |
| dwNumberOfProtocols | DWORD | 4 | +56 | +28 | プロトコル制約配列のサイズ(バイト単位)。このメンバーは 0 でもかまいません。 |
| lpafpProtocols | AFPROTOCOLS* | 8/4 | +64 | +32 | 省略可能な AFPROTOCOLS 構造体の配列へのポインター。これらのプロトコルを使用するサービスのみが返されます。 |
| lpszQueryString | LPSTR | 8/4 | +72 | +36 | 省略可能な NULL 終端のクエリ文字列へのポインター。Whois++ などの一部のネームスペースでは、単純なテキスト文字列に含まれる SQL に似た高機能なクエリがサポートされます。このパラメーターは、その文字列を指定するために使用します。 |
| dwNumberOfCsAddrs | DWORD | 4 | +80 | +40 | このメンバーはクエリでは無視されます。 |
| lpcsaBuffer | CSADDR_INFO* | 8/4 | +88 | +44 | このメンバーはクエリでは無視されます。 |
| dwOutputFlags | DWORD | 4 | +96 | +48 | このメンバーはクエリでは無視されます。 |
| lpBlob | BLOB* | 8/4 | +104 | +52 | プロバイダー固有のネームスペース情報を問い合わせる、または設定するために使用するデータへの省略可能なポインター。この情報の形式はネームスペースプロバイダーに固有です。 |
公式ドキュメント
WSAQUERYSET2 構造体は、サービスクラス ID、サービス名、適用されるネームスペース識別子とプロトコル情報、およびサービスが待ち受けするトランスポートアドレスの集合など、指定されたサービスに関する情報を提供します。
解説(Remarks)
WSAQUERYSET2 構造体は、Windows Vista 以降で利用できるネームスペースサービスプロバイダーのバージョン 2 (NSPv2) アーキテクチャの一部として使用されます。
Windows Vista および Windows Server 2008 では、WSAQUERYSET2 構造体は NS_EMAIL ネームスペースプロバイダーに対する操作にのみ使用できます。
winsock2.h ヘッダーは WSAQUERYSET2 を、UNICODE プリプロセッサ定数の定義に基づいてこの関数の ANSI 版または Unicode 版を自動的に選択するエイリアスとして定義します。エンコーディング中立のエイリアスの使用と、エンコーディング中立でないコードを混在させると不一致が生じ、コンパイルエラーや実行時エラーの原因となることがあります。詳細については、「Conventions for Function Prototypes」を参照してください。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での定義
#include <windows.h>
// WSAQUERYSET2A (x64 112 / x86 56 バイト)
typedef struct WSAQUERYSET2A {
DWORD dwSize;
LPSTR lpszServiceInstanceName;
WSAVERSION* lpVersion;
LPSTR lpszComment;
DWORD dwNameSpace;
GUID* lpNSProviderId;
LPSTR lpszContext;
DWORD dwNumberOfProtocols;
AFPROTOCOLS* lpafpProtocols;
LPSTR lpszQueryString;
DWORD dwNumberOfCsAddrs;
CSADDR_INFO* lpcsaBuffer;
DWORD dwOutputFlags;
BLOB* lpBlob;
} WSAQUERYSET2A;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WSAQUERYSET2A
{
public uint dwSize;
public IntPtr lpszServiceInstanceName;
public IntPtr lpVersion;
public IntPtr lpszComment;
public uint dwNameSpace;
public IntPtr lpNSProviderId;
public IntPtr lpszContext;
public uint dwNumberOfProtocols;
public IntPtr lpafpProtocols;
public IntPtr lpszQueryString;
public uint dwNumberOfCsAddrs;
public IntPtr lpcsaBuffer;
public uint dwOutputFlags;
public IntPtr lpBlob;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WSAQUERYSET2A
Public dwSize As UInteger
Public lpszServiceInstanceName As IntPtr
Public lpVersion As IntPtr
Public lpszComment As IntPtr
Public dwNameSpace As UInteger
Public lpNSProviderId As IntPtr
Public lpszContext As IntPtr
Public dwNumberOfProtocols As UInteger
Public lpafpProtocols As IntPtr
Public lpszQueryString As IntPtr
Public dwNumberOfCsAddrs As UInteger
Public lpcsaBuffer As IntPtr
Public dwOutputFlags As UInteger
Public lpBlob As IntPtr
End Structureimport ctypes
from ctypes import wintypes
class WSAQUERYSET2A(ctypes.Structure):
_fields_ = [
("dwSize", wintypes.DWORD),
("lpszServiceInstanceName", ctypes.c_void_p),
("lpVersion", ctypes.c_void_p),
("lpszComment", ctypes.c_void_p),
("dwNameSpace", wintypes.DWORD),
("lpNSProviderId", ctypes.c_void_p),
("lpszContext", ctypes.c_void_p),
("dwNumberOfProtocols", wintypes.DWORD),
("lpafpProtocols", ctypes.c_void_p),
("lpszQueryString", ctypes.c_void_p),
("dwNumberOfCsAddrs", wintypes.DWORD),
("lpcsaBuffer", ctypes.c_void_p),
("dwOutputFlags", wintypes.DWORD),
("lpBlob", ctypes.c_void_p),
]#[repr(C)]
pub struct WSAQUERYSET2A {
pub dwSize: u32,
pub lpszServiceInstanceName: *mut core::ffi::c_void,
pub lpVersion: *mut core::ffi::c_void,
pub lpszComment: *mut core::ffi::c_void,
pub dwNameSpace: u32,
pub lpNSProviderId: *mut core::ffi::c_void,
pub lpszContext: *mut core::ffi::c_void,
pub dwNumberOfProtocols: u32,
pub lpafpProtocols: *mut core::ffi::c_void,
pub lpszQueryString: *mut core::ffi::c_void,
pub dwNumberOfCsAddrs: u32,
pub lpcsaBuffer: *mut core::ffi::c_void,
pub dwOutputFlags: u32,
pub lpBlob: *mut core::ffi::c_void,
}import "golang.org/x/sys/windows"
type WSAQUERYSET2A struct {
dwSize uint32
lpszServiceInstanceName uintptr
lpVersion uintptr
lpszComment uintptr
dwNameSpace uint32
lpNSProviderId uintptr
lpszContext uintptr
dwNumberOfProtocols uint32
lpafpProtocols uintptr
lpszQueryString uintptr
dwNumberOfCsAddrs uint32
lpcsaBuffer uintptr
dwOutputFlags uint32
lpBlob uintptr
}type
WSAQUERYSET2A = record
dwSize: DWORD;
lpszServiceInstanceName: Pointer;
lpVersion: Pointer;
lpszComment: Pointer;
dwNameSpace: DWORD;
lpNSProviderId: Pointer;
lpszContext: Pointer;
dwNumberOfProtocols: DWORD;
lpafpProtocols: Pointer;
lpszQueryString: Pointer;
dwNumberOfCsAddrs: DWORD;
lpcsaBuffer: Pointer;
dwOutputFlags: DWORD;
lpBlob: Pointer;
end;const WSAQUERYSET2A = extern struct {
dwSize: u32,
lpszServiceInstanceName: ?*anyopaque,
lpVersion: ?*anyopaque,
lpszComment: ?*anyopaque,
dwNameSpace: u32,
lpNSProviderId: ?*anyopaque,
lpszContext: ?*anyopaque,
dwNumberOfProtocols: u32,
lpafpProtocols: ?*anyopaque,
lpszQueryString: ?*anyopaque,
dwNumberOfCsAddrs: u32,
lpcsaBuffer: ?*anyopaque,
dwOutputFlags: u32,
lpBlob: ?*anyopaque,
};type
WSAQUERYSET2A {.bycopy.} = object
dwSize: uint32
lpszServiceInstanceName: pointer
lpVersion: pointer
lpszComment: pointer
dwNameSpace: uint32
lpNSProviderId: pointer
lpszContext: pointer
dwNumberOfProtocols: uint32
lpafpProtocols: pointer
lpszQueryString: pointer
dwNumberOfCsAddrs: uint32
lpcsaBuffer: pointer
dwOutputFlags: uint32
lpBlob: pointerstruct WSAQUERYSET2A
{
uint dwSize;
void* lpszServiceInstanceName;
void* lpVersion;
void* lpszComment;
uint dwNameSpace;
void* lpNSProviderId;
void* lpszContext;
uint dwNumberOfProtocols;
void* lpafpProtocols;
void* lpszQueryString;
uint dwNumberOfCsAddrs;
void* lpcsaBuffer;
uint dwOutputFlags;
void* lpBlob;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; WSAQUERYSET2A サイズ: 56 バイト(x86)
dim st, 14 ; 4byte整数×14(構造体サイズ 56 / 4 切り上げ)
; dwSize : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; lpszServiceInstanceName : LPSTR (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; lpVersion : WSAVERSION* (+8, 4byte) varptr(st)+8 を基点に操作(4byte:入れ子/配列)
; lpszComment : LPSTR (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; dwNameSpace : DWORD (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; lpNSProviderId : GUID* (+20, 4byte) varptr(st)+20 を基点に操作(4byte:入れ子/配列)
; lpszContext : LPSTR (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; dwNumberOfProtocols : DWORD (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; lpafpProtocols : AFPROTOCOLS* (+32, 4byte) varptr(st)+32 を基点に操作(4byte:入れ子/配列)
; lpszQueryString : LPSTR (+36, 4byte) st.9 = 値 / 値 = st.9 (lpoke/lpeek も可)
; dwNumberOfCsAddrs : DWORD (+40, 4byte) st.10 = 値 / 値 = st.10 (lpoke/lpeek も可)
; lpcsaBuffer : CSADDR_INFO* (+44, 4byte) varptr(st)+44 を基点に操作(4byte:入れ子/配列)
; dwOutputFlags : DWORD (+48, 4byte) st.12 = 値 / 値 = st.12 (lpoke/lpeek も可)
; lpBlob : BLOB* (+52, 4byte) varptr(st)+52 を基点に操作(4byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; WSAQUERYSET2A サイズ: 112 バイト(x64)
dim st, 28 ; 4byte整数×28(構造体サイズ 112 / 4 切り上げ)
; dwSize : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; lpszServiceInstanceName : LPSTR (+8, 8byte) qpoke st,8,値 / qpeek(st,8) ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; lpVersion : WSAVERSION* (+16, 8byte) varptr(st)+16 を基点に操作(8byte:入れ子/配列)
; lpszComment : LPSTR (+24, 8byte) qpoke st,24,値 / qpeek(st,24) ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; dwNameSpace : DWORD (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; lpNSProviderId : GUID* (+40, 8byte) varptr(st)+40 を基点に操作(8byte:入れ子/配列)
; lpszContext : LPSTR (+48, 8byte) qpoke st,48,値 / qpeek(st,48) ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; dwNumberOfProtocols : DWORD (+56, 4byte) st.14 = 値 / 値 = st.14 (lpoke/lpeek も可)
; lpafpProtocols : AFPROTOCOLS* (+64, 8byte) varptr(st)+64 を基点に操作(8byte:入れ子/配列)
; lpszQueryString : LPSTR (+72, 8byte) qpoke st,72,値 / qpeek(st,72) ※IronHSPのみ。3.7/3.8は lpoke st,72,下位 : lpoke st,76,上位
; dwNumberOfCsAddrs : DWORD (+80, 4byte) st.20 = 値 / 値 = st.20 (lpoke/lpeek も可)
; lpcsaBuffer : CSADDR_INFO* (+88, 8byte) varptr(st)+88 を基点に操作(8byte:入れ子/配列)
; dwOutputFlags : DWORD (+96, 4byte) st.24 = 値 / 値 = st.24 (lpoke/lpeek も可)
; lpBlob : BLOB* (+104, 8byte) varptr(st)+104 を基点に操作(8byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global WSAQUERYSET2A
#field int dwSize
#field intptr lpszServiceInstanceName
#field intptr lpVersion
#field intptr lpszComment
#field int dwNameSpace
#field intptr lpNSProviderId
#field intptr lpszContext
#field int dwNumberOfProtocols
#field intptr lpafpProtocols
#field intptr lpszQueryString
#field int dwNumberOfCsAddrs
#field intptr lpcsaBuffer
#field int dwOutputFlags
#field intptr lpBlob
#endstruct
stdim st, WSAQUERYSET2A ; NSTRUCT 変数を確保
st->dwSize = 100
mes "dwSize=" + st->dwSize