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

HTTP_SERVICE_CONFIG_SSL_SNI_SET

構造体
サイズx64: 216 バイト / x86: 192 バイト

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

フィールド

フィールドサイズx64x86説明
KeyDescHTTP_SERVICE_CONFIG_SSL_SNI_KEY136+0+0設定対象のSNIバインディングを識別するキー(IP/ポート/ホスト名)記述子。
ParamDescHTTP_SERVICE_CONFIG_SSL_PARAM80/52+136+136設定するSSL構成パラメータの記述子。

各言語での定義

#include <windows.h>

// SOCKADDR_STORAGE  (x64 128 / x86 128 バイト)
typedef struct SOCKADDR_STORAGE {
    ADDRESS_FAMILY ss_family;
    CHAR __ss_pad1[6];
    LONGLONG __ss_align;
    CHAR __ss_pad2[112];
} SOCKADDR_STORAGE;

// HTTP_SERVICE_CONFIG_SSL_SNI_KEY  (x64 136 / x86 136 バイト)
typedef struct HTTP_SERVICE_CONFIG_SSL_SNI_KEY {
    SOCKADDR_STORAGE IpPort;
    LPWSTR Host;
} HTTP_SERVICE_CONFIG_SSL_SNI_KEY;

// HTTP_SERVICE_CONFIG_SSL_PARAM  (x64 80 / x86 52 バイト)
typedef struct HTTP_SERVICE_CONFIG_SSL_PARAM {
    DWORD SslHashLength;
    void* pSslHash;
    GUID AppId;
    LPWSTR pSslCertStoreName;
    DWORD DefaultCertCheckMode;
    DWORD DefaultRevocationFreshnessTime;
    DWORD DefaultRevocationUrlRetrievalTimeout;
    LPWSTR pDefaultSslCtlIdentifier;
    LPWSTR pDefaultSslCtlStoreName;
    DWORD DefaultFlags;
} HTTP_SERVICE_CONFIG_SSL_PARAM;

// HTTP_SERVICE_CONFIG_SSL_SNI_SET  (x64 216 / x86 192 バイト)
typedef struct HTTP_SERVICE_CONFIG_SSL_SNI_SET {
    HTTP_SERVICE_CONFIG_SSL_SNI_KEY KeyDesc;
    HTTP_SERVICE_CONFIG_SSL_PARAM ParamDesc;
} HTTP_SERVICE_CONFIG_SSL_SNI_SET;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct SOCKADDR_STORAGE
{
    public ushort ss_family;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)] public sbyte[] __ss_pad1;
    public long __ss_align;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 112)] public sbyte[] __ss_pad2;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct HTTP_SERVICE_CONFIG_SSL_SNI_KEY
{
    public SOCKADDR_STORAGE IpPort;
    public IntPtr Host;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct HTTP_SERVICE_CONFIG_SSL_PARAM
{
    public uint SslHashLength;
    public IntPtr pSslHash;
    public Guid AppId;
    public IntPtr pSslCertStoreName;
    public uint DefaultCertCheckMode;
    public uint DefaultRevocationFreshnessTime;
    public uint DefaultRevocationUrlRetrievalTimeout;
    public IntPtr pDefaultSslCtlIdentifier;
    public IntPtr pDefaultSslCtlStoreName;
    public uint DefaultFlags;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct HTTP_SERVICE_CONFIG_SSL_SNI_SET
{
    public HTTP_SERVICE_CONFIG_SSL_SNI_KEY KeyDesc;
    public HTTP_SERVICE_CONFIG_SSL_PARAM ParamDesc;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure SOCKADDR_STORAGE
    Public ss_family As UShort
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=6)> Public __ss_pad1() As SByte
    Public __ss_align As Long
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=112)> Public __ss_pad2() As SByte
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure HTTP_SERVICE_CONFIG_SSL_SNI_KEY
    Public IpPort As SOCKADDR_STORAGE
    Public Host As IntPtr
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure HTTP_SERVICE_CONFIG_SSL_PARAM
    Public SslHashLength As UInteger
    Public pSslHash As IntPtr
    Public AppId As Guid
    Public pSslCertStoreName As IntPtr
    Public DefaultCertCheckMode As UInteger
    Public DefaultRevocationFreshnessTime As UInteger
    Public DefaultRevocationUrlRetrievalTimeout As UInteger
    Public pDefaultSslCtlIdentifier As IntPtr
    Public pDefaultSslCtlStoreName As IntPtr
    Public DefaultFlags As UInteger
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure HTTP_SERVICE_CONFIG_SSL_SNI_SET
    Public KeyDesc As HTTP_SERVICE_CONFIG_SSL_SNI_KEY
    Public ParamDesc As HTTP_SERVICE_CONFIG_SSL_PARAM
End Structure
import ctypes
from ctypes import wintypes

class SOCKADDR_STORAGE(ctypes.Structure):
    _fields_ = [
        ("ss_family", ctypes.c_ushort),
        ("__ss_pad1", ctypes.c_byte * 6),
        ("__ss_align", ctypes.c_longlong),
        ("__ss_pad2", ctypes.c_byte * 112),
    ]

class HTTP_SERVICE_CONFIG_SSL_SNI_KEY(ctypes.Structure):
    _fields_ = [
        ("IpPort", SOCKADDR_STORAGE),
        ("Host", ctypes.c_void_p),
    ]

class HTTP_SERVICE_CONFIG_SSL_PARAM(ctypes.Structure):
    _fields_ = [
        ("SslHashLength", wintypes.DWORD),
        ("pSslHash", ctypes.c_void_p),
        ("AppId", GUID),
        ("pSslCertStoreName", ctypes.c_void_p),
        ("DefaultCertCheckMode", wintypes.DWORD),
        ("DefaultRevocationFreshnessTime", wintypes.DWORD),
        ("DefaultRevocationUrlRetrievalTimeout", wintypes.DWORD),
        ("pDefaultSslCtlIdentifier", ctypes.c_void_p),
        ("pDefaultSslCtlStoreName", ctypes.c_void_p),
        ("DefaultFlags", wintypes.DWORD),
    ]

class HTTP_SERVICE_CONFIG_SSL_SNI_SET(ctypes.Structure):
    _fields_ = [
        ("KeyDesc", HTTP_SERVICE_CONFIG_SSL_SNI_KEY),
        ("ParamDesc", HTTP_SERVICE_CONFIG_SSL_PARAM),
    ]
#[repr(C)]
pub struct SOCKADDR_STORAGE {
    pub ss_family: u16,
    pub __ss_pad1: [i8; 6],
    pub __ss_align: i64,
    pub __ss_pad2: [i8; 112],
}

#[repr(C)]
pub struct HTTP_SERVICE_CONFIG_SSL_SNI_KEY {
    pub IpPort: SOCKADDR_STORAGE,
    pub Host: *mut core::ffi::c_void,
}

#[repr(C)]
pub struct HTTP_SERVICE_CONFIG_SSL_PARAM {
    pub SslHashLength: u32,
    pub pSslHash: *mut core::ffi::c_void,
    pub AppId: GUID,
    pub pSslCertStoreName: *mut core::ffi::c_void,
    pub DefaultCertCheckMode: u32,
    pub DefaultRevocationFreshnessTime: u32,
    pub DefaultRevocationUrlRetrievalTimeout: u32,
    pub pDefaultSslCtlIdentifier: *mut core::ffi::c_void,
    pub pDefaultSslCtlStoreName: *mut core::ffi::c_void,
    pub DefaultFlags: u32,
}

#[repr(C)]
pub struct HTTP_SERVICE_CONFIG_SSL_SNI_SET {
    pub KeyDesc: HTTP_SERVICE_CONFIG_SSL_SNI_KEY,
    pub ParamDesc: HTTP_SERVICE_CONFIG_SSL_PARAM,
}
import "golang.org/x/sys/windows"

type SOCKADDR_STORAGE struct {
	ss_family uint16
	__ss_pad1 [6]int8
	__ss_align int64
	__ss_pad2 [112]int8
}

type HTTP_SERVICE_CONFIG_SSL_SNI_KEY struct {
	IpPort SOCKADDR_STORAGE
	Host uintptr
}

type HTTP_SERVICE_CONFIG_SSL_PARAM struct {
	SslHashLength uint32
	pSslHash uintptr
	AppId windows.GUID
	pSslCertStoreName uintptr
	DefaultCertCheckMode uint32
	DefaultRevocationFreshnessTime uint32
	DefaultRevocationUrlRetrievalTimeout uint32
	pDefaultSslCtlIdentifier uintptr
	pDefaultSslCtlStoreName uintptr
	DefaultFlags uint32
}

type HTTP_SERVICE_CONFIG_SSL_SNI_SET struct {
	KeyDesc HTTP_SERVICE_CONFIG_SSL_SNI_KEY
	ParamDesc HTTP_SERVICE_CONFIG_SSL_PARAM
}
type
  SOCKADDR_STORAGE = record
    ss_family: Word;
    __ss_pad1: array[0..5] of Shortint;
    __ss_align: Int64;
    __ss_pad2: array[0..111] of Shortint;
  end;

  HTTP_SERVICE_CONFIG_SSL_SNI_KEY = record
    IpPort: SOCKADDR_STORAGE;
    Host: Pointer;
  end;

  HTTP_SERVICE_CONFIG_SSL_PARAM = record
    SslHashLength: DWORD;
    pSslHash: Pointer;
    AppId: TGUID;
    pSslCertStoreName: Pointer;
    DefaultCertCheckMode: DWORD;
    DefaultRevocationFreshnessTime: DWORD;
    DefaultRevocationUrlRetrievalTimeout: DWORD;
    pDefaultSslCtlIdentifier: Pointer;
    pDefaultSslCtlStoreName: Pointer;
    DefaultFlags: DWORD;
  end;

  HTTP_SERVICE_CONFIG_SSL_SNI_SET = record
    KeyDesc: HTTP_SERVICE_CONFIG_SSL_SNI_KEY;
    ParamDesc: HTTP_SERVICE_CONFIG_SSL_PARAM;
  end;
const SOCKADDR_STORAGE = extern struct {
    ss_family: u16,
    __ss_pad1: [6]i8,
    __ss_align: i64,
    __ss_pad2: [112]i8,
};

const HTTP_SERVICE_CONFIG_SSL_SNI_KEY = extern struct {
    IpPort: SOCKADDR_STORAGE,
    Host: ?*anyopaque,
};

const HTTP_SERVICE_CONFIG_SSL_PARAM = extern struct {
    SslHashLength: u32,
    pSslHash: ?*anyopaque,
    AppId: GUID,
    pSslCertStoreName: ?*anyopaque,
    DefaultCertCheckMode: u32,
    DefaultRevocationFreshnessTime: u32,
    DefaultRevocationUrlRetrievalTimeout: u32,
    pDefaultSslCtlIdentifier: ?*anyopaque,
    pDefaultSslCtlStoreName: ?*anyopaque,
    DefaultFlags: u32,
};

const HTTP_SERVICE_CONFIG_SSL_SNI_SET = extern struct {
    KeyDesc: HTTP_SERVICE_CONFIG_SSL_SNI_KEY,
    ParamDesc: HTTP_SERVICE_CONFIG_SSL_PARAM,
};
type
  SOCKADDR_STORAGE {.bycopy.} = object
    ss_family: uint16
    __ss_pad1: array[6, int8]
    __ss_align: int64
    __ss_pad2: array[112, int8]

  HTTP_SERVICE_CONFIG_SSL_SNI_KEY {.bycopy.} = object
    IpPort: SOCKADDR_STORAGE
    Host: pointer

  HTTP_SERVICE_CONFIG_SSL_PARAM {.bycopy.} = object
    SslHashLength: uint32
    pSslHash: pointer
    AppId: GUID
    pSslCertStoreName: pointer
    DefaultCertCheckMode: uint32
    DefaultRevocationFreshnessTime: uint32
    DefaultRevocationUrlRetrievalTimeout: uint32
    pDefaultSslCtlIdentifier: pointer
    pDefaultSslCtlStoreName: pointer
    DefaultFlags: uint32

  HTTP_SERVICE_CONFIG_SSL_SNI_SET {.bycopy.} = object
    KeyDesc: HTTP_SERVICE_CONFIG_SSL_SNI_KEY
    ParamDesc: HTTP_SERVICE_CONFIG_SSL_PARAM
struct SOCKADDR_STORAGE
{
    ushort ss_family;
    byte[6] __ss_pad1;
    long __ss_align;
    byte[112] __ss_pad2;
}

struct HTTP_SERVICE_CONFIG_SSL_SNI_KEY
{
    SOCKADDR_STORAGE IpPort;
    void* Host;
}

struct HTTP_SERVICE_CONFIG_SSL_PARAM
{
    uint SslHashLength;
    void* pSslHash;
    GUID AppId;
    void* pSslCertStoreName;
    uint DefaultCertCheckMode;
    uint DefaultRevocationFreshnessTime;
    uint DefaultRevocationUrlRetrievalTimeout;
    void* pDefaultSslCtlIdentifier;
    void* pDefaultSslCtlStoreName;
    uint DefaultFlags;
}

struct HTTP_SERVICE_CONFIG_SSL_SNI_SET
{
    HTTP_SERVICE_CONFIG_SSL_SNI_KEY KeyDesc;
    HTTP_SERVICE_CONFIG_SSL_PARAM ParamDesc;
}

HSP用 定義

HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; HTTP_SERVICE_CONFIG_SSL_SNI_SET サイズ: 192 バイト(x86)
dim st, 48    ; 4byte整数×48(構造体サイズ 192 / 4 切り上げ)
; KeyDesc : HTTP_SERVICE_CONFIG_SSL_SNI_KEY (+0, 136byte)  varptr(st)+0 を基点に操作(136byte:入れ子/配列)
; ParamDesc : HTTP_SERVICE_CONFIG_SSL_PARAM (+136, 52byte)  varptr(st)+136 を基点に操作(52byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; HTTP_SERVICE_CONFIG_SSL_SNI_SET サイズ: 216 バイト(x64)
dim st, 54    ; 4byte整数×54(構造体サイズ 216 / 4 切り上げ)
; KeyDesc : HTTP_SERVICE_CONFIG_SSL_SNI_KEY (+0, 136byte)  varptr(st)+0 を基点に操作(136byte:入れ子/配列)
; ParamDesc : HTTP_SERVICE_CONFIG_SSL_PARAM (+136, 80byte)  varptr(st)+136 を基点に操作(80byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global SOCKADDR_STORAGE
    #field short ss_family
    #field byte __ss_pad1 6
    #field int64 __ss_align
    #field byte __ss_pad2 112
#endstruct

#defstruct global HTTP_SERVICE_CONFIG_SSL_SNI_KEY
    #field SOCKADDR_STORAGE IpPort
    #field intptr Host
#endstruct

#defstruct global GUID, pack=1
    #field int Data1
    #field short Data2
    #field short Data3
    #field byte Data4 8
#endstruct

#defstruct global HTTP_SERVICE_CONFIG_SSL_PARAM
    #field int SslHashLength
    #field intptr pSslHash
    #field GUID AppId
    #field intptr pSslCertStoreName
    #field int DefaultCertCheckMode
    #field int DefaultRevocationFreshnessTime
    #field int DefaultRevocationUrlRetrievalTimeout
    #field intptr pDefaultSslCtlIdentifier
    #field intptr pDefaultSslCtlStoreName
    #field int DefaultFlags
#endstruct

#defstruct global HTTP_SERVICE_CONFIG_SSL_SNI_SET
    #field HTTP_SERVICE_CONFIG_SSL_SNI_KEY KeyDesc
    #field HTTP_SERVICE_CONFIG_SSL_PARAM ParamDesc
#endstruct

stdim st, HTTP_SERVICE_CONFIG_SSL_SNI_SET        ; NSTRUCT 変数を確保