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

HTTP_SERVICE_CONFIG_SSL_CCS_QUERY

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

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

フィールド

フィールドサイズx64x86説明
QueryDescHTTP_SERVICE_CONFIG_QUERY_TYPE4+0+0

HTTP_SERVICE_CONFIG_QUERY_TYPE 列挙型の次のいずれかの値です。HttpQueryServiceConfiguration の呼び出しが単一のレコードを取得する呼び出しであるか、一連のレコードを取得する一連の呼び出しの一部であるかを示します。

意味
HttpServiceConfigQueryExact
HttpQueryServiceConfiguration の呼び出しは、KeyDesc メンバーで指定される単一の SSL CCS 証明書レコードを取得する呼び出しです。
HttpServiceConfigQueryNext
HttpQueryServiceConfiguration の呼び出しは、一連の SSL CCS 証明書レコードを取得する一連の呼び出しの一部です。この HttpQueryServiceConfiguration の呼び出しがシーケンス内のどのレコードを取得するかは、dwToken メンバーの値によって制御されます。
KeyDescHTTP_SERVICE_CONFIG_SSL_CCS_KEY128+8+8QueryDesc メンバーが HttpServiceConfigQueryExact と等しい場合に、照会する SSL CCS 証明書レコードを識別する HTTP_SERVICE_CONFIG_SSL_CCS_KEY 構造体です。QueryDescHTTPServiceConfigQueryNext と等しい場合は無視されます。
dwTokenDWORD4+136+136QueryDesc メンバーが HTTPServiceConfigQueryNext と等しい場合に、この HttpQueryServiceConfiguration の呼び出しで取得するレコードの、一連のレコード内での位置です (0 から開始します)。つまり、dwTokenHttpQueryServiceConfiguration 関数の 1 回目の呼び出しでは 0、2 回目の呼び出しでは 1、3 回目の呼び出しでは 2、というようになっていなければなりません。一連の呼び出しですべての SSL 証明書レコードが返された時点で、HttpQueryServiceConfigurationERROR_NO_MORE_ITEMS を返します。 QueryDescHttpServiceConfigQueryExact と等しい場合は無視されます。

公式ドキュメント

HttpQueryServiceConfiguration 関数を呼び出すときに、ポート上の SSL 一元化証明書ストア (CCS) レコードを照会するための Secure Sockets Layer (SSL) 構成を指定します。この SSL 証明書レコードは、ポートが Transport Layer Security (TLS) ハンドシェイクを受信した場合に、Http.sys が証明書を探すために CCS ストアを参照することを指定します。

解説(Remarks)

ConfigId パラメーターに HttpServiceConfigSslCcsCertInfo を設定する場合、この構造体を pInputConfigInfo パラメーターで HttpQueryServiceConfiguration 関数に渡します。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での定義

#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_CCS_KEY  (x64 128 / x86 128 バイト)
typedef struct HTTP_SERVICE_CONFIG_SSL_CCS_KEY {
    SOCKADDR_STORAGE LocalAddress;
} HTTP_SERVICE_CONFIG_SSL_CCS_KEY;

// HTTP_SERVICE_CONFIG_SSL_CCS_QUERY  (x64 144 / x86 144 バイト)
typedef struct HTTP_SERVICE_CONFIG_SSL_CCS_QUERY {
    HTTP_SERVICE_CONFIG_QUERY_TYPE QueryDesc;
    HTTP_SERVICE_CONFIG_SSL_CCS_KEY KeyDesc;
    DWORD dwToken;
} HTTP_SERVICE_CONFIG_SSL_CCS_QUERY;
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_CCS_KEY
{
    public SOCKADDR_STORAGE LocalAddress;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct HTTP_SERVICE_CONFIG_SSL_CCS_QUERY
{
    public int QueryDesc;
    public HTTP_SERVICE_CONFIG_SSL_CCS_KEY KeyDesc;
    public uint dwToken;
}
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_CCS_KEY
    Public LocalAddress As SOCKADDR_STORAGE
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure HTTP_SERVICE_CONFIG_SSL_CCS_QUERY
    Public QueryDesc As Integer
    Public KeyDesc As HTTP_SERVICE_CONFIG_SSL_CCS_KEY
    Public dwToken As UInteger
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_CCS_KEY(ctypes.Structure):
    _fields_ = [
        ("LocalAddress", SOCKADDR_STORAGE),
    ]

class HTTP_SERVICE_CONFIG_SSL_CCS_QUERY(ctypes.Structure):
    _fields_ = [
        ("QueryDesc", ctypes.c_int),
        ("KeyDesc", HTTP_SERVICE_CONFIG_SSL_CCS_KEY),
        ("dwToken", wintypes.DWORD),
    ]
#[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_CCS_KEY {
    pub LocalAddress: SOCKADDR_STORAGE,
}

#[repr(C)]
pub struct HTTP_SERVICE_CONFIG_SSL_CCS_QUERY {
    pub QueryDesc: i32,
    pub KeyDesc: HTTP_SERVICE_CONFIG_SSL_CCS_KEY,
    pub dwToken: u32,
}
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_CCS_KEY struct {
	LocalAddress SOCKADDR_STORAGE
}

type HTTP_SERVICE_CONFIG_SSL_CCS_QUERY struct {
	QueryDesc int32
	KeyDesc HTTP_SERVICE_CONFIG_SSL_CCS_KEY
	dwToken uint32
}
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_CCS_KEY = record
    LocalAddress: SOCKADDR_STORAGE;
  end;

  HTTP_SERVICE_CONFIG_SSL_CCS_QUERY = record
    QueryDesc: Integer;
    KeyDesc: HTTP_SERVICE_CONFIG_SSL_CCS_KEY;
    dwToken: DWORD;
  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_CCS_KEY = extern struct {
    LocalAddress: SOCKADDR_STORAGE,
};

const HTTP_SERVICE_CONFIG_SSL_CCS_QUERY = extern struct {
    QueryDesc: i32,
    KeyDesc: HTTP_SERVICE_CONFIG_SSL_CCS_KEY,
    dwToken: u32,
};
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_CCS_KEY {.bycopy.} = object
    LocalAddress: SOCKADDR_STORAGE

  HTTP_SERVICE_CONFIG_SSL_CCS_QUERY {.bycopy.} = object
    QueryDesc: int32
    KeyDesc: HTTP_SERVICE_CONFIG_SSL_CCS_KEY
    dwToken: uint32
struct SOCKADDR_STORAGE
{
    ushort ss_family;
    byte[6] __ss_pad1;
    long __ss_align;
    byte[112] __ss_pad2;
}

struct HTTP_SERVICE_CONFIG_SSL_CCS_KEY
{
    SOCKADDR_STORAGE LocalAddress;
}

struct HTTP_SERVICE_CONFIG_SSL_CCS_QUERY
{
    int QueryDesc;
    HTTP_SERVICE_CONFIG_SSL_CCS_KEY KeyDesc;
    uint dwToken;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; HTTP_SERVICE_CONFIG_SSL_CCS_QUERY サイズ: 144 バイト(x64)
dim st, 36    ; 4byte整数×36(構造体サイズ 144 / 4 切り上げ)
; QueryDesc : HTTP_SERVICE_CONFIG_QUERY_TYPE (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; KeyDesc : HTTP_SERVICE_CONFIG_SSL_CCS_KEY (+8, 128byte)  varptr(st)+8 を基点に操作(128byte:入れ子/配列)
; dwToken : DWORD (+136, 4byte)  st.34 = 値  /  値 = st.34   (lpoke/lpeek も可)
; ※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_CCS_KEY
    #field SOCKADDR_STORAGE LocalAddress
#endstruct

#defstruct global HTTP_SERVICE_CONFIG_SSL_CCS_QUERY
    #field int QueryDesc
    #field HTTP_SERVICE_CONFIG_SSL_CCS_KEY KeyDesc
    #field int dwToken
#endstruct

stdim st, HTTP_SERVICE_CONFIG_SSL_CCS_QUERY        ; NSTRUCT 変数を確保
st->QueryDesc = 100
mes "QueryDesc=" + st->QueryDesc