ホーム › Networking.HttpServer › HTTP_SERVICE_CONFIG_SSL_CCS_QUERY
HTTP_SERVICE_CONFIG_SSL_CCS_QUERY
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 | ||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| QueryDesc | HTTP_SERVICE_CONFIG_QUERY_TYPE | 4 | +0 | +0 | HTTP_SERVICE_CONFIG_QUERY_TYPE 列挙型の次のいずれかの値です。HttpQueryServiceConfiguration の呼び出しが単一のレコードを取得する呼び出しであるか、一連のレコードを取得する一連の呼び出しの一部であるかを示します。
| ||||||
| KeyDesc | HTTP_SERVICE_CONFIG_SSL_CCS_KEY | 128 | +8 | +8 | QueryDesc メンバーが HttpServiceConfigQueryExact と等しい場合に、照会する SSL CCS 証明書レコードを識別する HTTP_SERVICE_CONFIG_SSL_CCS_KEY 構造体です。QueryDesc が HTTPServiceConfigQueryNext と等しい場合は無視されます。 | ||||||
| dwToken | DWORD | 4 | +136 | +136 | QueryDesc メンバーが HTTPServiceConfigQueryNext と等しい場合に、この HttpQueryServiceConfiguration の呼び出しで取得するレコードの、一連のレコード内での位置です (0 から開始します)。つまり、dwToken は HttpQueryServiceConfiguration 関数の 1 回目の呼び出しでは 0、2 回目の呼び出しでは 1、3 回目の呼び出しでは 2、というようになっていなければなりません。一連の呼び出しですべての SSL 証明書レコードが返された時点で、HttpQueryServiceConfiguration は ERROR_NO_MORE_ITEMS を返します。 QueryDesc が HttpServiceConfigQueryExact と等しい場合は無視されます。 |
公式ドキュメント
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)
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 Structureimport 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: uint32struct 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